第3章数码管显示输出3.1 概述3.1.1 数码管简介数码管是一种广泛应用在仪表、时钟、车站、家电等场合的半导体发光器件,它由多个发光二极管封装在一起,组成“8”字型的器件,颜色有红、绿、蓝、黄等。
图3-1是1位、2位、3位和4位数码管的实物图。
可以看到,每1位数码管都由7个线段型和1个小数点型发光二极管组成,这8个发光二极管在数码管中称之为“段”,平常所说的7段或8段(小数点也算1段)数码管,就指这个意思。
图3-2是从正面观察(数码管正面面对读者,小数点位于右下角)1位数码管时,数码管8个段的名称及引脚图,其中,引脚3和引脚8是公共端com。
图3-1 数码管实物图图3-2 1位数码管各段名及引脚图3.1.2 数字和字符的数码管显示图样从数码管的结构可知,只要有序地组织,让数码管的7段(或者8段)中部分或全部点亮,就可以显示数字或者字符等信息。
图3-3是数字0~9和字母A~F在数码管上显示时对应的图样,其中的字母b和d是小写字母。
图3-3 数字0~9、字母A 、b 、C 、d 、E 、F 在数码管上显示的图样3.1.3 共阳和共阴数码管数码管按照极性可分为共阳数码管和共阴数码管两类。
所谓共阳数码管,从字面理解,就是数码管8个发光二极管的阳极并联在一起,是公共的,称为公共端com ,而各个阴极彼此独立,如图3-4所示;相反,共阴数码管的8个发光二极管的阴极并联在一起,是公共端com ,而各个阳极彼此独立;如图3-5所示。
实际工作中,怎样判别拿在手里的这个数码管是共阳还是共阴呢?一个简便方法就是使用万用表的二极管档去测量。
选择万用表的二极管档,用万用表的红表笔搭接数码管的公共端com(引脚3或引脚8),而黑表笔依次搭接其它引脚,如果此时数码管各段发光,说明该数码管是共阳的;如果数码管的各段都不发光,则交换红黑表笔,用黑表笔搭接公共端com ,用红表笔依次搭接其它引脚,若数码管各段发光,说明该数码管就是共阴的。
图3-4 共阳数码管原理图 图3-5 共阴数码管原理图3.2 数码管显示输出如何有效地控制数码管各个引脚的电平,使其按照我们的预想显示输出呢?以下就共阳和共阴数码管分别给予说明。
①共阳数码管显示数字或字符在理论层面,给共阳数码管的公共端(com端)接高电平,将需要点亮的段对应的阴极引脚接低电平,将不需要点亮的段对应的阴极引脚接高电平,就可使数码管显示我们希望看到的数字或字符。
表3-1列出了共阳数码管显示数字和字符时各引脚所加电平的情况,俗称共阳段码表,其中,小数点段dp不点亮且排在8位二进制数据的最高位(位7),后面依次是段g、f、e、d、c、b和a,段a排在8位二进制数据的最低位(位0)。
表3-1 共阳数码管段码表如果要让共阳数码管全部熄灭不显示,可以在公共端接高电平的条件下,各段对应的所有阴极引脚都接高电平,即段码为0xFF(二进制11111111)。
此段码一般被用作共阳消隐处理(消隐的原理及意义后叙)。
3.2.2共阴数码管显示输出原理①共阴数码管显示数字或字符给共阴数码管的公共端(com端)接低电平,将需要点亮的段对应的阳极引脚接高电平,将不需要点亮的段对应的阳极引脚接低电平,就可使数码管显示我们希望看到的数字或字符。
表3-2列出了共阴数码管显示数字和字符时各引脚所加电平的情况,俗称共阴段码表,其中,小数点段dp不点亮且排在8位二进制数据的最高位(位7),后面依次是段g、f、e、d、c、b和a,段a排在8位二进制数据的最低位(位0)。
表3-2 共阴数码管段码表②共阴数码管全部熄灭不显示如果要让共阴数码管全部熄灭不显示,可以在公共端接低电平的条件下,所有阳极引脚都接低电平,即段码为0x00(二进制00000000)。
此段码一般被用作共阴消隐处理。
在数码管的实际应用中,除按以上段码数据加载引脚的电平外,还需考虑数码管的驱动问题,数码管的驱动电流大小一般在5mA左右,使用74LS573类锁存器驱动电路或使用8550类晶体管驱动均可。
3.2.4 静态显示和动态显示静态显示和动态显示,是在多位数码管同时显示信息的前提下分类的,1位数码管的显示不存在静态和动态显示之分。
在了解和掌握静态显示和动态显示原理之前,需先掌握位码的概念。
当多位数码管同时显示时,自然要关注每个数码管显示的内容是什么,但同时也要区分是哪一个或者是哪几个数码管在显示。
这时,除控制数码管显示内容的段码数据外,还要有用于区分数码管位置的数据,即位置码,简称位码。
如图3-6所示,8个数码管同时显示时,名称相同的段的引脚彼此相连,即8个数码管中,8个名称为a的段的引脚连接在一起,形成公共“A”段的引脚;8个名称为b的段的引脚连接在一起,形成公共“B”段的引脚,……,8个名称为dp的段的引脚连接在一起,形成公共“DP”段的引脚。
这样,送到公共段引脚A,B,C,D,E,F,G,DP的段码数据,自然会送到每个数码管,并用来控制数码管显示的内容。
而每个数码管的公共端(引脚3和引脚8并联后的引脚)各自独立,在图3-6中,从左至右,8个数码管的公共端暂且命名为W1,W2,……,W8,这些独立的公共端可以用来区分每一个数码管,而送到这些独立的公共端上的电平数据就是数码管的位码,使用这些位码数据可以区分每一个数码管。
假设图3-6中8个数码管是共阳的,则公共端W1,W2,……,W8是各个数码管的阳极。
根据共阳数码管显示的原理,只有在阳极是高电平的前提下,送到段引脚的段码数据(低电平有效)才可以显示出来,如果阳极是低电平,则无论段引脚是高电平还是低电平,数码管都不会显示。
所以,8个数码管中,如果希望哪个数码管显示,就将其公共端置成高电平。
例如,如果仅仅希望数码管LED1这一个数码管显示,则送数据0x01(二进制00000001) 到公共端W8~W1,此处假定W8~W1引脚连接到一个8位的数据I/O口,而W8是一个字节数据的最高位,W1是一个字节数据的最低位。
送到段引脚的数据将在第一个数码管LED1上显示出来,其余七个数码管尽管得到了段数据,但其公共端是低电平,是不显示的。
此时,送到公共端引脚的数据0x01就是位码。
如果希望8个数码管全部显示,则送到公共端引脚的位码数据就是0xFF。
如果图3-6中的8个数码管是共阴的,则送到段引脚的数据应是共阴数码管的段码(如表3-2所示),送到公共引脚com的数据就是位码,因为是共阴数码管,所以位码中低电平0对应的数码管将显示信息。
例如,如果计划让数码管LED1和LED3显示,则位码为0xFA (二进制11111010,依旧假定W8是字节数据中的最高位,W1是字节数据中的最低位)图3-6 8个数码管同时显示在学习和掌握位码的概念之后,下面来说明静态显示和动态显示。
所谓静态显示,就是多个数码管同时显示时,相同的段码数据,能使位码数据选中的多个数码管,同时显示相同的内容,如同一个数码管一样。
相反,动态显示可以使同时显示的各个数码管显示出不同的内容。
数码管动态显示的本质是动态扫描显示,即分时显示的过程。
动态显示的原理可以这样描述:让多个数码管一个接一个地依次点亮,这样,送到每个数码管用于显示的段码数据就可以不同,每个数码管显示的内容自然不同,但每个数码管被点亮时间必须要短,并且依次点亮的过程要不断地快速重复。
尽管某一时刻只有一个数码管在显示,但在数码管的余辉效应和人眼的视觉暂留效应共同作用之下,人眼看到的是多个数码管“同时”被点亮的效果。
3.2.5数码管静态显示实例功能要求:使用数码管静态显示数字或字符。
硬件说明:如图3-7所示共阳数码管显示输出电路,单片机P0口输出位码数据,P1口输出段码数据。
8位位码数据经驱动晶体管8550后,分别连接到8个数码管的公共端(阳极)。
8个数码管的同名段引脚彼此连接,100Ω电阻起限流作用。
软件说明:1、P1口依据表3-1所示共阳数码管段码表,送出段码数据;2、在PNP驱动晶体管8550的作用下,共阳数码管的位码数据是低电平有效,即P0口送出的位码数据中,低电平数据位经晶体管8550之后会变为高电平数据位,恰好选中对应的数码管;例如,选中数码管LED1的位码数据是0xFE,8个数码管全部选中用于显示的位码是0x00。
3、本例P1口送出的段码数据是0xF8,即数组元素duan[7],则显示数字“7”;P0口送出的位码数据是0x00,即8个数码管全部显示。
最终显示效果是8个数码管同时静态显示数字“7”。
4、通过改变本例主函数中送到P0口的位码数据和送到P1口的段码数据,可以显示其它数字或字符。
图3-7 共阳数码管显示输出程序清单如下:#include <reg52.h>#define uchar unsigned charunsigned char duan[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};main(){P0=0x00;P1=duan[7];}3.2.6数码管动态显示实例1功能要求:使用数码管动态显示数字或字符。
硬件说明:动态显示与静态显示使用同一电路,如图3-7所示共阳数码管显示输出电路。
具体细节请参照静态显示硬件说明。
软件说明:1、P0口输出位码,低电平有效。
因为采用动态扫描方式,每次只能有一个数码管被点亮,所以P0口输出位码依次是0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;2、P1口输出段码,共阳数码管段码如表3-2所示;3、主程序中的for延时语句for(j=0;j<=200;j++);是动态扫描的时间间隔,读者可通过调节延时时间的长短,观察现象,深入理解动态扫描的原理。
首先设置较长的延时时间,则各个数码管如同流水灯一样被逐个点亮;将延时时间逐渐减小,各个数码管类似流水灯一样“跑”得会更快;进一步将延时时间减小,可以看到数码管全部点亮,但数码管闪烁现象较严重;继续减小延时时间,数码管闪烁效果会减弱,直至肉眼感觉不到闪烁为止。
4、主函数中P1=0xff;语句用于消影。
动态扫描可以实现动态显示,即多个数码管同时显示,而每一个数码管的显示内容可以不同,为了使本次扫描的显示结果不影响下次扫描的显示结果,在每次扫描显示之后,将数码管各段全部熄灭,即共阳数码管送段码0xFF,共阴数码管送段码0x00,这就是消影。
消影可使显示稳定、清晰。
5、本例程序清单的显示效果是8个数码管依次显示数字0~7。
改变主函数中P1=duan[i];语句为P1=duan[i+1];可使显示结果变为8个数码管依次显示数字1~8;若改为P1=duan[i+8]; 显示结果变为8个数码管依次显示89AbCdEF。