作者:未知 来源:电子商务网
一、实验目的
1、学习51单片机内部定时器的使用方法。
2、掌握中断处理程序的方法。
3、掌握数码管与单片机的连接方法和简单显示编程方法。
4、学习和理解数码管动态扫描的工作原理。
二、实验内容
1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。
2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。
3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
三、实验电路图
1、数码管的基本概念
(1) 段码
数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。公共端1控制左面的数码管;公共端6控制右面的数码管。正面看数码管的引脚、段选线和数据线的对应关系为:
段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)和与数据线的连接顺序有关。
对应数据线 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
对应显示段 |
e |
f |
DP |
g |
c |
d |
b |
a |
显示数字 |
段码 |
0 |
0CFH |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
03H |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
2 |
5DH |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
3 |
5BH |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
4 |
93H |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
5 |
0DAH |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
6 |
0DEH |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
7 |
43H |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
8 |
0DFH |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
9 |
0DBH |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
(2)位码
位码也叫位选,用于选中某一位数码管。在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。位码与段码一样和硬件连接有关。
(3)拉电流与灌电流
单片机的I/O 口与其他电路连接时,I/O 电流的流向有两种情况:一种是当该I/O 口为高电平时,电流从单片机往外流,称作拉电流;另一种是该I/O 口为低电平时,电流往单片机内流,称为灌电流。一般I/O 的灌电流负载能力远大于拉电流负载能力,对于一般的51 单片机而言,拉电流最大4mA,灌电流为20mA。一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。本实验电路中采用拉电流方式(用共阴数码管)。
2、多位数码管的动态显示
在多位8段数码管显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个单片机的8位I/O口控制,形成段选线的多路复用。而各位数码管的共阳极或共阴极分别由单片机独立的I/O口线控制,顺序循环地点亮每位数码管,这样的数码管驱动方式就称为“动态扫描”。在这种方式中,虽然每一时刻只选通一位数码管,但由于人眼具有一定的“视觉残留”,只要延时时间设置恰当,便会感觉到多位数码管同时被点亮了。
多位8段LED动态显示器电路,其中段选线占用一个8位I/O口,位选线占用一个8位I/O口,由于各位的段选线并联,段线码的输出对各位来说都是相同的。因此,同一时刻,如果各位位选线都处于选通状态的话,8位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一位的位选线处于选通状态时,其它各位的位选线处于关闭状态,这样,8位LED中只有选通的那一位显示出字符,而其它位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他的位选线处于关闭状态。如此循环下去,就可以使各位“同时”显示出将要显示的字符。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则可造成多位同时亮的假象,达到显示的目的。
3、定时器
(216—计数初值)╳晶振周期╳12 或 (216—计数初值)╳机器周期
因为实验系统的晶振12MHZ,机器周期等于1us。最大定时时间为:
(216—0)╳1/12╳10-6╳12=65536╳10-6(s)= 65.536ms。
所以需要配合软件记数。如要延时1秒,T0取最大定时时间,则需要T0中断16次,所用时间为
65536*16=1048576μs≈1s
因此在T0中断处理程序中,要判断中断次数是否到16次,若不到16次,则只使中断次数加1,然后返回,若到了16次,定时1秒时间到。
如要延时1秒,T0取50ms定时时间,则需要T0中断20次,所用时间为
50ms*20=1000ms=1s
因此在T0中断处理程序中,要判断中断次数是否到20次,若不到20次,则只使中断次数加1,然后返回,若到了20次,定时1秒时间到。
五、参考程序框图及部分程序
1、使用定时器T1,定时1秒,控制P1口发光管循环点亮。
;利用定时器精确延时1秒
;循环点亮P1口接的八只发光二极管。
ORG 0000H
AJMP START
ORG 001BH ;T1中断入口地址
AJMP INT_T1
ORG 0030H
START: MOV SP,#60H
MOV TMOD,#10H ;置T1为方式1
MOV TL1,#0B0H ;延时50mS的时间常数
MOV TH1,#3CH
MOV R0,#0FEH
MOV R1,#20
SETB TR1;启动定时器1,开始定时
SETB ET1
SETB EA ;开中断
SJMP $
INT_T1:;T1中断服务子程序
PUSH ACC;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
CLR TR1;关闭定时器1,停止定时
MOV TL1,#0B0H;定时50mS常数
MOV TH1,#3CH
DJNZ R1,EXIT
MOV R1,#20;延时一秒的常数
MOV A,R0;
MOV P1,A ;送P1口显示
SETB C
RLC A
MOV R0,A
EXIT: SETB TR1;启动定时器1,开始定时
POP DPH;恢复现场
POP DPL
POP PSW
POP ACC
RETI
END
2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。
最新评论