7.2.2.1 多位数码管的基本认识
单个数码管显示在第5章已有详细的介绍,这里不再赘述。在现实生活中,往往需要多个数码管同时显示一些信息的场合,即组成“多位”数码管。我们称每个数码管的公共端为“位选”,只有对应的“位选”信号有效,该数码管才可能被点亮。例如,对共阴极数码管而言,只有当公共端接地时,对应的数码管才可能工作;同理,对共阳极数码管,只有公共端接高电平时,对应的数码管才可能工作。在使能了“位选”信号后,数码管显示的内容则取决于相应数码管的“段码”信息了。所以,请读者务必非常清晰把握:位选与段码之间的联系与区别,并在空白处做适当的标记。
多个数码管组合在一起时,其显示方式主要有两种:静态显示和动态显示。静态显示每个数码管固定显示某个字符,除非人为修改,但为实现固定显示需要较多的硬件资源;使用动态显示,利用人眼的“视觉暂留”效应,每隔一小段时间,点亮一个数码管,并周而复始;动态显示需要较多的软件资源,而且若是处理不好,可能导致数码管闪烁等问题。
为节约I/O口,减少硬件成本,我们建议选用动态显示方式。假设以1ms点亮一个数码管为例,则4ms即实现了一个扫描周期——4个数码管各自点亮1ms时间,肉眼看起来好像4个数码管同时点亮。多位数码管与单片机的连接有多种实现方式,比如使用锁存器74HC573、使用串入并出带有锁存功能的74HC595等,还可以使用晶体管作为开关管进行位选,请有兴趣的读者查阅相关资料,了解具体实现方法。这里我们只介绍一种简单的驱动方法,即使用晶体管作为开关进行驱动的方式,具体电路如图7-3所示。
图7-3 数码管动态显示驱动电路
由图7-3可见,这是一个四位的数码管,是共阳极的,使用四个PNP型晶体管作为位选控制开关,采用动态刷新方式。假如我们要点亮最左边的数码管,则COM1必须有效,即控制LED4的晶体管必须导通,再往8个段送入相应的段码值,LED4就显示期望的数码了。
7.2.2.2 数码管驱动程序
我们以图7-3为例,介绍数码管动态显示的编程实现。(www.xing528.com)
读者首先必须明白一点:要点亮哪个数码管必须使能相应的位选信号(COM1~COM4),并向dp~a写入相应的段码值。比如某个时刻要点亮数码管LED1,则必须将P1.4写入0(选中LED1),P1.5~P1.7写入1(禁止LED2~LED4)。建议读者定义一个数组,将待显示的数码对应的段码按照次序作为数组元素。还有一点必须说明:动态显示的数码管刷新周期不是任意选择的,如果周期太长,将导致明显的闪烁感。参考驱动程序如图7-4所示。
图7-4 数码管动态显示函数
有几点需要特别说明的是:
➢数码管动态显示时,一般要进行“消影”操作,避免看起来有“余影”的感觉。具体处理的办法,就是切换时,先关闭所有数码管的显示,待更新好段码后,再开放对应数码管的位选。你能找出相应的语句吗?
➢请读者特别注意关键字“static”的应用,如有疑问,请查阅上一章内容或查询网络资源。
➢请读者分别每隔1ms、10ms、50ms和500ms调用一次数码管显示函数,并观察显示效果。你能总结出数码管动态显示在时间上需要注意的地方吗?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。