首页 理论教育动态显示方法操控LED数码管显示1

动态显示方法操控LED数码管显示1

【摘要】:要使LED数码管显示器显示某一字符,需要对数码管的两部分进行控制。要求在四位数码管上同时显示出“1”字符。图5-13 数码管的静态显示(二)5.2.2 动态显示动态扫描显示方式是单片机应用系统中最常用的显示方式。

要使LED数码显示器显示某一字符,需要对数码管的两部分进行控制。每一位显示器的公共端(阴极或阳极)的控制,称为“位控”(控制某位LED显示状态);每一位显示器中各段(a~g、dp)的控制,称为“段控”(控制一位LED字形的显示)。

七段LED数码管显示器的连接方式有两种,即静态显示连接方式和动态显示连接方式。

下面通过实践来学习使用静态和动态两种方式来驱动数码管,让数码管按照指定的要求显示出字符来。

5.2.1 静态显示

数码管静态显示需要使用一组I/O口来维持一个数码管的显示,这种方法虽然会浪费掉多个宝贵的I/O口,但却能减小CPU的负荷,并能帮助我们理解数码管的驱动原理。

【实训5.1】要求在四位数码管上同时显示出“1”字符。

分析:任务5.1中的电路连接方式属于静态显示连接方式,在图5-1中,单片机的P0端口与数码管的段控端a~g相连,显示器的公共端接+5 V电源,这是共阳极连接方式。单片机只需将显示的字形码送到段控端,就会显示相应的字形。

本实训要求用四位数码管同时显示出“1”字符,就要用到4位数码管,因为显示的是同一个字符,所以可选四位一体的数码管。其电路图如图5-8所示。

具体程序代码如下:

以上程序经正确编译后,在Proteus中的仿真效果如图5-12所示。

图5-12 数码管的静态显示(一)

【实训5.2】在实训5.1的基础上对代码进行适当修改,让四位数码管上依次显示出从0~F共计16个字符出来,时间间隔约为500 ms。

分析:实训5.1是四个数码管显示一个字符,显示结束后程序进入死循环,数码管段码受单片机P0端口的控制,数据没有发生变化,所以稳定显示为“1”,现在要显示0~F十六个数,每次显示一个数,即段码发生变化,根据前面学过的知识,对重复工作要用循环来完成,只是每次间隔时间要达到500 ms,这个要用延时函数来完成。程序清单代码如下:

以上代码执行后会看到四位数码管上会循环显示0~F十六个字符,具体运行状态如图5-13所示。

图5-13 数码管的静态显示(二)

5.2.2 动态显示

动态扫描显示方式是单片机应用系统中最常用的显示方式。原理图和静态显示是相同的,不能同时显示字符,要采用循环扫描的方法,即自左到右(或自右向左)依次轮流合每位显示器显示字符并持续一段时间(通常为1 ms),由于发光物体具有余辉特性以及人眼的视觉暂留,尽管各位显示器是分时断续地显示,只要适当选取扫描频率,显示效果就是连续稳定地显示,而察觉不到有闪烁现象。

【实训5.3】让四个数码管从左起第一位开始显示数字“1”,间隔一小段时间,关掉第一个数码管,让第二个数码管显示数字“2”,按照这种方式,让四个数码管轮流显示数字“1~4”。(www.chuimin.cn)

分析:根据动态显示的原理,先让第四位显示1(这里是P2.3控制),持续一段时间(本程序选约300 ms),然后同时关闭P0口和P2口中(黑屏),等待1 ms,再进行下一个字符的显示。

程序执行后数码管会按顺序依次显示数字“1~4”,具体运行状态如图5-14所示。

图5-14 数码管的动态显示(一)

接下来我们需要对程序代码进行一点调整,将主函数“while”循环中的延时语句“delay ms(300);”依次改成“delay ms(100);”“delay ms(50);”,最后改成“delay ms(3);”,观察程序运行的效果。这时你会惊奇地发现,原来数码管按位依次显示数字1~4,当延时时间足够短后,数码管似乎在显示一个固定的数值“1234”,如图5-15所示。

图5-15 数码管的动态显示(二)

以上的例子讲清楚了数码管的动态显示原理,但这样的程序在实际生活中没有任何的应用价值,实际生活中经常要显示一个具体的值,如温度、压力等。

【实训5.4】在以上电路图不改变的前提下,编写一个应用程序,程序中的变量“num”会随着时间的变化而改变数值,从“0”自加到“9999”,再回到“0”,数码管将变量“num”的值实时地显示出来。

分析:实训5.3是通过轮流给P0端口输出段码,同时让对应的位码使能,减少间隔时间,显示出动态效果。要实现在四位数码管上显示不同的字符或数字,首先要对显示的数字和字符进行分解,把要显示的数字分解成单个的数字,然后根据该数字查找相应的段码送控制端口。

具体程序代码清单如下:

程序运行后我们可以看到数码管的值在不断地变化中,这种变化客观地反映出了程序中变量“num”的值在不断地变化,具体状态如图5-16所示。现在,你也会发现自己在不知不觉中已经能将任意一个数字显示在数码管上了。

图5-16 数码管的动态显示(三)

以上实训都是在Proteus中完成的,这里是为了学习数码管的工作原理,但在实际应用中是不能这样简单设计的,前面在项目中的学习中,为了增强I/O端口的拉电流和灌电流的能力,用到一个芯片74HC245,在前面这些实训中也能使用74HC245作为缓冲和扩展来使用。电路图和仿真结果如图5-17所示。

图5-17 动态数码管显示(74HC245扩展)