51单片机综合学习系统之数码管使用学习篇《电子制作》2007年1月 站长原创,如需引用请注明出处

    大家好,通过前一期的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管,体会到了学习系统的易用性与易学性,当自己第一次动手编程点亮一个发光管时,相信对于初学者来说,一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下数码管的工作原理及使用方法,这一期实验将会更具生动性。

说到七段数码管,它在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等等,具有显示醒目、直观的优点。


图1

 

    首先,我们先对相关理论知识进行一番了解,可以看到图1中有8位数码管,那么这些数码管是怎样来显示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段数码管的段排列和内结构见图2:


图2

 

    学习系统用的是共阳极数码管。所谓共阳极就是它们的公共端接正极;还有一种是共阴极数码管,即公共端是接负极的。
可以看到学习系统上有8个数码管,那我们应该如何来控制哪一只数码管作显示呢?再看看板上的图片,数码管下面有8个黑色三极管,对,就是用它们来控制哪个数码管亮的。
数码管电路部分的硬件原理图如图3所示。


图3

 

    图3中的A,B,C,D,E,F,G,DP分别与单片机的P0.0--0.7口相连,用来控制显示数字的形状。8个控制数码管三极管的基极分别接在单片机的P2.0--P2.7口上。通过控制这些三极管基极电平来打开或关闭数码管的显示,即起到“使能”作用。
    理论讲了一大堆,现在我们就来一起动手实践一下,这样才有感性的认识。从包装盒中取出51单片机综合学习系统,首先,我们先将它通过USB线、串口线、并口线与电脑相连,USB线用来供电,串口线用来仿真,并口线用来做ISP程序下载使用。全套学习系统中配有两片芯片,分别是SST89E564和AT89S51,前者用于仿真操作,后者为空白的单片机芯片,供学习者将程序烧入芯片实验所用,我们先使用仿真功能来调试数管码程序,因此,先把SST89E564仿真模块插到学习系统板上并用锁紧杆将其压紧,至此,实验的硬件平台已经搭好,如图4所示。


图4

    下面我们得安装Keil编程仿真软件,用户可以在配带的软件光盘“keil C51中文完全版”目录下找到,运行Setup.exe文件进行安装,无需特别的参数设置,按其默认值确认即可,具体安装方法可看目录下的说明文件。安装完成之后,点击开始菜单“程序”中的“Keil uVision2”。我们在“工程”菜单中执行“新建”命令,新建工程文件名取为“my.uv2”。接下来是选择我们要做实验使用的CPU类型,选择Ateml公司的AT89S51型号即可,工程向导已经做完,我们将工程属性中的晶振频率设为11.0592MHz,编译产生HEX文件选项前打上勾,在调试页面中选择使用“Keil Monitor-51 Driver”硬件仿真器,设置好串口序号,如COM1或COM2,由于文章篇幅有限,Keil软件详细使用及设置请参阅《电子制作》2006年11期“51单片机综合学习系统快速入门”一文,下一步我们将编写源程序代码,功能是让8个数码管同时显示数字“2”。我们执行“新建”操作,在弹出的文本编缉框内键入以下C语言程序代码: 

#include "reg51.h"
main()
{
while(1)
{
P0=0xa4;
P2=0;
}
}

 

    程序分析:前面我们已经讲过P0口用来控制显示字形,因为我们要显示为数字2,所以我们给P0口赋0xa4这个值,P2口用来控制8个数码管中哪个点亮显示,由于我们要8个数码管全部显示,故将P2口设为0即可,P2口的低电平来控制三极管是否通导,从而实现对数码管的片选。While(1)语句的功能则是让程序执行死循环,即数码管不停地显示数字“2”。
运行结果如图5所示。

图5

    看到这里你可能会问为什么数字“2”就是往P0口送0xa4这个数据?现在我们给出表1,你可以根据表中所对应的16进制代码值向P0口发送数据,从而得到要显示的字形,简单吧。如我们要显示数字“8”,那么只要将以上程序中的语句P0=0xa4改为P0=0x80即可。 
注意:? 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

表1

    我们把它从高往低排列为二进制,例如数字“2”,就是10100100, 用计算器转换为16进制就是A4。我们在单片机里为了把16进制数和10 进制数加以区别,于是在16进制数后面跟一个“H”。看了表1,你可能有一点疑问, 为什么P0.7始终为1呢?这是因为它接在小数点上。我们没有用它而已。

    现在仿真程序试验显示结果正确,这时我们需要断开仿真连接,只要按一下学习系统板上的复位按钮,板上有中文标注。然后点击“开始/停止调试”按钮,即我们刚才用来连接时按的那个按钮。至此,仿真工作全部结束,咱们的最后一道工序,即程序定形后,我们如何将其烧到我们的AT89S51单片机芯片中去,如何使用ISP在线下载功能。学习系统电源开关关闭后,取下SST89E564仿真模块,插上AT89S51芯片,打开电源开关,打开配套光盘中“ISP编程软件”目录下的“ISP编程.exe”文件,软件界面如图6所示。


图6

    下面我们就需要将要烧写的程序文件调进来,执行“打开文件操作”,找到刚才我们刚才已经准备好的my.hex文件,选中打开即可。然后,我们执行一下“擦除”操作,差不多1秒钟即可完成芯片的擦除工作,速度很快。好了,现在已经到最后一步了,用鼠标点一下“写”按钮吧,OK,大功告成。至此,我们已经完成了从软件编写,仿真,直到烧写芯片的全部步骤。现在学习系统已可以完全脱离电脑而独立工作了,如图7所示,大家可以注意到图中只插了USB线,只是用来供电,当然你接外接电源也可以,因为学习系统是双电源供电设计的。数码管的原理与使用我们讲到这里,接下来几期,我们将继续一起学习51单片机综合学习系统其它各部分资源的原理与使用,使你对单片机应用的各方面知识都有所入门与提高。


图7

    51单片机综合学习系统资源丰富,可做实验有:8位LED数码管、32路LED、4x4矩阵键盘、4个直控键盘、蜂鸣器喇叭、继电器试验、I2C总线接口、SPI总线接口、160X液晶、128X64液晶、红外接收头接口、支持PS/2接口的104键标准键盘、步进电机驱动接口、ADC0832模/数转换接口、PC817光电耦合器、串行时钟芯片DS1302、温度传感器DS18B20接口、RS232串口通讯、外扩展接口以便外接更多的实验资源。