购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第6章
LED数码管动态显示:工作原理

从前文驱动1位数码管的显示原理可以看到,每个段的输入驱动电平在显示过程中都是持续性的(撤掉驱动电平将导致对应发光单元不亮),而且单片机进行驱动控制的引脚都是专用的(即一个发光单元对应一个控制引脚),我们把这种驱动数码管显示的方式称为 静态驱动 (Static Driving)。使用单片机以静态方式驱动一位数码管还算勉强足够,但是如果要驱动2位、4位、8位或更多位数码管呢?很明显,需要的控制引脚将会成倍增加,尽管更换其他引脚数量更多的单片机也不是不行,但是把过多引脚仅仅作为显示控制是非常不划算的(引脚也是一种资源),多位数码管当然也会考虑到这一点,它们通常采用 动态扫描 (Dynamic Scanning)驱动方式。

动态扫描与动画的工作原理是完全一样的,后者由一幅幅静态图片构成,每一幅图片之间只有一些细微的差别,当这些图片按照一定顺序快速切换时,由于人眼的视觉暂留效应,我们就感觉到活动的动画,图6.1所示为动画的基本原理,展示了一个正在向前跳跃的人。

图6.1 动画的基本原理

形成动画的每一幅静态图片称为一帧(Frame),而把1s内切换(或播放)的帧数称为帧率(Frame Rate),它的常用单位为f/s 或赫兹(Hz)。很明显,每秒切换的帧数越多,相应的帧率也就越高。理论上,帧率越高则动画的显示就会越流畅,一般动画要求每秒帧数不小于24帧(电影的放映标准就是每秒24帧)。

精彩的动画已经播放完毕,该着手办点儿正事了!我们来看看2位共阳数码管的基本结构(共阴数码管是类似的,本书不再赘述),如图6.2所示。

图6.2 2位共阳数码管

从图中可以看到,2位数码管内部是由2个1位数码管组成的,只不过这2个数码管中都各有一个发光单元共用一个段驱动引脚,而2个数码管的公共电极则单独引了出来,我们称其为 位选通 (COM 1 与COM 2 )。也就是说,当我们使用单片机控制 N 位动态数码管时,需要的控制引脚仅仅是“8(段数量)+ N ”,而不是静态驱动时的“8× N ”,也就可以节省大量的引脚资源。

为了让两位数码管能够显示不同的数字,可以按照一定的顺序(通常是从左到右,或反之)逐位显示不同的数字,只要每一位数字显示的时间足够长,并且扫描的速度足够快,人的眼睛就可以感觉到多位数码管在同时显示(不同的)数字。

我们来看看两位数码管是如何显示数字“52”的,如图6.3所示。

图6.3 动态扫描驱动两位数码管

首先使(左侧)第1位数码管在0~ t 期间显示数字“5”(对于共阳数码管,输出数字“5”字型码,同时将COM 1 拉高),第2位数码管在此期间不显示(将COM 2 拉低),如图6.3a所示。经过一段时间 t 后,第2位数码管显示数字“2”(对于共阳数码管,输出数字“2”字型码,同时将COM 2 拉高),而第1位数码管在此期间不显示(将COM 1 拉低),如图6.3b所示。也就是说,第2位数码管的显示时长也为 t 。又经过一段时间 t 后,第1位数码管在2 t ~3 t 期间又显示数字“5”,第2位数码管在此期间又不显示,依此循环。

按一定顺序循环分别点亮各位数码管的动作称为动态扫描,相应的驱动时序如图6.4所示。

图6.4 2位共阳数码管的动态扫描时序

与动画类似,多位数码管被完整扫描一遍称为一帧。注意: 一帧不是每一位数码管点亮的画面,因为多位数字合在一起才算一幅完整的画面 。图6.3a与图6.3b合起来算是一帧,对应图6.4中时间段为0~2 t 或2 t ~4 t

