SP-28USB单片机综合学习系统之数码管使用

    通过前一期的学习,我们已经对SP-28USB单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管,体会到了学习系统的易用性与易学性,当自己第一次动手编程点亮一个发光管时,相信对于初学者来说,一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下数码管的工作原理及使用方法,这一期实验将会更具生动性。
    说到七段数码管,它在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等等,具有显示醒目、直观的优点。

 

图一

    首先,我们先对相关理论知识进行一番了解,可以看到图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:


图二

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

   数码管电路部分的硬件原理图如图3所示。

图三
 

图四

 

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

先在记事本里写好下列程序,(随机套件光盘里也有,可以直接调用)保存为:ASM文件.

CODE_SEG SEGMENT CODE

DATA_SEG SEGMENT DATA

RSEG DATA_SEG

dis_digit: DS 1
dis_index: DS 1
dis_buf: DS 8
stack: DS 20

;===========================================================

CSEG AT 00000H ; Reset向量
LJMP MAIN

CSEG AT 0000BH ; 定时器0中断向量

LJMP TIMER0


;===========================================================
RSEG CODE_SEG
MAIN:
MOV SP,#(stack-1) ; 初始化堆栈指针
MOV P0,#0FFH ; 初始化I/O口
MOV P2,#0FFH
MOV TMOD,#01H ; 初始化timer0
MOV TH0,#0FCH
MOV TL0,#017H
MOV IE,#082H

MOV DPTR, #DIS_CODE ; 设定显示初值
MOV A,#1
MOVC A,@A+DPTR
MOV dis_buf,A
MOV A,#2
MOVC A,@A+DPTR
MOV dis_buf+01H,A
MOV A,#3
MOVC A,@A+DPTR
MOV dis_buf+02H,A
MOV A,#4
MOVC A,@A+DPTR
MOV dis_buf+03H,A
MOV A,#5
MOVC A,@A+DPTR
MOV dis_buf+04H,A
MOV A,#6
MOVC A,@A+DPTR
MOV dis_buf+05H,A
MOV A,#7
MOVC A,@A+DPTR
MOV dis_buf+06H,A
MOV A,#8
MOVC A,@A+DPTR
MOV dis_buf+07H,A

MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描
MOV dis_index,A

SETB TR0 ; 启动定时器0,开始动态扫描显示

MAIN_LP:

; 主程序循环,增加其它代码

SJMP MAIN_LP

; END OF main


;===========================================================

USING 0
TIMER0:
; 定时器0中断服程序, 用于数码管的动态扫描
; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
; 选通P2.0口数码管
; DIS_BUF --- 显于缓冲区基地址

PUSH ACC
PUSH PSW
PUSH AR0

MOV TH0,#0FCH
MOV TL0,#017H

MOV P2,#0FFH ; 先关闭所有数码管

MOV A,#DIS_BUF ; 获得显示缓冲区基地址
ADD A,DIS_INDEX ; 获得偏移量
MOV R0,A ; R0 = 基地址 + 偏移量
MOV A,@R0 ; 获得显示代码
MOV P0,A ; 显示代码传送到P0口

MOV P2,DIS_DIGIT ;

MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管
RL A
MOV DIS_DIGIT,A

INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位
ANL DIS_INDEX,#0x07 ; 当DIS_INDEX等于8(0000 1000)时, 清0

POP AR0
POP PSW
POP ACC

RETI
; END OF timer0
;===========================================================

RSEG CODE_SEG
DIS_CODE:
DB 0C0H
DB 0F9H
DB 0A4H
DB 0B0H
DB 099H
DB 092H
DB 082H
DB 0F8H
DB 080H
DB 090H
DB 0FFH

END

下来我们通过Keil51将上面文件编译,生成hex文件(光盘里有)


    接下来我们就需要大开SP-28USB烧写软件,选择AT89S51芯片,调入要烧写的程序文件,执行“调入flash”,找到刚才我们刚才已经准备好的my.hex文件,选中打开即可。然后,我们执行一下“擦除”操作,差不多1秒钟即可完成芯片的擦除工作,速度很快。好了,现在已经到最后一步了,用鼠标点一下“自动完成”按钮吧,OK,大功告成。至此,我们已经完成了从软件编写,直到烧写芯片的全部步骤。现在学习系统已可以完全脱离电脑而独立工作了,如图7所示,

   数码管的原理与使用我们讲到这里,接下来,我们将继续一起学习51单片机综合学习系统其它各部分资源的原理与使用,使你对单片机应用的各方面知识都有所入门与提高。


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

郑州火车站中州商场3楼北厅3438号  电话:0371--66987238   13733178417 
  QQ:308894904  电子信箱:
saxmcu@126.com