6.3 LED数码管动态显示
在很多单片机应用系统中,需要使用多位LED数码管同时显示不同的内容,如果采用静态显示方式,则MCS-51单片机最多能同时控制四个LED数码管,若LED数码管多于四位,则需要对单片机并行I/O端口进行扩展,这将增加硬件电路的成本及复杂性。因此,对于多位LED数码管通常采用动态扫描的方法进行显示。
6.3.1 LED数码管动态显示原理
数码管的动态扫描方式即逐个循环地点亮各位LED数码管,这样虽然在任一时刻只有一位LED数码管被点亮,但是由于人眼的视觉暂留效应(人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,而要停留0.05~0.1s,又称余晖效应),实际上看起来与全部LED数码管持续点亮的效果完全一样。
为了实现LED数码管的动态扫描,除了要给LED数码管提供段选码之外,还要对LED数码管提供位选码,因此多位LED数码管接口电路需要有两个单片机并行I/O端口,其中一个用于输出8位段选码,另一个用于输出位选码,位选码的位数应等于LED数码管的位数。
6.3.2 LED数码管动态显示程序设计技巧
1.LED数码管动态显示优点
LED数码管动态显示可以节约I/O端口资源,同时各个数码管轮流导通,不但能提高数码管的发光效率,而且由于各个数码管的段控线并联使用,大大简化了硬件电路。
2.LED数码管动态显示缺点
(1)LED数码管动态显示时若要不易察觉出闪烁现象,数码管个数一般控制在8个以内。
(2)LED数码管动态显示需要不断地扫描数码管才能得到稳定的显示效果,因此,在程序中不能有比较长时间地停止数码管扫描的语句,否则会影响显示效果,甚至无法显示。(https://www.daowen.com)
3.LED数码管动态显示程序设计技巧
(1)在程序设计中,采用定时1ms的中断函数,保证扫描过程不会间隔时间太长。


(2)确保位选信号为稳定的高电平,数码管显示时不出现闪烁现象,在程序设计过程中,初始化位选信号引脚为高电平。若位选信号与单片机P2端口低4位相连,则程序语句如下:

(3)为了保证段选变量与位选变量同步,达到更好的显示效果,同时方便程序设计,方法如下。
若有4个数码管,可以定义如下程序中一维数组led_buff[4],led_buff[0]用来存放第0位数码管的值,led_buff[1]用来存放第1位数码管的值,led_buff[2]用来存放第2位数码管的值,led_buff[3]用来存放第3位数码管的值。在实际程序设计中,数码管位导通可以定义一个变量,比如下面程序中的led_point,led_point的变化范围在0~3之间,超过3清0。在显示时,想在0位数码管上显示8,只需要求led_buff[0]=8。
