[活动专区] 【杰发科技AC7802x测评】+点阵屏显示驱动

[复制链接]
1324|0
 楼主| jinglixixi 发表于 2023-7-20 00:44 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-7-20 00:48 编辑

#申请原创#
在通常的情况下,我们所所用的显示器件多是数码管、液晶屏、OLED屏及TFT屏。但在公共场合要显示信息,就要有较大尺寸以便观察。
通常多使用半板来拼接成较大的广告牌,这里使用的是一款P4.75的红色点阵板,其显示分辨率为16*64像素点。


1.jpg
图1 点阵屏外观

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

3.jpg
图3 硬件构成

该点阵屏与开发板的连接关系为:
A----PB5
B----PB3
C----PB4
D----PB6
R1----PA8
CLK----PB7
EN ----PA2
STB----PA3

所用引脚输出高低电平的语句定义为:
#defineLA_high    GPIO_SetPinLevel(GPIOB,GPIO_PIN5, GPIO_LEVEL_HIGH)
#defineLA_low     GPIO_SetPinLevel(GPIOB,GPIO_PIN5, GPIO_LEVEL_LOW)
#defineLB_high    GPIO_SetPinLevel(GPIOB,GPIO_PIN3, GPIO_LEVEL_HIGH)
#defineLB_low     GPIO_SetPinLevel(GPIOB,GPIO_PIN3, GPIO_LEVEL_LOW)
#defineLC_high    GPIO_SetPinLevel(GPIOB,GPIO_PIN4, GPIO_LEVEL_HIGH)
#defineLC_low     GPIO_SetPinLevel(GPIOB,GPIO_PIN4, GPIO_LEVEL_LOW)
#defineLD_high    GPIO_SetPinLevel(GPIOB,GPIO_PIN6, GPIO_LEVEL_HIGH)
#defineLD_low     GPIO_SetPinLevel(GPIOB,GPIO_PIN6, GPIO_LEVEL_LOW)
#defineLR1_high   GPIO_SetPinLevel(GPIOA,GPIO_PIN8, GPIO_LEVEL_HIGH)
#defineLR1_low    GPIO_SetPinLevel(GPIOA,GPIO_PIN8, GPIO_LEVEL_LOW)
#defineCLK_high   GPIO_SetPinLevel(GPIOB,GPIO_PIN7, GPIO_LEVEL_HIGH)
#defineCLK_low    GPIO_SetPinLevel(GPIOB,GPIO_PIN7, GPIO_LEVEL_LOW)
#defineLEN_high   GPIO_SetPinLevel(GPIOA, GPIO_PIN2,GPIO_LEVEL_HIGH)
#defineLEN_low    GPIO_SetPinLevel(GPIOA,GPIO_PIN2, GPIO_LEVEL_LOW)
#defineLSTB_high  GPIO_SetPinLevel(GPIOA,GPIO_PIN3, GPIO_LEVEL_HIGH)
#defineLSTB_low   GPIO_SetPinLevel(GPIOA,GPIO_PIN3, GPIO_LEVEL_LOW)

所用引脚的初始化函数为:
  1. void dzb_GPIO(void)
  2. {
  3.       GPIO_SetFunc(GPIOB, GPIO_PIN3, GPIO_FUN0);
  4.       GPIO_SetFunc(GPIOB, GPIO_PIN4, GPIO_FUN0);
  5.       GPIO_SetFunc(GPIOB, GPIO_PIN5, GPIO_FUN0);
  6.       GPIO_SetFunc(GPIOB, GPIO_PIN6, GPIO_FUN0);
  7.       GPIO_SetFunc(GPIOB, GPIO_PIN7 , GPIO_FUN0);
  8.       GPIO_SetFunc(GPIOA, GPIO_PIN8, GPIO_FUN0);
  9.       GPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN0);
  10.       GPIO_SetFunc(GPIOA, GPIO_PIN3, GPIO_FUN0);
  11.       GPIO_SetDir(GPIOB, GPIO_PIN3, GPIO_OUT);
  12.       GPIO_SetDir(GPIOB, GPIO_PIN4, GPIO_OUT);
  13.       GPIO_SetDir(GPIOB, GPIO_PIN5, GPIO_OUT);
  14.       GPIO_SetDir(GPIOB, GPIO_PIN6, GPIO_OUT);
  15.       GPIO_SetDir(GPIOB, GPIO_PIN7, GPIO_OUT);
  16.       GPIO_SetDir(GPIOA, GPIO_PIN8, GPIO_OUT);
  17.       GPIO_SetDir(GPIOA, GPIO_PIN2, GPIO_OUT);
  18.       GPIO_SetDir(GPIOA, GPIO_PIN3, GPIO_OUT);
  19. }

点阵板发送数据的函数为:
  1. void OutByte(u16 dat)
  2. {
  3.     u8 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(u16 lenght)
  2. {
  3.     u16 dat;
  4.     u8 m=0;
  5.     u8 sj[]={0x01,0x02,0x0A,0x03,0x00,0x0A,0x03,0x00};
  6.     while(lenght--)
  7.     {
  8.          dat=(S[sj[m+1]*16+ScanRow]<<8)+S[sj[m]*16+ScanRow];
  9.          OutByte(dat);
  10.          m=m+2;
  11.     }
  12. }

输出行地址的函数为:
  1. void  SeleRow(u8 Nd)
  2. {
  3.     u8 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. }

为实现数字符号的显示,以字模提取软件所构建的字库存储结构为:
  1. u8 S[]={
  2. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"0",0*/
  3. 0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"1",1*/
  4. 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,/*"2",2*/
  5. 0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,/*"3",3*/
  6. 0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00,/*"4",4*/
  7. 0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,/*"5",5*/
  8. 0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"6",6*/
  9. 0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,/*"7",7*/
  10. 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*"8",8*/
  11. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,/*"9",9*/
  12. 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,/*":",10*/
  13. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",11*/
  14. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  15. };

实现显示输出的函数为:
  1. int main(void)
  2. {
  3.       InitDelay();
  4.       InitDebug();
  5.       TIMER_PrdInit();
  6.       mdelay(200);
  7.       dzb_GPIO();
  8.       ScanRow=0;
  9.       while (1)
  10.       {
  11.                  Display();
  12.                  mdelay(1);
  13.       }
  14. }

经程序的编译与下载,其执行效果如图4所示。
4.jpg
图4 电子时钟显示效果


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

本版积分规则

521

主题

2949

帖子

39

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