单片机原理及应用
上QQ阅读APP看书,第一时间看更新

3.3 数码管模块的显示

课件 数码管模块的显示

视频 数码管模块的显示

当有多个数码管需要联合显示时,采用分别驱动七段数码管的方法,效率较低,并且会占用宝贵的端口。为此可以采用数码管模块方式,在节省端口的前提下,实现更多内容的显示。

1.数码管模块的内部结构与点亮原理

数码管模块就是将多个分立的同类数码管组合在一起构成的。其组合方法是将模块中每个数码管里相同名称的段选引脚(a、b、c、d、e、f、g、dp)按相同名称并联后再与各个数码管的公共引脚分别引出,如图3-10所示。其显示的原理是通过给段选引脚送入数字编码确定显示内容,再控制公共引脚来决定一个或几个数码管点亮。数码管模块也分为共阴极和共阳极两种。共阴极数码管模块其内部的数码管均为共阴型,同理,共阳极数码管模块其内部的数码管均为共阳型。

图3-10 数码管模块及内部逻辑引脚结构图

决定数码管显示内容的字节编码称为段选码。数码管模块中每一个数码管都有一个公共极(共阴/共阳),通过改变公共极的值,可以管控某个数码管的电路导通并点亮。将数码管的所有公共极的状态组合在一起构成的编码就称为位选码。显然由位选码可以决定模块中哪一个数码管点亮;由段选码决定点亮的数码管显示什么内容。因此,当需要数码管模块中某一个数字点亮时,只需要做两件事情:

(1)确定段选码,即欲显示的数字编码;

(2)指定位选码,即设定欲点亮的数码管位置。

【课堂练习】让含有4个数码管(共阴极)的模块中第二个数码管点亮并显示数字7。

【分析】共阴极数码管要显示数字7,查表3-2可知其段选码为0000111,即07H,可以将数码管模块对应的引脚接到单片机的P0口的各个引脚上。要让第二个数码管点亮,就是要使第二个数码管的位选为打开状态。考虑到是共阴极数码管,所以设为低电平就可以点亮该数码管,其他数码管的公共极连接为高电平。按照上面的分析,将这4个引脚分别接到P2口的高4位引脚上,则对应的位选码应为11010000,即D0H。(位选码接在P2口上,低4位未用故为0,高4位中,第二个数码管的引脚与P2.5相连,故此位为0,其余各位均为1,所以位选码为11010000。)

其电路连接情况如图3-11所示。

图3-11 数码管模块的连接与显示

根据电路原理图,可编写驱动程序如下:

将上述程序编译后,写入单片机内,进行仿真运行,看到第二个数码管点亮了。

观察上面程序,请思考,如果将第12条语句放在第6条语句前面,行不行?会产生怎么样的结果?为什么会产生这样的结果?

2.锁存器与动态显示

课件 数码管的动态显示

视频 数码管的动态显示

在上面例子中,控制这个数码管模块需要使用两个并行接口。通过前面的介绍可知,除了P1口外,其他3个并行接口都在担负着其他作用,如果为了显示数码管的内容而将端口全都占用了,显然得不偿失。应当用最少的并行接口来尽可能多地显示一些内容,这就需要一个并行接口来承担更多的“角色”,这个想法可以借助于锁存器来实现。

常用的锁存器有74LS273、74LS373、74LS374以及74LS573等。所谓锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,同时也能增加驱动的能力。下面以74LS373为例说明其工作原理。74LS373的结构如图3-12所示。

图3-12 74LS373的结构

74LS373的D端为输入端(1D~8D可以接到单片机的某一并口的各个引脚上),Q端为输出端(1Q~8Q分别对应1D~8D的输入)。当引脚为低电平时,才能输出;如果为高电平,则Q端输出为高阻状态。当锁存器的允许端LE为高电平时,Q端的输出与D端的输入相同;当LE为低电平时,锁存器内容不变,Q端的输出内容为原来D端的内容,并不再随D端变化而变化。

依据锁存器可以暂存的工作原理,将P1口分别与两个锁存器的D端相连,通过控制这两个锁存器的、LE来决定当前P1口的输出锁存到哪里,这样1个并口就相当于2个并口了。然后再将数码管模块的段选码与位选码分别与这2个锁存器Q端相连。这样一来,用1个并口也可实现4个数码管的点亮。

如果要使4个分离的数码管同时都点亮并显示不同的数字内容,可以使用多个锁存器。每一个锁存器负责点亮一个数码管,各个数码管的位选线连接在一起,然后通过对锁存器输出的调整来实现显示不同的内容,这就是数码管的静态显示方法(指数码管点亮时,对应数码笔画的二极管处于恒定的导通或截止状态)。静态显示方法数字显示清晰,没有闪烁,软件控制比较简单,但需要的硬件较多,因为每个数码管的段选线都得分别控制,而且多个数码管同时点亮,所需的电流也比较大。所以,在位数较多的时候,通常不采用静态显示方法。

数码管模块的动态显示方法,就是通过动态地改变段选码和位选码,使每个数码管按一定的频率轮流点亮。这种方法充分利用了发光二极管的“辉光效应”,给人感觉好像所有数码管都点亮了。利用动态显示方法时,所有数码管的段选线都连接在一起,但位选线是分离的,通过控制位选线的变化,可快速点亮刷新。这种方法因为所有的段选线都连在一起,硬件电路相对比较简单,且同一时刻只有一个数码管在点亮,所需电流也较小。但是刷新的频率如果较慢,就会出现数码管的闪烁现象。所以,在动态显示中,数码管的刷新周期不要太短。一般的数码管刷新周期应控制在5~10ms(即刷新频率为100~200Hz),这样既保证了数码管每次刷新都被完全点亮,又不会产生闪烁现象。这个刷新周期通常利用自定义的延时函数或中断的方法来实现。如图3-13所示,就是采用动态显示方法实现的全部数码管点亮。

【课堂练习】对照图3-13,编写驱动程序,使共阴极数码管模块动态显示“2020”字样。

【分析】通过前面的介绍可知,数码管显示数字的内容取决于段选码。这里需要显示2020这4个数字,查表3-2找到指定的段选码,按先后顺序分别为0x5b、0x3f、0x5b、0x3f。动态显示时就是使2、0、2、0这4个数字不断地分别显示,根据它们显示的顺序写出位选码。因为只有4个位选码,使用并口时只需接在高4位即可,低4位为0,则位选码依次为11100000(即0xe0)、11010000(即0xd0)、10110000(即0xb0)、01110000(即0x70)。

图3-13 采用动态显示方法实现的全部数码管点亮

确定了段选码和位选码,剩下的就是在程序中控制它们成对依次出现即可。如果每一个编码都需要用一个变量来指定,则变量较多,程序写起来也比较凌乱、可读性差、效率不高。可以采用数组的方式来保存段选码和位选码,并利用两个数组下标的同步变化,实现段选码和位选码的同步变化。

定义段选码、位选码数组分别为:

接着再动态控制两个锁存器的LE端就能实现将P1输出的数据分别作为段选码和位选码了。参考程序如下:

上述实现数码管模块动态显示的代码具有很强的规律性,可以看到循环中始终在做4件事情:(1)消影(避免显示乱码);(2)送段选码(确定显示内容);(3)送位选码(确定显示位置);(4)延时(确定刷新频率,显示稳定不抖动)。请读者举一反三,不断加以熟悉,实现更多复杂内容的动态显示。