目录
-
起因和写在前面的一些废话
这个比我还老的四段式ASCii字符显示器不知道啥时候在咸鱼上火起来了,我发现后立即对其产生了兴趣,看起来超有复古情怀的有木有?手痒难耐,思考再三还是剁手了,连datasheet都没查……十分内疚……以后还是先查datasheet再剁手好了……

到手后发现……这玩意……也太小了吧……不过反正这个古董也就5块钱一片,我买的时候亏了一点,想买黑色版本的,结果卖家说没货了,就发了5.5软妹币的版本,多发了一块……555……
本人是个不爱学习的菜鸡,所以所有单片机中玩的比较熟的就只有Arduino了,在金钱的驱动力下不得不找办法把这货点亮了(只有剁手才有可能刺激我学习),还好,这玩意其实不难点亮。
-
datasheet的分析
抱着试一试的态度,我找了一下datasheet,竟然意外的好找2333,下面的图片节选自datasheet,如有版权问题,请联系我删除,谢谢。
这个datasheet是HPDL 1414和HPDL 2416的,所以很多内容是关于HPDL 2416的,我们并不用去了解它
1.引脚图

这张图说明了各个引脚的功能以及怎样确定1号引脚,后面的引脚其实按照常用的逆时针顺序就可以确定了,表中1号引脚是D5,12号引脚是D6,印刷的不太清楚了,具体各个引脚的作用后面再告诉你。
2.推荐工作电压
爽啦,就是常用的USB的5V供电,Arduino正好带这个引脚可以给它供电。
3.字符集(各个图形对应的二进制数据)

想必你刚看到这张表的时候有些头大,不过对ASCii熟悉的大佬们大概已经看出来了,这就是ASCii的后7个bits啊!这么说,你肯定不会觉得它难了吧?
我们也能通过这张图知道D0~D6管脚是用来确定每一段的米字显示的字符的。
4.真值表
这张表就很清楚地说明了D0~D6对应的就是ASCii表(我当时还没发现,还准备一位位地摆弄Arduino的引脚的……)
另外可以看出A0、A1是用来确定控制哪一段数码管的,例如{A0,A1}=0时就是将D0~D6对应的字符显示到右边开始第一段,这样我们就能通过改变A0、A1的值选择四个段了。
这个显示器是自带锁存器的(看这个真值表也可能是触发器?)WR信号可以看作触发器的时钟信号,只有WR为低电位时被A0、A1选中的段才会改变,否则显示之前的字符,这样就可以同时控制多个HPDL 1414了,A0、A1、D0~D6都可以复用只要单独控制WR即可。
-
代码的编写
说明了各个引脚的作用,我们就可以使用Arduino控制HPDL 1414各个引脚的电平来显示字符啦。
void dispchar(int add,char data){ //add即是A0,A1,用来控制字符显示的位置,data即是D0~D6,用来控制对应位显示的字符
switch (add) { //字符显示的位置
case 0:
digitalWrite(10, 0);
digitalWrite(11, 0);
break;
case 1:
digitalWrite(10, 1);
digitalWrite(11, 0);
break;
case 2:
digitalWrite(10, 0);
digitalWrite(11, 1);
break;
case 3:
digitalWrite(10, 1);
digitalWrite(11, 1);
break;
default:
digitalWrite(10, 0);
digitalWrite(11, 0);
break;
}
digitalWrite(2, (data>>0) & 1); //获取char的各个bit,即ASCii的后7个bits,将其分配至各自的引脚
digitalWrite(3, (data>>1) & 1);
digitalWrite(4, (data>>2) & 1);
digitalWrite(5, (data>>3) & 1);
digitalWrite(6, (data>>4) & 1);
digitalWrite(7, (data>>5) & 1);
digitalWrite(8, (data>>6) & 1);
digitalWrite(9,0); //拉低WR引脚,改变状态
delay(1); //holdtime,使得触发器能够正确的采样各个引脚的电平(并不用这么久,实际只用200ns)
digitalWrite(9,1); //拉高WR引脚,防止已经成功保存的状态再次改变
}
void setup() {
pinMode(2,OUTPUT); //D0 8 HPDL_1414的管脚功能 HPDL_1414的管脚编号
pinMode(3,OUTPUT); //D1 9
pinMode(4,OUTPUT); //D2 10
pinMode(5,OUTPUT); //D3 11
pinMode(6,OUTPUT); //D4 2
pinMode(7,OUTPUT); //D5 1
pinMode(8,OUTPUT); //D6 12
pinMode(9,OUTPUT); //WR 3
pinMode(10,OUTPUT); //A0 5
pinMode(11,OUTPUT); //A1 4
}
void loop() {
dispchar(3,'H'); //写入你需要让它显示的字符和位置即可,这里显示的是“HPDL”,大约一秒后显示“1414”
dispchar(2,'P');
dispchar(1,'D');
dispchar(0,'L');
delay(1000);
dispchar(3,'1');
dispchar(2,'4');
dispchar(1,'1');
dispchar(0,'4');
delay(1000);
}
-
显示效果
把它和你的Arduino按setup()部分的注释连接起来,接上电源就能显示内容啦。

你会在酷安看到这篇文章
https://www.coolapk.com/feed/19960250?shareKey=YjcyYWZlNmZhY2EwNWVmZmNmZmM~&shareUid=2554518&shareFrom=com.coolapk.market_10.3.1
,也是我上传的,除此以外没有上传其它平台了。