TM1650/AIP650數碼管驅動顯示STM32驅動程序HAL庫

參考例程講解

1、 Display顯示DEMO:git

一、 硬件:app

 

 

 

圖1.1 數碼管模塊原理圖函數

    由圖1.1可知MCU經過DAT&CLK(I2C)兩個引腳去控制數碼管驅動IC,從而達到控制數碼管的顯示;打開TM1650/AIP650規格書,工具

 

 

 

 

圖1.2 控制命令oop

咱們知道TM1650/AIP650能夠經過顯示命令控制控制數碼管的顯示。spa

 

 

 

圖1.3顯存地址code

 

經過往顯存地址裏面寫數據能夠就能夠實現數字&字母在數碼管的顯示效果。blog

 

 

 

圖1.3完整的寫顯示時序接口

完整的寫顯示時序如圖1.3所示。這就MCU& TM1650/AIP650的通訊協議,也就是說,經過軟件實現寫顯示時序,咱們就能實現咱們所要的顯示效果,接下來請看軟件部分ip

 

二、 軟件:

/**
  * @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!\r\n");
  /* 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\r\n",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();

}

 

至此軟件部分到此結束;

三、 下載驗證:(略)

 

2、 KEY按鍵掃描DEMO:(略)

一、 硬件:(略)

二、 軟件:(略)

三、 下載驗證:(略)

 

 

略略略:不是不講,有時間再更

 

代碼&模塊資料徹底公開,你們自行下載

連接:https://pan.baidu.com/s/1PbtRHr5zBTxIJVryTuwXqQ 提取碼:yw0h

相關文章
相關標籤/搜索