显示器件应用分析精粹:从芯片架构到驱动程序设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第5章 LED数码管静态驱动逻辑芯片

讨论完图4.7与图4.8所示的驱动共阳数码管电路实例后,有人可能会想:从原理上讲,这两个电路中的三极管与ULN2003A都是一个非逻辑,那我直接使用(手头恰好仅有的)74LS04(六反相器)代替也应该是可以的呀!真是一个举一反三的好学生,说做就做,于是马上搭建相应的仿真电路,如图5.1所示。

图5.1 反相器驱动共阳数码管

仿真电路中的数码管显示状态完全正确,然后兴冲冲地着手硬件电路的焊接与调试,发现也能够使数码管达到预定的效果。尽管如此,并不建议使用74LS04来驱动数码管(当然,只是搭建电路玩一玩还是可以的),原因就在其数据手册给出的推荐工作条件,见表5.1。

表5.1 74LS04推荐工作条件

表5.1中标记低电平输出电流的推荐最大值只有8mA,如果数码管需要的驱动电流更大就不太适合(显示亮度达不到要求)。虽然将限流电阻减小后,输出电流自然会有所上升,但长时间工作在超出芯片推荐参数的状态可能会导致无法预知的后果。

有人可能还是会抬杠:那用74HC04总可以吧(见本章末尾注),我看它的输出额定电流都达到25mA了!然而,仍然不推荐这样做,答案还是在数据手册中,见表5.2中的极限工作条件。

表5.2 74HC04极限工作条件

虽然74HC04的输出驱动电流达到了25mA,但是ICCIGND最大值仅为50mA,也就是说,74HC04的总供电电流不能超过50mA。如果六个反相器驱动一个数码管,每个输出引脚的驱动电流只要超过10mA,就已经超出了总供电电流的极限值,这也是不严谨的电路设计。

总之,无论如何都不应该以“想当然(猜)”的态度进行电路设计,电路系统中每一个网络的电流或电压设置都应该做到有理有据。

对于实在懒得去分析数码管各种显示字符对应字型码的读者,也可以使用74系列逻辑芯片中的二—十进制(Binary-Coded Decimal,BCD)码转七段(Seven Segment)译码器74LS46/47(驱动共阳数码管)或74LS48(驱动共阴数码管),这样只需要输入0~9对应的二进制电平信号就可以显示相应的数字了,是不是很方便?以74LS47驱动共阳数码管为例,相应的Proteus软件平台仿真电路如图5.2所示(数码管的段引脚从左至右依次分别与74LS47输出QA、QB、QC、QD、QE、QF、QG连接)。

图5.2 逻辑芯片74LS47驱动共阳数码管

74LS46/47的输出也是OC结构,这意味着它们不具备输出高电平的能力,如图5.3所示。

图5.3 74LS46/47的OC输出结构

这是一个“或逻辑”电路,当VT1(虚线表示实际可能是二输入或三输入或门)、VT2、VT3任意一个基极输入为高电平时而导通时,VT4的基极则为低电平,这将导致VT4与VT5均处于截止状态,此时输出(OUTPUT)处于悬空(OC)状态。为了输出高电平,我们必须在VT5的集电极与电源VCC之间连接一个上拉电阻。当想通过给VT1、VT2、VT3的基极输入低电平而使VT5处于导通状态时,同样也需要上拉电阻给VT5集电极提供电压才能输出低电平。在驱动共阳数码管时,限流电阻与其串联的每个LED发光单元就相当于上拉电阻,而VT5处于截止状态时输出将会被拉高(当然,这只是实际元器件的电路行为,仿真电路中可并不一定是这样)。

OC输出结构的好处就在于可以方便地实现“线与(Wire-AND)”逻辑,如果要实现多个信号线的“与”逻辑运算,可能会想到使用与逻辑电路芯片,但这毫无疑问会增加成本,使用OC输出就可以直接把这几个信号连接在一起即可,如图5.4所示。

图5.4 多个OC输出形成的线与逻辑

只要连接一个共用的上拉电阻,就可以实现多个信号的与逻辑,而且它带来的另一个好处是:通过给上拉电阻连接不同的电源,就可以方便地实现电平转换,以达到匹配后级接收电路的目的。

有些读者可能想问:按照表4.1所示电平状态,图5.2所示数码管的段a不是也应该处于点亮状态吗?另外,为什么要通过一个电阻将引脚上拉到高电平呢?为了找到答案,下面来看一下74LS47的功能真值表,见表5.3。

