【杰发科技AC7802x测评】+点阵屏显示驱动

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



 

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

图2  HUB08接口

图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)

所用引脚的初始化函数为:
void dzb_GPIO(void)

{

      GPIO_SetFunc(GPIOB, GPIO_PIN3, GPIO_FUN0);

      GPIO_SetFunc(GPIOB, GPIO_PIN4, GPIO_FUN0);

      GPIO_SetFunc(GPIOB, GPIO_PIN5, GPIO_FUN0);

      GPIO_SetFunc(GPIOB, GPIO_PIN6, GPIO_FUN0);

      GPIO_SetFunc(GPIOB, GPIO_PIN7 , GPIO_FUN0);

      GPIO_SetFunc(GPIOA, GPIO_PIN8, GPIO_FUN0);

      GPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN0);

      GPIO_SetFunc(GPIOA, GPIO_PIN3, GPIO_FUN0);

      GPIO_SetDir(GPIOB, GPIO_PIN3, GPIO_OUT);

      GPIO_SetDir(GPIOB, GPIO_PIN4, GPIO_OUT);

      GPIO_SetDir(GPIOB, GPIO_PIN5, GPIO_OUT);

      GPIO_SetDir(GPIOB, GPIO_PIN6, GPIO_OUT);

      GPIO_SetDir(GPIOB, GPIO_PIN7, GPIO_OUT);

      GPIO_SetDir(GPIOA, GPIO_PIN8, GPIO_OUT);

      GPIO_SetDir(GPIOA, GPIO_PIN2, GPIO_OUT);

      GPIO_SetDir(GPIOA, GPIO_PIN3, GPIO_OUT);

}

点阵板发送数据的函数为:
void OutByte(u16 dat)

{

    u8 i=0 ;

    for(i=0;i<16;i++)

    {

        CLK_low;

        if(dat&0x0001) 

        {

            LR1_high;

        }

        else

        {

            LR1_low;

        }

        dat=dat>>1;

        CLK_high;

    }

}

发送多列数据的函数为:
void DisCol(u16 lenght)

{

    u16 dat;

    u8 m=0;

    u8 sj[]={0x01,0x02,0x0A,0x03,0x00,0x0A,0x03,0x00};

    while(lenght--)

    {

         dat=(S[sj[m+1]*16+ScanRow]<<8)+S[sj[m]*16+ScanRow];

         OutByte(dat);

         m=m+2;

    }

}

输出行地址的函数为:
void  SeleRow(u8 Nd)

{

    u8 N;

    N=Nd;

    N=N%16;

    if(N&0x01)   LA_high;

    else  LA_low;

    if (N&0x02)  LB_high;

    else  LB_low;

    if (N&0x04)  LC_high;

    else  LC_low;

    if (N&0x08)  LD_high;

    else  LD_low;

}

实现显示输出的函数为:
void  Display(void)

{

      DisCol(4);

      LEN_high;

      LSTB_high;

      LSTB_low;

      SeleRow(ScanRow);

      LEN_low;

      ScanRow++;

      if(ScanRow>15)  ScanRow=0;

}

为实现数字符号的显示,以字模提取软件所构建的字库存储结构为:
u8 S[]={

0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"0",0*/

0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"1",1*/

0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00,/*"2",2*/

0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,/*"3",3*/

0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00,/*"4",4*/

0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00,/*"5",5*/

0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"6",6*/

0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,/*"7",7*/

0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*"8",8*/

0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00,/*"9",9*/

0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,/*":",10*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",11*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

实现显示输出的函数为:
int main(void)

{

      InitDelay();

      InitDebug();

      TIMER_PrdInit();

      mdelay(200);

      dzb_GPIO();

      ScanRow=0;

      while (1)

      {

                 Display();

                 mdelay(1);

      }

}

经程序的编译与下载,其执行效果如图4所示。

图4 电子时钟显示效果。
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3315650-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值