打印
[STM32WBA]

【STM32WBA52CG测评】+电子时钟显示牌

[复制链接]
742|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-8-8 22:47 编辑

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

图1 点阵屏外观

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

图3 硬件构成

该点阵屏与开发板的连接关系为:
A  ----PB0
B  ----PB14
C  ----PB2
D  ----PA12
R1 ----PB3  
CLK----PB4
EN ----PA9
STB----PA15

图4 所用接口


所用引脚输出高低电平的语句定义为:
#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)


所用引脚的初始化函数为:
void dzb_GPIO_Init(void)
{
  __HAL_RCC_GPIOB_CLK_ENABLE();
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_10|GPIO_PIN_14;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  __HAL_RCC_GPIOA_CLK_ENABLE();
  GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_12|GPIO_PIN_15;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

点阵板发送数据的函数为:
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;
    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,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,/*" ",12*/
};


读取RTC计时值函数为:
static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
{
  RTC_DateTypeDef sdatestructureget;
  RTC_TimeTypeDef stimestructureget;
  HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
  HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
  sj[0]=stimestructureget.Hours/10;
  sj[1]=stimestructureget.Hours%10;
  sj[3]=stimestructureget.Minutes/10;
  sj[4]=stimestructureget.Minutes%10;
  sj[6]=stimestructureget.Seconds/10;
  sj[7]=stimestructureget.Seconds%10;
  Display();
}


实现显示输出效果的函数为:
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_RTC_Init();
  MX_ICACHE_Init();
  RTCStatus = 1;
  dzb_GPIO_Init();
  ScanRow=0;
  while (1)
  {
    RTC_CalendarShow(aShowTime, aShowDate);
  }
}


经程序的编译与下载,其执行效果如图4所示。在添加字库的情况下,其汉字显示效果如图5所示。

图5 显示效果


视频演示:


使用特权

评论回复
沙发
gejigeji521| | 2024-1-12 17:05 | 只看该作者
这个是什么接口的?

使用特权

评论回复
板凳
gejigeji521| | 2024-1-12 17:06 | 只看该作者
第一次看到这个接口。

使用特权

评论回复
地板
jinglixixi|  楼主 | 2024-1-12 21:44 | 只看该作者
gejigeji521 发表于 2024-1-12 17:05
这个是什么接口的?

HUB08接口,一种点阵板常用的接口。

使用特权

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

本版积分规则

446

主题

2675

帖子

37

粉丝