数码管的静态显示与动态显示介绍
数码管是单片机系统中经常用到的显示器件, 从内部结构上可以分为共阴极和共阳极数码管。对不同的数码管,电路的接法也不一样。图1A为数码管的结构图。以共阳极数码管为例, 要想点亮某段, 只需要在相应的段上给低电平即可。图1B为共阳极数码管段码分布, 以及一个显示的实例。
图1 数码管段码分布及显示示例
按照工作方式, 数码管驱动可以分为静态显示和动态扫描。所谓静态显示, 就是每一个数码管的段码都要独占具有锁存功能的输出口, CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符, 直到下一次送出另外一个字码之前, 显示的内容一直不会消失;动态扫描是把所有显示器的8个段码中的A-dp的各个相同段连接在一起, 接到一个公共的输出口上,而数码管的位端分别接在另外的输出口上,通过这两个输出口的两组信号相互作用来产生显示效果。即让各位数码管按照一定顺序轮流显示, 只要扫描频率足够高, 由于人眼的“ 视觉暂留”现象,就能连续稳定的显示。静态显示法的优点是显示稳定、亮度大, 节约CPU时间, 但占有I/O口线较多, 硬件成本高。动态扫描其特点在于能显著降低显示部分成本,大大减少显示接口的连线结构。举例, 静态驱动4位数码管, 需要4×8=32个I/O口, 而动态的驱动位数码管只需要4+8=12个I/O口。
电路图详解
单片机的I/O资源是有限的, 因此如何节省I/O口线而又不影响系统的功能是单片机工程师面临的实际问题。图2采用是串行转并行芯片74HC595和三线一八线译码器实现8位数码管的驱动, 好处是可以节省更多的I/O口线作其他用途。正常驱动8个数码管需要8+8=16根口线, 采用595+138的方式只需要3+3=6根。
图2 数码管显示电路连接图
为了更好地理解电路, 这里简单介绍一下74HC595和74LS138两个芯片的作用。74HC595是一款串行移位输入、8位并行输出的芯片, 内带数据移位寄存器和三态输出锁存器;SER为串行数据输入;SRCLK为移位时钟输入;RCLK为锁存控制输入;QA-QH为数据输出, QH’为向下一片(位)的串行数据输出。74LS138是一个3线一8线的译码器, 低电平有效输出, 因此每个时刻输出端口只有一个是低电平, 其余都是高电平输出, 因此可以驱动共阴极数码管。如果驱动共阳极的数码管还需要做一个非门的转换。最后, 为了增加单片机I/O的输出能力, 在74HC595与数码管之间串接了一个74HC245并行驱动芯片。
从电路图中可以看到, 每个芯片的电源和地附近都接了一个104电容, 这个高频滤波电容, 可以减小电源对IC的影响。注意高频电容的布线, 连线应靠近电源端并尽量粗短, 否则, 等于增大了电容的等效串联电阻, 会影响滤波效果。其实, 不加这个电容也可以, 但万一因为干扰出了问题, 就会很难查找根源, 实际调试电路板的时候就会发现电容的作用非常大的, 而这些恰恰是初学者容易忽略的地方。
关健程序分析
动态扫描需要注意的一个问题, 由于所有数码管的段码接到一个公用的I/O上, 在每个瞬间, 各个位数码管上的段码都是一样的, 要想在不同的位显示不同的信息, 必须用扫描显示的方式, 在一段时间内, 只点亮一个数码管, 其余的都处于关闭状态;下一个时间段内点亮下一个数码管, 其余的都处于关闭状态。如此循环, 造成一个视觉暂留的效果, 当闪烁的频率大于50Hz的时候, 人眼就分辨不出来了, 即各个位上显示的信息就“ 区分”开了。扫描频率过高, 每个位显示的时间太短, 数码管的亮度不够;扫描频率过低, 会有明显的闪烁感。这个时间需要根据不同的硬件电路, 做不同的调整, 而且跟数码管的个数有关, 一般的经验值延时10ms左右。
图3 数码管动态显示流程图
总结
动态扫描过程中, LED显示的亮度同驱动电流、点亮时间和关断时间有关, 调整驱动电流大小和扫描频率, 可以控制LED显示的亮度, 同时稳定显示。这需要在实际的调试过程中不断的尝试, 找到一个******临界点!对于尺寸比较大的数码管, 可以在74HC245与数码管之间再串接一个ULN2003(7段)或者ULN2803(8段)达林顿管增加驱动能力