TM1650/AIP650数码管驱动显示STM32驱动程序HAL库
Posted li-share
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TM1650/AIP650数码管驱动显示STM32驱动程序HAL库相关的知识,希望对你有一定的参考价值。
参考例程讲解
一、 Display显示DEMO:
1、 硬件:
图1.1 数码管模块原理图
由图1.1可知MCU通过DAT&CLK(I2C)两个引脚去控制数码管驱动IC,从而达到控制数码管的显示;打开TM1650/AIP650规格书,
图1.2 控制命令
我们知道TM1650/AIP650可以通过显示命令控制控制数码管的显示。
图1.3显存地址
通过往显存地址里面写数据可以就可以实现数字&字母在数码管的显示效果。
图1.3完整的写显示时序
完整的写显示时序如图1.3所示。这就MCU& TM1650/AIP650的通信协议,也就是说,通过软件实现写显示时序,我们就能实现我们所要的显示效果,接下来请看软件部分
2、 软件:
/** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ u16 number=0; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ delay_init(72); /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ delay_ms(500); TM1650_Init(); printf("TM1650 Test Demo! "); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(++number>9999) { number=0; } DisplayNumber_4BitDig(number); DigitalScan(); printf("TM1650 Running:%d ",number); delay_ms(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
打开我们的例程Display,找到main函数,while之前都是函数的初始化过程,while里面是我们实现的功能:通过数码管显示从0~9999变量number,并通过串口打印出来;要实现这样的一个功能,我们就需要初始化I2C接口和UART,我们的I2C是通过IO模拟的,所以我们初始化IO口即可,这部分代码不做讲解,不同MCU各有不同
我们的IO口定义如下
#define TM_DAT_Pin GPIO_PIN_0 #define TM_DAT_GPIO_Port GPIOB #define TM_CLK_Pin GPIO_PIN_1 #define TM_CLK_GPIO_Port GPIOB
接下来我们实现完整的写显示时序:
void TM1650_Init(void){ IIC_SCL=1; IIC_SDA=1; TM1650_SendCommand(0x48,0x71); } void TM1650_SendCommand(u8 CMD1,u8 CMD2) { IIC_Start(); IIC_Send_Byte(CMD1); IIC_Wait_Ack(); IIC_Send_Byte(CMD2); IIC_Wait_Ack(); IIC_Stop(); }
这个初始化过程是写显示时序中Commant1和Commant2,再接下来我们实现写显示时序中的往ADDRESS发送DATA即可:
我们通过DisplayNumber_4BitDig给四位数码管变量赋值(码表)
void DisplayNumber_4BitDig(u16 num) { Dig1_Data=Digital_Table[num/1000]; Dig2_Data=Digital_Table[num/100%10]; Dig3_Data=Digital_Table[num/10%10]; Dig4_Data=Digital_Table[num%10]; }
如需要显示小数点,如个位的小数点则Dig1_Data=Digital_Table[num/1000]&0x08;
码表是通过共阴极数码管的码表得来,我们的驱动IC可以直接驱动数码管,这里我们可以通过附件中的数码管工具得来,然后我们调用DigitalScan,通过Aip650_SendDigData函数给驱动IC的地址ADDRESS(DIG0~ DIG3)发送DATA(Dig1_Data~ Dig4_Data)
void DigitalScan( void ) { Aip650_SendDigData(DIG0,Dig1_Data); Aip650_SendDigData(DIG1,Dig2_Data); Aip650_SendDigData(DIG2,Dig3_Data); Aip650_SendDigData(DIG3,Dig4_Data); }
void Aip650_SendDigData(u8 Dig,u8 Dat) { IIC_Start(); IIC_Send_Byte(Dig); IIC_Wait_Ack(); IIC_Send_Byte(Dat); IIC_Wait_Ack(); IIC_Stop(); }
至此软件部分到此结束;
3、 下载验证:(略)
二、 KEY按键扫描DEMO:(略)
1、 硬件:(略)
2、 软件:(略)
3、 下载验证:(略)
略略略:不是不讲,有时间再更
代码&模块资料完全公开,大家自行下载
链接:https://pan.baidu.com/s/1PbtRHr5zBTxIJVryTuwXqQ
提取码:yw0h
以上是关于TM1650/AIP650数码管驱动显示STM32驱动程序HAL库的主要内容,如果未能解决你的问题,请参考以下文章