数码管的应用.docx
《数码管的应用.docx》由会员分享,可在线阅读,更多相关《数码管的应用.docx(15页珍藏版)》请在冰豆网上搜索。
数码管的应用
51开发板-数码管的应用
介绍如何使用七数码管及一些基本应用。
七段数码管在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等等,具有显示醒目、直观的优点。
下文我们将结合仿真器、编程器和试验板来学习数码管的使用。
首先,让我们先来对相关理论知识进行一番了解。
如图片左上角,是我们51试验板的4位数码管;那这些数码管是怎样来显示1,2,3,4……数字呢?
别着急,我们一起慢慢来学。
数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
如:
显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。
7段数码管的段排列和内结构见下图:
试验板用的都是共阳极扫描型数码管。
那什么是共阳极呢;就是他们的公共端接正极;还有一种是共阴极的数码管,那么他们的公共端是接负极的。
扫描型的意思是,几位的数码管的段选都是并联着的。
现在我们可以看到试验板上有四个数码管,那我们应该如何来控制哪一只数码管显示呢?
再看看试验板上的图片,右边有4个黑糊糊的三极管,对,就是用它们来控制左边的那些数码管哪个边亮。
现在来看看试验板数码管部分的硬件原理图。
图中的A,B,C,D,E,F,G,DP分别与单片机的P0.0--0.7口相连,用来控制显示数字的形状。
Q81、Q82、Q83、Q84即为上文所讲到的4个控制数码管的三极管,S1、S2、S3、S4分别接在单片机的P2.0,P2.1,P2.2,P2.3口上。
通过控制这些三极管的S1、S2、S3、S4端的电平来打开或关闭数码管的显示,即起到“使能”作用。
如S1端为低电平,则允许相应的数码管显示,显示的字形则由P0.0--0.7口所决定。
上面理论说了一大堆,我们从这里开始动手喽:
)我们的任务是要让左边两个数码管显示一个“2”字。
首先,还是将仿真器和试验板的线都插好,如图所示:
接下来,我们得安装仿真器软件——Keil,用户可以在配带的软件光盘“仿真器配套软件及编译器”目录下找到,Keil中有三个文件夹,进入“Keil主程序”运行Setup.exe文件进行安装,无需特别的参数设置,按其默认值确认即可,具体安装方法可看目录下的说明文件。
安装完成之后,点击开始菜单“程序”中的“KeiluVision2”。
进入软件界面,如图所示:
我们在“工程”菜单中执行“新建”命令,新建工程文件名取为“project.uv2”。
接下来是选择我们要做实验使用的CPU类型,我们在此使用市面上最为常见的Ateml公司的AT89C51型号,选好,点击确定即可,这时我们的工程向导已经做完,下一步我们将编写源程序代码,即2个数码管显示数字“2”所需要的程序代码。
我们执行“新建”操作,在弹出的文本编缉框内键入以下代码:
LOOP:
CLRp2.0
CLRp2.1;选中左边两个数码管
SETBp2.2
SETBp2.3;不选中右边两个数码管
SETBP0.7
SETBP0.5
CLRP0.1
SETBP0.2
CLRP0.3
CLRP0.4
CLRP0.6
CLRP0.0
AJMPLOOP
END
如图所示
在这个程序里,我们使用的是汇编最基本的指令SETB和CLR,用来将指定的单片机端口分别置为高电平或低电平。
第2、3行语句的作用是用来选中试验板上左边两个数码管,使其显示;第4、5行语句的作用则是不选中右边两个数码管,即关闭其显示。
使用者也可以自行选择用哪个数码管来显示,只要将相应的控制口使用CLR指令置为低电平即可。
程序第6行开始,则是控制数字数形,可以从前文介绍的“7段数码管的段排列和内结构图”中分析得出数字形状。
程序代码录入完毕,下面我们得保存我们已经编好的程序,即执行“文件”菜单中的“另存为”命令,文件名我们在此取为shumaguan.asm。
注意.asm是汇编语言的扩展名,如果使用C语言编写的话,则扩展名应是.c。
OK,现在我们已经保存好了这个文件。
还记得吗,我们刚才新建了一个叫“project”的工程,而shumaguan.asm文件应该是我们project这个工程的其中一份子,换句话说,我们还应该把这个shumaguan.asm文件添加到project这个工程当中去。
具体操作如下,点击屏幕左侧的Target1字样旁边的“+”图标,则会弹出一个子项,名为“SourceGroup1”,在其上面单击鼠标右键,选择“增加文件到组SourceGroup1”这项,把我们刚才保好的shumaguan.asm加进去。
如图所示:
接下来,我们要为源程序做一项编译工作,即产生目标文件,等会我们要把该文件烧入到我们的AT89C51单片机芯片中去。
在执行编译之前,我们需要进行一些设置,右击“Target1”,在弹出菜单中选择“目标Target1属性”选项,进入弹出菜单中的“输出”页,页面中有一项为“生成HEX文件”,我们在其选择框内打上勾,然后,点击确定完成设置。
现在,我们只要按一下快捷键F7,就可以完成编译工作了,这时,你会在shumaguan.asm文件所在目录下发现一个名为“project.hex”的文件,这就是我们所用来完成烧写芯片工作时使用到的目标程序文件,该文件为16进制文件。
编程编完了,我们自然要使用仿真器来验证一下程序有否正确,但在使用仿真器之前,我们还需要手动设置一些相关参数,同样是在“目标Target1属性”选项,进入“目标”页面,将晶振频率设置为11.0592M,因为我们的仿真器使用的频率值为11.0592M,如图所示:
进入“调试”页,选择使用“KeilMonitor-51Driver”硬件仿真器,点击其后边的“设置”按钮,进行仿真器的串口通讯设置,如果你的仿真器串口线插在计算机的COM1口上,则我们在此选择为“COM1”,因为笔者使用时是插在COM2口上,所以在此我们选择“COM2”,将波特率设置为“38400”,点击确定后,我们在“启动时加载程序”的复选框打个勾,页面内的“恢复调试设置”安需选择即可,我们在此将“断点”、“工具栏”、“存储器显示”这几项打上勾。
详细的设置,请如图所示:
现在我们已经将所有的设置都完成了,下面就让我们来看看我们的成果吧。
首先,点击Keil软件“调试”菜单中的“开始/停止调试”项,或者也可以按键盘快捷键Ctrl+F5。
如屏幕左下角出现如图所示的样子,则表示仿真器连接成功,“Monitor-51V3.4”是软件版本号。
然后,再选择“调试”菜单中的“运行到”按钮,或使用键盘快捷键F5,这地仿真器才真正地起到仿真的作用了,你会发现我们的试验板左上角两个数码管正确地显示出“2”字,这正是我们所想要得到的结果。
如图所示:
至此,我们已经完成了程序调试工作及硬件的仿真。
完了之后,我们还需要做一件事,就是断开连接,如我们在生活中打完电话一定要挂机一样,断开连接的操作非常简单,首先,按一下仿真器硬件电路板上的一个复位按钮(见仿真器图片中左上角那个按钮)。
然后在“开始/停止调试”按钮,即我们刚才用来连接时按的那个按钮。
至此,仿真工作全部结束。
从上面的程序,我们会发现这个程序看上去比较繁琐。
呵呵,其实可以发现P0口的一排数字其实就是二进制的数字。
我们把它转换为16进制,得出下表,直接送到P0口就行啦。
注意0为点亮1为灭
显示数字
p0.7
p0.6
p0.5
p0.4
p0.3
p0.2
p0.1
p0.0
16进制代码
0
1
1
0
0
0
0
0
0
C0H
1
1
1
1
1
1
0
0
1
F9H
2
1
0
1
0
0
1
0
0
A4H
3
1
0
1
1
0
0
0
0
B0H
4
1
0
0
1
1
0
0
1
99H
5
1
0
0
1
0
0
1
0
92H
6
1
0
0
0
0
0
1
0
82H
7
1
1
1
1
1
0
0
0
F8H
8
1
0
0
0
0
0
0
0
80H
9
1
0
0
1
0
0
0
0
90H
我们把他从高往低排列为二进制,例如2,就是10100100,用计算器转换为16进制就是A4.我们在单片机里为了把16进制和10进制有所区别,就把16进制后面跟一个H,同时如果首位为字母的为了区别于指令,同时前面跟一个0,就成了0A4H了。
您可能有一点疑问,为啥P0.7始终为1呢。
这是因为它接在小数点上。
我们没有用它而已。
现在我们再修改一下刚才的程序,就会发现现在的程序简洁多了,而且看上去更直观。
还是显示一个数字“2”的程序:
LOOP:
CLRp2.0
CLRp2.1;选中左边两个数码管
SETBp2.2
SETBp2.3;不选中右边两个数码管
MOVP0,#0A4H;将10100100送P0口
AJMPLOOP
END
我们可以看到显示的结果是一样的。
这次,我们只用了“MOVP0,#0A4H”一句话,就控制了输出的字形,上述程序为输出数字“2”,如果我们要显示数字“3”,则只要将“MOVP0,#0A4H”该语句改为“MOVP0,#0B0H”即可。
:
)是不是觉得非常简单噢。
试验板一共用了4个数码管,它们的位选为P2.0P2.1P2.2P2.3一共可以显示四位数字,甚至我们可以直接用它来做一个显示仪表,或者闹钟了。
它的0,1,2,3,4,5,6,7,8,9的代码分别如上表所示。
数码管的另一种显示控制方式——动态扫描显示接口。
它是单片机中应用最为广泛的显示方式之一。
其接口电路是把所有数码管的所有笔划段同名端连在一起,而每一个数码管的公共极是各自独立地受I/O线控制,如我们试验板原理图中的S1、S2、S3、S4就是控制线。
单片机向字段输出口送出字形码时,所有的数码管接收到相同的字形码,但究竟是哪个数码管亮,则取决于公共端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。
而所谓动态扫描就是指我们采用分时的方法,轮流控制各个数码管的公共端,使各个数码管轮流点亮。
轮流点亮扫描过程中,每位数码管的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
以下为使用动态扫描法使51试验板显示数字“8051”的程序
loop:
movp0,#0ffh;关显示
movp2,#0ffh;关显示
clrp2.0;选中第一个数码管
movp0,#80h;数码管显示8
lcalldelay;调用延时
movp0,#0ffh
movp2,#0ffh
clrp2.1;选中第二个数码管
movp0,#0c0h;数码管显示0
lcalldelay
movp2,#0ffh
movp0,#0ffh
clrp2.2;选中第三个数码管
movp0,#92h;数码管显示5
lcalldelay
movp0,#0ffh
movp2,#0ffh
clrp2.3;选中第四个数码管
movp0,#0f9h;数码管显示1
lcalldelay
ajmploop;程序条转到第一步,反复执行
delay:
;延时子程序
movr6,#250
d1:
djnzr6,d1
ret
end
读者可以将其直接粘到Keil程序编缉器中仿真执行,编译后烧到芯片中去,看一下数字显示的效果,简单吧:
)
咱们继续讲,我们现在已经完成了软件程序的编制及仿真工作,下面我们就来讲一讲,咱们的最后一道工序,即程序定形后,我们如何将其烧到我们的单片机芯片中去。
我们以现在Atmel公司最新的AT89C51芯片来讲。
首先,我们将串口线从仿真器上拔下,然后插在51编程器上,同时插上USB线,如图所示:
将光盘上的“A51经济型编程器软件”文件夹全部复制到你的电脑硬盘上,并将其目录下的所有文件的“只读”属性去掉,具体操作,全选所有文件,在文件属性中将其“只读”项前面复选框内的勾去掉即可。
现在,我们打开“编程器.exe”,进入程序界面,同样编程器在第一次使用前也需要手动设置一些参数,进入“设置”项,根据你编程器所插的COM口号,设置好COM口序号,波特率设置为:
28800,图中笔者所插的COM口为COM2,将界面左上角的芯片类型设为AT89C51,详细设置如图所示:
现在该设置的都已经设置完了,下面我们就需要将要烧写的程序文件调进来,执行“打开文件操作”,找到刚才我们刚才已经准备好的project.hex文件,选中打开即可。
然后,我们插在要烧写的AT89C51芯片,如图所示:
首先,我们执行一下“擦除器件”操作,差不多1秒钟即可完成芯片的擦除工作,速度很快。
好了,现在已经到最后一步了,用鼠标点一下“写器件”按钮吧,OK,大功告成。
至此,我们已经完成了从软件编写,仿真,直到烧写芯片的全部步骤。
一定很辛苦了吧:
)下面就让我们来看看我们的成果吧,把刚才烧写好的AT89C51芯片插在试验板上,并接上USB线,来看看板上的两个数码管是不是显示数字“2”。
现在我们已经脱离了我们的仿真器而使用的是单片机芯片。
到这里,相信你一定对数码管的工作原理及应用有所理解了吧,我们介绍了数码管的静态、动态使用方法,掌握了这两种方法,你就可以根据你自己的意愿及要求来编写各种各样的数字显示的应用程序了,如时钟,秒表,频率计的制作等等,可以充分发挥你的想象达到你所需要的各种显示效果。