在单片机的应用中,数控数码显示是比较常见的一种方式。例如计数显示、温湿度显示、定时设置显示等,在MCU的I/O口线足够的情况下数码管可以按段按位直接驱动显示。若MCU的I/O口线不足以按段按位直接驱动,就只能采取以扫描方式显示了。扫描方式显示的好处是用有限个I/O口线,能实现多位(从理论上讲可以是任意位)数码管的显示。然而,任何事物都是一分为二的。好处多了,相应问题也可能多了。
附图是笔者曾参与设计制作的注塑机预热定时控制装置的相关显示部分的电路结构图。MCU的串行口与两片8位串行输入/并行输出移位寄存器74HC164相连组成输出扩展口。其中第一片74HC164用作数码显示的段码输出,第二片74HC164用作显示的位码输出,也就是MCU串口的两个I/O口线以扫描方式就实现了五位数码的显示(在这里中间闪烁的“两点”也算一位)。
当注塑机预热定时控制装置组装好进行调试时发现除一位数码“显示”外,其他几位都无显示,且细看“显示”的那一位似乎是几个数码叠加在一起的。因为,它看上去常是像个“8”,而“8”字的各个笔段的亮度均衡不等、变化不定。
这确是个有趣的现象。经检查发现由于电路板制作时敷铜层腐蚀不彻底,数码显示位驱动的一根“位线”与周围的“铺地”有一处细小的连接(如附图中右下角的虚线所示),也就是ULN2003第10脚驱动的那根“位线”被短接到“地”。于是该“位线”相对应的那位数码管就一直被选通。因为,所用的数码管是“共阴”数码管,是由ULN2003下拉驱动的,现在该位下拉到“地”,因而在整个循环扫描分时显示过程中一直被选通驱动显示着。然而,对于软件程序来说该位数码,与其他将被扫描显示的各数码并无两样,软件程序仍将按部就班地分时输出与被扫描选通位对应的数据用以显示。
也正因为是循环扫描分时显示的,所以当某一位被扫描选通时,其“停滞”的时间是相当短暂的,而短路到“地”的那一位却始终“选通”着,因此当被软件选通的该位欲显示相应数据的时候,短路到“地”的那一位已先于它将该位数据显示了(因为被选通位下拉低电平的建立至稳定需要一个“过程”,而短路到“地”的那一位是一直处于低电平的,且比用ULN2003选通下拉的电平更低),所以显示相应数据的时间也比软件选通的该位更长。这样,在短路到“地”的那一位上就会显示所有位的数据,且不定地显示着一个叠加的不断变化的字符。在人们眼睛的错觉中,似乎惟有这一位是在显示着。
问题2
以上问题1中若把与“地”短接处割开,该问题也就解决了,即能一位一位的“分开”显示了。可是,不料新的问题却又出现了,看上去所显示的各位数码还是零乱而飘忽不定。
从上述数码显示现象上看,不应该是电路板上的硬件导致的,因为笔段飘忽如浮水面的效果硬件是做不到的。分析了相关循环扫描显示的软件程序,只能怀疑是循环扫描的周期太短,以至选通每一位显示的滞留时间太短促,一闪而过造成显示不稳定。在此思路下增改了MCU大循环主程序中延时子程序的延时量,果然,数码显示清晰稳定了。实验表明,循环扫描分时显示的分时滞留间隔一般在1~5ms间为宜。滞留间隔太短数码显示会零乱不定,但滞留间隔过长显示的字符又会出现抖动现象。
问题3
这是笔者在搞智能温控仪时碰到的一个问题,也是个循环扫描方式显示的电路(电路结构与附图类似)。五位数码时而正常显示,时而却有“缺笔”现象。经慢慢地仔细观察,发觉可能“缺笔”的都只是数码中的其中两个笔段。但“缺笔”很不规律,有时五个数码同时“缺笔”,有时只其中几位“缺笔”,有时又都正常了。
搞清这一步后,笔者检查了这两个笔段对应的相关电路。发现74HC164输出这两个笔段的管脚焊接时因焊锡的毛刺短接了!难怪,当某一位数码上的数据所对应该两笔段输出同为高电平或同为低电平时,看上去就不“缺笔”;若该两笔段输出电平或高或低不相同时就有“缺笔”现象了,因为,两笔段线一高一低,高的那线电平终要被低电平的那线“拉低”,造成“缺笔”。由于五位数码所显示的数据不尽相同,也就是各位数码所对应的该两笔段的信息不尽相同,因而“缺笔”现象也就“各有千秋”不成规律了。
自然,处理了焊点间毛刺的短接,“缺笔”现象也就彻底消除了。
文/温正伟
