为了先说明数码管的工作原理,本任务只用一个7段数码管,用P0端口控制数码管发光二极管的亮灭。图5-2 一位数码管控制Keil仿真程序进入死循环后P0端口的值为“11111001B”,对应数码管的b,c位为0。......
2023-11-17
要使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扩展)
有关单片机原理与应用 基于C语言的文章
为了先说明数码管的工作原理,本任务只用一个7段数码管,用P0端口控制数码管发光二极管的亮灭。图5-2 一位数码管控制Keil仿真程序进入死循环后P0端口的值为“11111001B”,对应数码管的b,c位为0。......
2023-11-17
LED数码管由优质、超高亮LED组成,主要用于城市景观,起亮化作用。表6-5 电源配置电阻LED数码管电路设计以TM1812作为控制芯片,设计1m8段的LED数码管。LED灯的数量为120个,工作电压为DC 24V,1m8段的LED数码管由2个TM1812组成。......
2023-06-15
如观察“4”是如何显示出来的,首先点亮数码管b、c、f、g段,对应到单片机的I/O口,将P0.1、P0.2、P0.5和P0.6端口置“0”,公共端com1~com4置“1”,实现集成4位数码管全部显示“4”。表9-1列出显示“4”数字段码对应关系。程序设计上通过循环结构实现“2”“4”“6”“8”数字的轮询显示。数码管静态显示程序流程图如图9-10所示。图9-11 数码静态显示程序编译成功界面......
2023-11-04
1.常用LED显示的结构LED显示器是由发光二极管来显示字段的器件。表8-4七段LED显示码2.LED显示器的显示方式及接口LED显示方式分为静态显示方式和动态显示方式。如图8-21所示,利用8255的3个I/O口控制3位七段显示器的接口逻辑,图中为共阳极接法。图8-213位静态七段LED显示器接口图图8-22用8155的I/O口6位动态显示器接口图在图8-22中,LED为共阴极数码显示器。......
2023-11-17
LED显示器是由7段发光二极管构成的,LED显示器在单片机系统中的应用非常普遍。LED显示器的引脚排列及发光二极管连接方法如图5-45所示。使用LED显示器时,要注意区分这两种不同的接法。用LED显示器显示十六进制数字形代码见表5-4。对多位LED显示器通常采用动态扫描的方法进行显示,即逐个循环地点亮各位显示器。图5-46是使用8155实现的6位LED显示器接口电路。缓冲区的单元个数与LED显示器位数相同。......
2023-06-28
LED点阵显示块的外形如图8-3所示。图8-3 8×8单色LED点阵显示块的外形一个数码管是8个LED组成,同理,一个8×8的点阵就是由64个LED小灯组成。图8-4 8×8单色LED点阵显示器内部结构LED点阵显示器可以实现数字、符号、中英文字及简单图形的显示。......
2023-11-17
本实验机的数码管显示器是以两片74HC164组成两管静态共阳显示器。因而显示亮度好,显示稳定,无闪烁。⑧跳出for循环,执行下一个语句,结果为显示35。跟踪运行证明,变量byte、din移位正确,能准确地在数码管移位输出字形码0x92。结束后,在实验机上应显示“35”。程序点评本例只是将变量a进行/10和%10运算,得到低位和高位数,进行取字形码并送send()显示。......
2023-11-07
相关推荐