暑假的时候被人安利了HPDL1414这款数码管,当时还不清楚这个数码管是啥,就是看外形比较中意吧。最近因为武汉发生了新型肺炎这破事,于是这个买回来吃灰了半年的数码管被我翻出来了,准备写一写他的驱动。找到淘宝卖家要到了一份datasheet才知道他的名字是HPDL-1414。带着这个名字去百度搜索一下,也能搜索到一些文章,用HPDL-1414作电脑状态显示等。
这些文章我也点进去看了,其中电脑状态显示的那个是开源的,但是我没有积分,故没有下载他的代码,我只看了文章。文章对底层也没有一个清晰明确的讲解,很多地方都是一笔带过,可能对于萌新电子爱好者,以及其他非电子类的朋友而言比较难于理解。所以本文会结合1414的datasheet来讲解如何驱动1414数码管。
首先来说说要准备的东西:主控一块、3.3v电源一个、5v电源一个、1414数码管一个、杜邦线若干、焊台、焊锡、洞洞板、2.54mm间距的电子积木插座(圆孔排母)若干、2.54mm间距排针若干。
我使用的主控是STM32F429IGT6,这块芯片要用3.3V供电,然而1414使用的是5V(Typ)供电,因此要准备两个电源。但是如果你使用的是51或者Arduino这类本身就是5V供电的芯片,可以共用一个电源。
洞洞板、插座、排针这些自然是制作一个固定1414的底座,并且能引出1414的引脚,通过杜邦线与主控相连。
打开1414的datasheet,首先看引脚部分:
1414一共有12个引脚,6、7脚作为供电脚,7个数据脚和一个写使能脚。写使能脚为3脚,并且低电平有效。
datasheet中告知了如何辨别1脚:
即有字的一面左边第一个引脚是一脚,按照逆时针旋转过去依次为12个引脚的排序。
接着来看时序图:
这个时序图是我们写程序的说明书,根据时序图我们可以知道操作引脚的顺序,并且引脚保持高/低电平的时间也有标注:
主要是值得我们关注。在操作的时候,先把D0~D6(段选)操作到自己想要的结果,然后操作A0、A1(位选),操作完成后,经过操作WS对1414进行写操作,WS要维持时间,也就是说,每次写操作的间隔要在以上(也可以理解为这款数码管的刷新率吧)。不过从上表可以看到典型值为100ns,这个时间已经非常短了。
以上大概是这么个思路,为了更加简洁明了一些,我画了一个流程图来表示:
接着开始写代码了,由于我使用的是STM32的芯片,ST提供了一个叫做STM32CUBEMX的工具,我直接使用这个工具对代码环境进行配置。
引脚配置:
时钟配置:
工程配置:
这个软件比较方便的就是配置起来很舒服,不用自己再去开时钟,开外设,并且我配置的GPIO它在生成代码时会自动帮我我宏定义在main.h中:
这样做有什么好处呢?如果我更换了一款芯片,或者我跟换了引脚,我的程序可以不需要任何修改,直接修改软件中的配置然后生成新的代码就可以使用了。
下面是具体代码
写使能与写失能:非常简单,拉低WR线就是代表1414可以写入显示的数据,拉高WR线就是代表1414显示当前数据保持不变。
位选:这个要看datasheet
根据datasheet可知,A0和A1为00、01、10、11的时候,位选为0、1、2、3。因此程序如下:
然后是段选,说到这里,就体现这款米字数码管和普通的数码管区别了。1414的段选直接和ASCII对应起来的,可以显示64种ASCII字符,从0x20显示到0x5F:
写程序就是把对应的ASCII码转换成7位GPIO的状态。所以我定义了7个变量用于表示ASCII的每一位,也是GPIO的状态。
通过一个形参输入ASCII,然后解析每一位是0还是1,来拉高或拉低对应的数据线:
完成了段选位选之后,就可以写一个功能函数了:写操作。这个函数自然包含两个形参:段选(要写进去的字或符号)、位选(要显示在哪里)。
要注意这里我在写操作的时候延时了1ms,因为HAL库中支持的最快的延时单位就是ms,虽然也有一些花里胡哨的操作可以弄成us,但是为了保证系统的稳定(其实是想偷懒),这里就用了1ms。根据之前的分析,100ns以上都是可以的。即想要效率更高的话可以选择延时500ns或者1us之类。
然后还可以酌情加一些清屏之类的功能函数(就是让四个管全部显示空格):
来一个实例展示:
显示效果:
其实还是挺简单的,主要是之前懒,现在是在家里百无聊赖,就随手写了写。
PS:我在某宝买的4个,60块钱(含邮费),坏了3个,还差点把我的F4烧坏了,要不是我警觉,怕要大大损失一笔。
22:18:09 更新:
加了一个滚动显示功能上去,代码也挺简单的:
视频地址:https://www.bilibili.com/video/av85324219?from=search&seid=14388677469779731988