值得一提的是,在实际进行多位数码管扫描驱动设计时, 位选通电平的切换动作并不是同时发生的 ,因为单片机在执行指令的过程中,字型码与位选通的推送是顺序执行的,要么字型码早一点,要么位选通早一点。如果位选通是同时切换的,可能会导致本应该给前一位数码管推送的字型码显示在后一位数码管(或反之),相应的时序细节如图6.5所示。

图6.5 位选通同时切换时的细节时序

对于图6.5a,由于字型码先推送,原本应该显示数字“5”的数码管却 短暂 显示了“2”,而图6.5b则恰好相反。把字型码在不正确位置有显示的现象为 显示串位 ,它会严重影响数码管的显示效果。所以在实际编程时,通常会先把前一位选通 置为无效 ,将后一位字型码推送后再使能相应的位选通(当然,也可以从字型码入手)。换句话说,图6.4中每位数码管的实际显示时间会略小于 t

通常多位数码管的扫描帧率不应小于15fps,在显示位数一定的条件下,帧率越小则每位数字可以显示的时间就越长,这虽然能够使数码管的显示亮度更大,但帧率过小容易让人感到闪烁(看到数码管在逐位循环刷新数字),显示效果不太好。当然,帧率也不应该过大,不然每一位数字显示的时长就会过短,这可能会导致数码管显示亮度过小甚至无法点亮。

一般保证每位数字 显示时长 在数百微秒至数毫秒之间即可。假设扫描的帧率为25fps,两位数码管中每位数字的显示时长约为1s/25/2=20ms,四位数码管中每位数字显示时长约为10ms,八位数码管中每位数字显示时长约为5ms。换句话说,在每位数字的 显示时长 一定的情况下,需要扫描的数码管位数越多,相应的显示效果会越差(因为位数越多则帧率越低),为此我们只能适当地降低每个数码管的显示时长来保证最小的扫描帧率。

现在尝试使用单片机动态驱动四位共阳数码管,相应的Proteus仿真电路如图6.6所示。

电路中的4个NPN型三极管为共集连接组态,其集电极与基极的电平高低相同。74HC573为八路输出透明锁存器(Transparent Latch),它与三极管配合提供数码管驱动电流,这样做的好处就在于,流过数码管的电流路径依次是供电电源、处于导通状态的三极管、数码管发光单元、74HC573及公共地,而不会直接流过单片机控制引脚,也就可以避免单片机引脚直接驱动数码管可能带来的热稳定问题。

那什么是透明锁存器呢?我们来看看74HC573的内部结构,如图6.7所示。

图6.6 单片机动态驱动四位共阳数码管

图6.7 74HC573内部结构

从图中可以看到,芯片内部有8个低有效使能(Latch Enable, )的锁存器,统一由外部引脚LE控制。当LE引脚为高电平时,经非门后为低电平,锁存器处于使能状态,这意味着输入数据D将直接送到锁存器的输出Q,也就相当于锁存器不存在(对于数据来说,锁存器是 透明 不可见的)。当LE引脚为低电平时,此时锁存器的 均处于无效状态,这意味着数据输出Q处于保持状态(不随输入数据D变化而变化)。

另外,芯片还为每路锁存器的输出配置了一个低有效使能的三态门,统一由使能(Output Enable, )引脚控制。下面来看看三态门的电路结构,如图6.8所示。

图6.8 三态门电路结构

前面提过,74HC系列逻辑芯片内部是由互补场效应管组成的,也就是说,一个N沟道场效应管(NMOS)对应一个P沟道场效应管(PMOS)。NMOS管的开关行为与NPN三极管是相似的,控制栅极为低电平时处于截止状态,为高电平时则处于导通状态,PMOS管则恰好相反。

先来关注VT 1 、VT 2 的开关行为。当 为高电平时,VT 1 截止而VT 2 导通,K点由VT 2 下拉到低电平。当 为低电平时,VT 1 导通而VT 2 截止,K点由VT 1 上拉到高电平。也就是说,VT 1 、VT 2 组成了一个非门逻辑。由于任意一种状态下只有一个MOS管导通(不存在供电电源与公共地之间的直接电流通路),所以CMOS电路在静态时所消耗的功耗比较低。

