[活动专区] 【AT-START-L021测评】+点阵板显示驱动

[复制链接]
 楼主| jinglixixi 发表于 2024-11-28 10:35 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2024-11-28 11:27 编辑

在通常的情况下,我们所用的显示器件多是数码管、液晶屏等。但在公共场合则需要使用较大尺寸规格的显示器件。
通常情况下,告广牌是由半板拼接而成,这里是选用一款P4.75的红色点阵板,其显示分辨率为16*64像素点。
510226747d59bc7fe8.png
图1 点阵屏外观


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


点阵板与开发板的引脚连接关系为:
A---- PA5
B---- PA15
C---- PB7
D---- PA9
R1 ---- PB9
CLK---- PB8
EN ---- PA7
STB---- PA6

760486747d60c3f47f.png
图3 所用接口


所用引脚的工作模式配置函数为:
  1. void dzp_CONFIG(void)
  2. {
  3.   gpio_init_type gpio_init_struct;
  4.   crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  5.   gpio_default_para_init(&gpio_init_struct);
  6.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  7.   gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  8.   gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  9.   gpio_init_struct.gpio_pins=PIO_PINS_5|GPIO_PINS_6|GPIO_PINS_7|GPIO_PINS_9|GPIO_PINS_15;
  10.   gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  11.   gpio_init(GPIOA, &gpio_init_struct);
  12.   crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  13.   gpio_init_struct.gpio_pins = GPIO_PINS_7|GPIO_PINS_8|GPIO_PINS_9;
  14.   gpio_init(GPIOB, &gpio_init_struct);
  15. }

所用引脚输出高低电平的语句定义为:
  1. #define LA_high    gpio_bits_write(GPIOA,GPIO_PINS_5,TRUE)
  2. #define LA_low     gpio_bits_write(GPIOA,GPIO_PINS_5,FALSE)
  3. #define LB_high    gpio_bits_write(GPIOA,GPIO_PINS_15,TRUE)
  4. #define LB_low     gpio_bits_write(GPIOA,GPIO_PINS_15,FALSE)
  5. #define LC_high    gpio_bits_write(GPIOB,GPIO_PINS_7,TRUE)
  6. #define LC_low     gpio_bits_write(GPIOB,GPIO_PINS_7,FALSE)
  7. #define LD_high    gpio_bits_write(GPIOA,GPIO_PINS_9,TRUE)
  8. #define LD_low     gpio_bits_write(GPIOA,GPIO_PINS_9,FALSE)

  9. #define LR1_high   gpio_bits_write(GPIOB,GPIO_PINS_9,TRUE)
  10. #define LR1_low    gpio_bits_write(GPIOB,GPIO_PINS_9,FALSE)
  11. #define CLK_high   gpio_bits_write(GPIOB,GPIO_PINS_8,TRUE)
  12. #define CLK_low    gpio_bits_write(GPIOB,GPIO_PINS_8,FALSE)
  13. #define LEN_high   gpio_bits_write(GPIOA,GPIO_PINS_7,TRUE)
  14. #define LEN_low    gpio_bits_write(GPIOA,GPIO_PINS_7,FALSE)
  15. #define LSTB_high  gpio_bits_write(GPIOA,GPIO_PINS_6,TRUE)
  16. #define LSTB_low   gpio_bits_write(GPIOA,GPIO_PINS_6,FALSE)

点阵板发送数据的函数为:
  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.     sj[0]=1;
  4.     sj[1]= 2;
  5.     sj[2]= 10;
  6.     sj[3]= 3;
  7.     sj[4]= 4;
  8.     sj[5]= 10;
  9.     sj[6]= 5;
  10.     sj[7]= 6;
  11.     Display();
  12. }

实现显示测试的主程序为:
  1. int32_t main(void)
  2. {
  3.     dzp_CONFIG();
  4.     ScanRow=0;
  5.     while (1)
  6.     {
  7.          ShowTime();
  8.     }
  9. }

经程序的编译与下载,其显示效果如图4所示。
883986747d6ed0b38e.png
4  硬件构成及显示效果

此外,在变更字库及显示函数的情况下,可实现汉字的显示,其效果如图5所示。
752656747e2ee7d660.png
5  汉字显示效果
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2934

帖子

39

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

518

主题

2934

帖子

39

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