[开发板] 【CW32L031CxTx StartKit评估板测评】+点阵屏显示驱动与电子时钟

[复制链接]
930|0
 楼主| jinglixixi 发表于 2023-10-26 12:32 | 显示全部楼层 |阅读模式
#申请原创#
在通常的情况下,我们所用的显示器件多是数码管、液晶屏等。但在公共场合则需要使用较大尺寸规格的显示器件。
通常情况下,告广牌是由半板拼接而成,这里是选用一款P4.75的红色点阵板,其显示分辨率为16*64像素点。
1.jpg
图1 点阵屏外观

该点阵板采用的接口方式为HUB08,各引脚的名称如图2所示。
2.jpg
图2  HUB08接口

点阵板与开发板的引脚连接关系为:
A  ---- PA10
B  ---- PA11
C  ---- PA12
D  ----PA15
R1 ---- PB5
CLK---- PB6
EN ---- PB7
STB---- PB8
所用引脚的工作模式配置函数为:
  1. void dzp_CONFIG(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStruct = {0};  
  4.         __RCC_GPIOC_CLK_ENABLE();
  5.     GPIO_InitStruct.IT = GPIO_IT_NONE;
  6.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  7.     GPIO_InitStruct.Pins = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7| GPIO_PIN_8;
  8.     GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
  9.         GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  10.         GPIO_InitStruct.Pins = GPIO_PIN_10 | GPIO_PIN_11| GPIO_PIN_12| GPIO_PIN_15;
  11.     GPIO_Init(CW_GPIOA, &GPIO_InitStruct);
  12. }
所用引脚输出高低电平的语句定义为:
#defineLA_high    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_SET)
#defineLA_low     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_RESET)
#defineLB_high    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, GPIO_PIN_SET)
#defineLB_low     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, GPIO_PIN_RESET)
#defineLC_high    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2, GPIO_PIN_SET)
#defineLC_low     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2, GPIO_PIN_RESET)
#defineLD_high    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12, GPIO_PIN_SET)
#defineLD_low     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12, GPIO_PIN_RESET)
#defineLR1_high   HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3, GPIO_PIN_SET)
#defineLR1_low    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3, GPIO_PIN_RESET)
#defineCLK_high   HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4, GPIO_PIN_SET)
#defineCLK_low    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4, GPIO_PIN_RESET)
#defineLEN_high   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9, GPIO_PIN_SET)
#defineLEN_low    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_RESET)
#defineLSTB_high  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15, GPIO_PIN_SET)
#defineLSTB_low   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15, GPIO_PIN_RESET)

点阵板发送数据的函数为:
  1. void OutByte(uint16_t dat)
  2. {
  3.     uint8_t i=0 ;
  4.     for(i=0;i<16;i++)
  5.     {
  6.         CLK_low;
  7.         if(dat&0x0001)
  8.         {
  9.             LR1_high;
  10.         }
  11.         else
  12.         {
  13.             LR1_low;
  14.         }
  15.         dat=dat>>1;
  16.         CLK_high;
  17.     }
  18. }
发送多列数据的函数为:
  1. void DisCol(uint16_t lenght)
  2. {
  3.     uint16_t dat;
  4.     uint8_t m=0;
  5.     while(lenght--)
  6.     {
  7.          dat=(S[sj[m+1]*16+ScanRow]<<8)+S[sj[m]*16+ScanRow];
  8.          OutByte(dat);
  9.          m=m+2;
  10.     }
  11. }
输出行地址的函数为:
  1. void  SeleRow(uint8_t Nd)
  2. {
  3.     uint8_t N;
  4.     N=Nd;
  5.     N=N%16;
  6.     if(N&0x01)   LA_high;
  7.     else  LA_low;
  8.     if (N&0x02)  LB_high;
  9.     else  LB_low;
  10.     if (N&0x04)  LC_high;
  11.     else  LC_low;
  12.     if (N&0x08)  LD_high;
  13.     else  LD_low;
  14. }
实现显示输出的函数为:
  1. void  Display(void)
  2. {
  3.       DisCol(4);
  4.       LEN_high;
  5.       LSTB_high;
  6.       LSTB_low;
  7.       SeleRow(ScanRow);
  8.       LEN_low;
  9.       ScanRow++;
  10.       if(ScanRow>15)  ScanRow=0;
  11. }
读取RTC计时值并加以显示的函数为:
  1. void ShowTime(void)
  2. {
  3.     RTC_TimeTypeDef RTC_TimeStruct = {0};
  4.     RTC_DateTypeDef RTC_DateStruct = {0};
  5.     RTC_GetDate(&RTC_DateStruct);
  6.     RTC_GetTime(&RTC_TimeStruct);
  7.     sj[0]= RTC_TimeStruct.Hour /10;
  8.     sj[1]= RTC_TimeStruct.Hour %10;
  9.     sj[3]= RTC_TimeStruct.Minute /10;
  10.     sj[4]= RTC_TimeStruct.Minute %10;
  11.     sj[6]= RTC_TimeStruct.Second /10;
  12.     sj[7]= RTC_TimeStruct.Second %10;
  13.     Display();
  14. }
实现显示输出的主程序为:
  1. int32_t main(void)
  2. {
  3.     RTC_InitTypeDef RTC_InitStruct = {0};
  4.     RTC_AlarmTypeDef RTC_AlarmStruct = {0};
  5.     RCC_Configuration();
  6.     GPIO_Configuration();
  7.     NVIC_Configuration();
  8.     RCC_LSE_Enable(RCC_LSE_MODE_OSC, RCC_LSE_AMP_NORMAL, RCC_LSE_DRIVER_NORMAL);
  9.     RTC_InitStruct.DateStruct.Day = 0x26;    RTC_InitStruct.DateStruct.Month =10;
  10.     RTC_InitStruct.DateStruct.Week = 4;
  11.     RTC_InitStruct.DateStruct.Year = 0x23;
  12.     RTC_InitStruct.TimeStruct.Hour = 0x12;
  13.     RTC_InitStruct.TimeStruct.Minute = 0x20;
  14.     RTC_InitStruct.TimeStruct.Second = 0x00;
  15.     RTC_InitStruct.TimeStruct.AMPM = 0;
  16.     RTC_InitStruct.TimeStruct.H24 = 0;
  17.     RTC_InitStruct.RTC_ClockSource = RTC_RTCCLK_FROM_LSE;
  18.     RTC_Init(&RTC_InitStruct);
  19.     GPIO_InitTypeDef GPIO_InitStruct = {0};
  20.     RCC_HSI_Enable(RCC_HSIOSC_DIV6);
  21.     __RCC_GPIOC_CLK_ENABLE();
  22.     dzp_CONFIG();
  23.     ScanRow=0;
  24.     while (1)
  25.     {
  26.          ShowTime();
  27.     }
  28. }
3.jpg
图3 硬件构成及显示效果


您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部