这里提醒一下:引脚名上面加一横线表示低有效(不同厂家也会有其他不同的表达方式,例如,在引脚名后面加符号“#”或小写字母“n”,读者了解一下即可)。通俗地说,当我们把低有效的引脚拉低时,它所代表的功能才会起到作用。例如,AT89C1051的复位引脚名为RST,表示复位引脚是高有效的,当我们把RST引脚设置为高电平时,单片机将处于复位状态,有些单片机的复位引脚名为,这就表示必须把它设置为低电平才能将单片机复位。

表5.3 74LS47功能真值表

可以看到,当输入BCD码为6时,段a与b为高电平,而表4.1中却只有段b为高电平(共阳驱动电平取反),这只是芯片的译码规则不同而已。另外,在输入0~15共16个BCD码时,必须将设置为高电平才能够使段输出有效,下面结合芯片内部功能框图详细讨论一下该控制引脚的具体含义,如图5.5所示。

图5.5 74LS47逻辑框图

(Lamp Test Input,试灯输入)为低电平时,无论输入的BCD码为多少,所有段输出均为低电平(共阳数码管显示数字“8”),这可以用来测试数码管各段是否能够正常发光。低电平的控制路径有三条,其一经过缓冲器(逻辑门输入或输出的圆圈代表非逻辑,线路上两个圆圈相当于两次非逻辑,所以逻辑并没有发生变化,它起到缓冲输入电平的作用,这样可以提升带负载能力。如果没有进行电平缓冲,就相当于外部给引脚施加的信号会直接驱动芯片内部多个逻辑门,这将会加重电路设计者的负担,因为我们得提供输出电阻足够小的信号,以避免出现驱动能力不足的现象)后与A、B、C进行与非逻辑运算,相当于输入BCD码的低3位都是0,而输入D并没有被直接控制,所以输入的四位有效BCD码只能是0b0000(0,没有加前后缀表示十进制)或0b1000(8)。

再回看表5.3。当输入BCD码分别为0或8时,除段g外其他都是0,所以当务之急是把段g也拉低。为此低电平另一方面使四输入与门(左下方)输出低电平,然后与旁边的三输入与门的输出同时连接到两输入或非门(与门输入有两个圆圈,表达的逻辑为,转换一下则有)。

也就是说,为了最终成功将段g拉低,我们还必须将三输入与门的所有输入都设置为低电平,这涉及的第三个路径,即低电平经缓冲器后使六输入与非门输出高电平,经过缓冲器后(电平不改变)使能四个与非门(灰色填充的,最左侧那个此时没有使用到)。由于为低电平,而三个与非门的另一个输入也都为高电平,这样输出都为低电平,它们连接到三输入与门而使其输出高电平,最后通过非门拉低段g的引脚电平,第一个回合打完收工。

在正常工作时,如果输入BCD码为全0,译码器输出本应该驱动数码管显示数字0,然而一旦(Ripple Blanking Input,行波灭零输入,顾名思义,就是“消灭”数字0显示,至于行波是什么意思呢?很快我们就会知道)为低电平,则译码器输出为全1,数码管将没有点亮的段,也就达到了“消灭”数字0显示的目的。从图5.5可以看到,为低电平(经过非门后为高电平)时并不影响六输入与非门的状态,但此时其他五个输入引脚都为高电平(其中四个来自全0的输入BCD码经非逻辑所得,另一个为高电平状态的),由此获得的输出低电平经缓冲器后使四个与非门输出为高电平,它们将使所有段输出都拉高。

(Blanking Input,灭灯输入)可以控制多位数码管的灭灯状态,当其为低电平时,无论其他输入引脚处于什么状态,译码器输出均为高电平,这样共阳数码管将全部熄灭。从图5.5可以看到,它把六输入与非门的输出强行设置为低电平,这样输入BCD的状态不再影响该低电平,也就可以将前述灭灯状态一直保持。简单地说,我们不但可以在译码输出为0时灭灯,其他译码输出也可以进行灭灯。

有人可能会问:当六输入与非门的任意一个输入为低电平时,它的输出不就被上拉为高电平了吗?灭灯输入不就无效了?问得好!我们来看看这块电路的结构,如图5.6所示。

从图中可以看到,左侧(六输入与非门)是连接有上拉电阻的OC结构输出,所以它具备“线与”逻辑功能,而右侧是一个标准TTL(Transistor-Transistor Logic,三极管—三极管逻辑)电路输入。当引脚从外部被拉低之后,即使六输入与非门的输入状态试图使输出为高电平,也不会影响已有的低电平状态(“线与”逻辑)。在正常显示时,引脚可以悬空,图5.2就是这样做的。

图5.6 BI引脚结构

有时候可能会有这种需求:如果显示的数字以“0”开头就不显示那些无意义的“0”,例如,数字“0098”就仅显示“98”,“0”对应的数码管则完全熄灭,该怎么办呢?这涉及与复用的一个引脚(Ripple Blanking Output,行波灭零输出),它可以控制多位数码显示的灭灯状态,这是什么意思呢?也就是说,可以把这个引脚与其他74LS46/47芯片的连接,从而获得多位数码管同时灭零的功能。

有人可能会问:功能有什么用?我直接把所有连接在一起控制灭零不是一样吗?这似乎很有道理,但是如果有100个甚至更多数码管需要灭零该怎么办?使用一个单片机引脚同时驱动这么多并联的(相当于驱动多个逻辑门)可并不现实,很有可能会出现前述驱动能力不足的现象,因为一个引脚的扇出系数(驱动同类逻辑门的个数)总是有限的。更何况,也不能把所有的零都灭掉呀,假设现在要显示数字“9800”,这里面的两个“0”可是有实际意义的。

如果把第一片74LS47的与第二片74LS47的连接,第二片的74LS47的与第三片连接,其他依此类推,灭零控制信号将逐级像水波纹一样扩散到达所有需要灭零的芯片,这就是行波的意思。如果某一级输出显示数字不为零,就不会对剩下串联的74LS47发出灭零控制信号,如图5.7所示。

图5.7 行波灭零

注:“LS”系列芯片基于TTL工艺,表示“Low Power Schottky Logic(低功耗肖特基逻辑)”,内部电路是由双极型晶体管(三极管)制作而成,而“HC”系列芯片基于CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)工艺,表示“High Speed CMOS Logic(高速CMOS逻辑)”,芯片内部电路由互补场效应管制作而成,后续还会进一步讨论。