打印
[活动专区]

【AT-START-L021测评】+点阵板显示驱动

[复制链接]
319|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2024-11-28 11:27 编辑

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


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


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

图3 所用接口


所用引脚的工作模式配置函数为:
void dzp_CONFIG(void)
{
  gpio_init_type gpio_init_struct;
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins=PIO_PINS_5|GPIO_PINS_6|GPIO_PINS_7|GPIO_PINS_9|GPIO_PINS_15;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOA, &gpio_init_struct);
  crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  gpio_init_struct.gpio_pins = GPIO_PINS_7|GPIO_PINS_8|GPIO_PINS_9;
  gpio_init(GPIOB, &gpio_init_struct);
}

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

#define LR1_high   gpio_bits_write(GPIOB,GPIO_PINS_9,TRUE)
#define LR1_low    gpio_bits_write(GPIOB,GPIO_PINS_9,FALSE)
#define CLK_high   gpio_bits_write(GPIOB,GPIO_PINS_8,TRUE)
#define CLK_low    gpio_bits_write(GPIOB,GPIO_PINS_8,FALSE)
#define LEN_high   gpio_bits_write(GPIOA,GPIO_PINS_7,TRUE)
#define LEN_low    gpio_bits_write(GPIOA,GPIO_PINS_7,FALSE)
#define LSTB_high  gpio_bits_write(GPIOA,GPIO_PINS_6,TRUE)
#define LSTB_low   gpio_bits_write(GPIOA,GPIO_PINS_6,FALSE)

点阵板发送数据的函数为:
void OutByte(uint16_t dat)
{
    uint8_t 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(uint16_t lenght)
{
    uint16_t dat;
    uint8_t m=0;
    while(lenght--)
    {
         dat=(S[sj[m+1]*16+ScanRow]<<8)+S[sj[m]*16+ScanRow];
         OutByte(dat);
         m=m+2;
    }
}

输出行地址的函数为:
void  SeleRow(uint8_t Nd)
{
    uint8_t 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;
}

读取RTC计时值并加以显示的函数为:
void ShowTime(void)
{
    sj[0]=1;
    sj[1]= 2;
    sj[2]= 10;
    sj[3]= 3;
    sj[4]= 4;
    sj[5]= 10;
    sj[6]= 5;
    sj[7]= 6;
    Display();
}

实现显示测试的主程序为:
int32_t main(void)
{
    dzp_CONFIG();
    ScanRow=0;
    while (1)
    {
         ShowTime();
    }
}

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

此外,在变更字库及显示函数的情况下,可实现汉字的显示,其效果如图5所示。
5  汉字显示效果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2783

帖子

38

粉丝