为高电平时(使能 无效 ),它一方面直接使VT 5 处于截止状态(使M点处于悬空状态),另一方面经非门变换为低电平后使VT 6 也处于截止状态(使N点处于悬空状态)。此时无论输入A的状态如何,VT 3 、VT 4 都是不导通的。换句话说,输出Y因悬空而呈现高阻状态。

为低电平时(使能 有效 ),它会使VT 5 、VT 6 同时导通,相当于是短路的(M点与供电电源连接,N点与公共地连接),而VT 3 、VT 4 的结构与VT 1 、VT 2 是完全一样的,也是一个非门逻辑,此时输出 ,相应的开关行为如图6.9所示。

图6.9 三态门的开关行为

三态门在多个器件需要在同一条总线(并行数据线)上传输数据时非常有用,下面来看看计算机CPU与各类外部设备接口之间的关系,如图6.10所示。

图6.10 计算机CPU与各类外部设备接口

从图中可以看到,有很多接口同时连接在地址、数据、控制总线上(也称为“挂接在总线上”),虽然在使用计算机时,感觉键盘、鼠标、打印机、硬盘功能都可以 同时 使用,但实际上在硬件层面, CPU在任意时刻只能与一个接口打交道(也就是读写数据,或称为“占用总线”) ,它要与哪个接口打交道就得先使能相应的接口,需要与另一个接口打交道,就得先关闭当前接口(也就是悬空的)再使能另一个接口。这种轮流使能某一个器件再进行数据读写的方式称为 数据的分时传输 ,CPU把对多个接口的读写操作划分在多个短时间(也称为“时间片”)内实施。例如,我们在同一条总线上连接多个74HC573,如果CPU需要读取某个芯片的数据,则相应的使能时序如图6.11所示(使能 均由CPU控制)。

图6.11 CPU使能时序

图6.11中的短斜线表示总线,数字表示总线宽度(图中所示为8位)。可以看到,任意时刻仅有一个芯片的 被拉低使能(输出数据Q有效),其余均为高电平(输出数据Q无效,呈现高阻态)。尽管CPU轮流对多个芯片读写数据(每个芯片相当于一个应用功能),但由于CPU处理的速度非常快,所以在直观感受上所有设备是同时在工作的。如果有多个接口同时被使能,同一时刻就会有多个接口往总线发送数据,这样会出现一种情况: 有些接口需要把数据线拉低,而另外有些接口需要把数据线拉高,相当于它们“打起架”来了 。我们把这种现象称为 总线冲突 (bus contention)或数据冲突。在总线冲突状态下自然无法正确传送数据,而且也很有可能会给硬件电路带来不可逆转的损坏。我们来看看如图6.12所示电路。

图6.12 同一条数据线上多个器件被同时使能

两个74HC573同时使能并传输不同的数据(图示为一位数据),形成了从电源经VT 1 、VT 2 、VT 3 、VT 4 到公共地的低阻直通路径,这将导致瞬间大电流使芯片发热,甚至损坏硬件。

再回到图6.6所示电路,由于LE与供电电源连接,此时锁存器功能无效(透明状态),而 与公共地连接而处于使能状态,这也就意味着三态门处于数据输出有效状态。也就是说,我们实际上只是使用74HC573来缓冲输入数据,让它(输出三态门)承担直接驱动数码管的任务而已。

为了验证对功能框图的理解,还是应该进一步观察它的功能表,毕竟做设计的都希望“一板搞定”(一次PCB投板就成功),见表6.1。

表6.1 74HC573功能表

表6.1中的符号“Z”表示高阻,符号“X”表示不用关心它的状态。可以看到,当 为低电平且LE为高电平时,开启的就是透明模式(transparent mode),此时芯片输出数据(Q 0 ~Q 7 )与输入数据(D 0 ~D 7 )是完全一样的,这与我们的预想完全一致。 qeKOgYXsrRWdtK9WaF7hFiXjA4F5gZuLyWlXG45tY+zcl97cJ0w1+HmbHT9nRAda

点击中间区域
呼出菜单
上一章
目录
下一章
×