zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    乐在其中设计模式(C#) 享元模式(Flyweight Pattern)
    乐在其中设计模式(C#) 抽象工厂模式(Abstract Factory Pattern)
    新瓶旧酒ASP.NET AJAX(7) 客户端脚本编程(Sys命名空间下的类)
    [翻译]在GridView中针对鼠标单击的某一独立单元格进行编辑
    乐在其中设计模式(C#) 中介者模式(Mediator Pattern)
    [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
    [翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) 基本应用
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)各种线程相关操作类
    Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
    Winform分页控件支持表头全选操作实现
  • 原文地址:https://www.cnblogs.com/Li-Share/p/13055299.html
Copyright © 2011-2022 走看看