1508浏览
查看: 1508|回复: 3

[入门] Ch552 控制 HPDL-1414 的计数器

[复制链接]
这次带来的设计是基于 Ch552 HPDL-1414 数码管计数器。
HPDL-1414 是一款历史悠久的数码管显示器,和最常见的7段数码管不同,它除了能够显示数字之外,因为有着足够的线段,还能显示英文字符。
Ch552 控制 HPDL-1414 的计数器图1

HPDL-1414 控制很简单,通过 GPIO 就可以选择点亮那些数码段组成。接下来的问题就是:对于CH552来说,GPIO 引脚不够。
传统的扩展方法是使用I2C或者 74HC595 来进行扩展,这次选择的是ESR1117:这是一款国产串口GPIO芯片。显而易见的是:相比其他接口,通过串口扩展GPIO的方案更加简单方便。我们只需要将 TX RX 交叉连接之后即可。
最终的电路设计如下:

Ch552 控制 HPDL-1414 的计数器图2

除了支持 HPDL-1414 进行显示,还预留了3 WS2812B 的位置,可以通过代码控制这些灯的颜色。
Ch552 控制 HPDL-1414 的计数器图3

完整代码如下:

  1. uint16_t Ascii2GPIO(uint8_t data, uint8_t pos)
  2. {
  3.   uint16_t Esr = 0;
  4.   Esr = pos << 2;
  5.   if ((data & (1 << 0)) != 0) {
  6.     Esr = Esr | (1 << 1); //D0
  7.   }
  8.   if ((data & (1 << 1)) != 0) {
  9.     Esr = Esr | (1 << 0);
  10.   }
  11.   if ((data & (1 << 2)) != 0) {
  12.     Esr = Esr | (1 << 9);
  13.   }
  14.   if ((data & (1 << 3)) != 0) {
  15.     Esr = Esr | (1 << 8);
  16.   }
  17.   if ((data & (1 << 4)) != 0) {
  18.     Esr = Esr | (1 << 5);
  19.   }
  20.   if ((data & (1 << 5)) != 0) {
  21.     Esr = Esr | (1 << 4);
  22.   }
  23.   if ((data & (1 << 6)) != 0) {
  24.     Esr = Esr | (1 << 7);
  25.   }
  26.   return Esr;
  27. }
  28. void output(uint8_t HiByte, uint8_t LowByte) {
  29.     USBSerial_print("Serial out, HI:[");
  30.     USBSerial_print(HiByte, HEX);
  31.     USBSerial_print("] Low[");
  32.     USBSerial_print(LowByte, HEX);
  33.     USBSerial_println("]");
  34.   // GPIO 先准备好,RW 设置为  HIGH,防止误动作
  35.   Serial0_write(0x3F); Serial0_write(0xC0); Serial0_write(0x98 | HiByte); Serial0_write(LowByte | 0b01000000);
  36.   USBSerial_print(LowByte, HEX);
  37.   delay(10);
  38.   // RW 设置为  LOW, ESR 会直接拉GPIO
  39.   Serial0_write(0x3F); Serial0_write(0xC0); Serial0_write(0x98 | HiByte); Serial0_write(LowByte);
  40.   USBSerial_print(LowByte | 0b01000000, HEX);
  41.   delay(10);
  42.   // RW 设置为  HIGH, RW 设置为  HIGH,防止误动作
  43.   Serial0_write(0x3F); Serial0_write(0xC0); Serial0_write(0x98 | HiByte); Serial0_write(LowByte | 0b01000000);
  44.   delay(10);
  45. }
  46. void setup() {
  47.   Serial0_begin(9600);
  48.   delay(2000);
  49.   // GPIO 设置为 OUTPUT
  50.   Serial0_write(0x3F); Serial0_write(0xC0); Serial0_write(0x8F); Serial0_write(0xFF);
  51.   delay(10);
  52.   
  53.   uint16_t c;
  54.   // 清除第1位显示(输出一个空格)
  55.   c = Ascii2GPIO( ' ', 0);
  56.   output(c >> 8, c & 0xFF);
  57.   
  58.   // 清除第2位显示(输出一个空格)
  59.   c = Ascii2GPIO(' ', 1);
  60.   output(c >> 8, c & 0xFF);
  61.   
  62.   // 清除第3位显示(输出一个空格)
  63.   c = Ascii2GPIO(' ', 2);
  64.   output(c >> 8, c & 0xFF);
  65.   
  66.   // 清除第4位显示(输出一个空格)
  67.   c = Ascii2GPIO(' ', 3);
  68.   output(c >> 8, c & 0xFF);
  69.   delay(2000);      
  70.   USBSerial_println("Start");
  71. }
  72. uint16_t Counter = 0;
  73. uint16_t OldCounter = 0;
  74. void loop() {
  75.     USBSerial_print("Counter");
  76.     USBSerial_println(Counter);
  77.     uint16_t c;
  78.     c = Ascii2GPIO(Counter % 10 + '0', 0);
  79.     output(c >> 8, c & 0xFF);
  80.     // 只在发生变化时才更新,减少闪烁感
  81.     if (((Counter / 10) % 10) != (OldCounter / 10) % 10) {
  82.     c = Ascii2GPIO((Counter / 10) % 10 + '0', 1);
  83.     output(c >> 8, c & 0xFF);
  84.     }
  85.     if (((Counter / 100) % 10) != (OldCounter / 100) % 10) {
  86.     c = Ascii2GPIO((Counter / 100) % 10 + '0', 2);
  87.     output(c >> 8, c & 0xFF);
  88.     }
  89.     if (((Counter / 1000) % 10) != (OldCounter / 1000) % 10) {
  90.     c = Ascii2GPIO((Counter / 1000) % 10 + '0', 3);
  91.     output(c >> 8, c & 0xFF);
  92.     }
  93.     OldCounter=Counter;
  94.     Counter++;
  95.     if (Counter > 9999) {
  96.     Counter = 0;
  97.     OldCounter=0;
  98.     }
  99. }
复制代码
成品如下:

Ch552 控制 HPDL-1414 的计数器图4






zoologist  高级技匠
 楼主|

发表于 2023-9-23 11:01:59

这个作品制作简单,有兴趣的朋友可以尝试自行完成

CH55X ERS1117.zip

41.45 KB, 下载次数: 1591

回复

使用道具 举报

zoologist  高级技匠
 楼主|

发表于 2023-9-23 11:18:06

工作的测试视频

回复

使用道具 举报

zoologist  高级技匠
 楼主|

发表于 2023-9-23 11:25:46

Ch552 控制 HPDL-1414 的计数器图1
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail