LED显示器工作于静态显示方式时, 把多个LED显示器的每一段与一个独立的并行口连接起来, 而公共端则根据数码管的种类连接到“VCC”或“GND”端。这种连接方式的每一个显示器都要占用一个单独的具有锁存功能的I/O端口, 用于笔划段字型代码, 单片机只需把要显示的字型代码发送到接口电路, 就不用再管它了, 直到要显示新的数据时, 再发送新的字型码。
什么是动态显示呢? 我们首先看一个8只数码管滚动显示单个字符怎么实现吧:
这里每只数码管相当于下图, 他们由p2口的一个引脚控制,该脚为“1 ”时, 三极管导通, 数码管公共端接通电源, 可以显示数字; 而该脚为“0”时, 三极管截止, 公共端与电源断开,不能显示。
当8只数码管集合在一起的时候就像下图我们看到的那样, 只要我们轮流控制其中一只管显示, 就可以得到我们想要的结果了。
问题: 如果我们要显示一组别的数据, 可以怎么做呢?
在多位LED显示时, 由于静态显示占用的I/O口线较多,CPU的开销很大, 所以为了节省单片机的I/O口线, 简化硬件电路, 常采用动态扫描方式来作为LED数码管的接口电路。 在实际的工程应用中, 它是使用最为广泛的一种显示方式, 其接口电路是把所有显示器的8个笔划段h~a 同名端连在一起, 而每一个显示器的公共极COM 端与各自独立的I/O口连接。当CPU向字段输出口送出字形码时, 所有显示器接收到相同的字形码, 但究竟是那个显示器亮, 则取决于COM 端, 而这一端是由I/O口控制的, 所以我们就可以自行决定何时显示哪一位了。
而所谓动态扫描就是指我们采用分时的方法, 一位一位地轮流控制各个显示器的COM 端, 使各个显示器每隔一段时间点亮一次。 在轮流点亮的扫描过程中, 每位显示器的点亮时间是极为短暂的(约1 ms左右) , 由于人的视觉暂留现象及发光二极管的余辉效应, 尽管实际上各位显示器并非同时点亮, 但只要扫描的速度足够快, 给人的印象就是一组稳定的显示数据, 不会有闪烁感。
LED不同位显示的时间间隔可以通过定时中断完成。 如对8位LED显示器, 扫描显示频率为50Hz,假如显示一位保持1 ms时间, 则显示完所有8位只需8ms, 于是另外1 2ms时间内, CPU完全可以处理其它工作。
上述保持1 ms的时间应根据实际情况而定, 不能太短, 时间太短发光二极管发光太弱, 无法看清。但也不能太长, 时间越长, 占用CPU时间也越多,CPU处理其它工作的时间就越少。 动态显示方式实质是以牺牲CPU时间换取元件和能耗的减少。