一、实验目的:
(1)、掌握用串行口驱动四位数码管显示2组不同数据的方法。
(2)、掌握电子时钟逢六十进一的编程方法。
(3)、掌握用按键校正电子时钟的方法。
(4)、掌握定时闹铃的编程方法。
二、实验任务与要求
利用定时/计数中断和静态显示,实现电子钟的时分秒精确走时和校准。时间显示用四个数码管分别显示时、分、秒用点显示,在时和分的中间闪动,时间显示格式:
2
1.
4
5
小时
秒点
分钟
时间校准用两个键实现:一个键K1(P1.4)做移动选择键(选中要修改的键,选中的位用闪烁指示),一个键K2(P1.5)做加一键。
准点报时功能:可以增加一个键K3、K4设计具有闹钟功能,能实现定点报时。具体操作时:按下K3(P1.6)键做移动选择键(选中要修改的键,选中的位用闪烁指示),一个键K4(P1.7)做加一键。
用单片机制作一个电子时钟,要求可以用LED显示时、分、秒的数值;可以用按键进行调时、调分;可根据设定的作息时间
按时输出警示信号。
1、基本任务要求:
(1)、时间走时准确,误差不得超过1%。
(2)、若最高位为0,高位能灭0显示。
2、增强型任务要求:
(1)、仿照电子表的校时功能,校时修改时,被修改位能闪烁显示,按键要灵敏。
(2)、准点报时能实现.
三、实验电路设计与连线
1、实验器件
4×共阳数码管、4×74LS164锁存器、80C51芯片、键盘、喇叭
2、实验器件电路图
(1)、静态显示电路
(2)、键盘电路,把键盘旁边的SW9上的短路片连接到下边2个脚可构成独立键盘这四个键分别为P1.4-P1.7。
(3)、报警喇叭电路采用如下图电路,可用单片机的P1口或P3口的空闲位用导线连接到FMQ端,采用输出高电平、低电平控制喇叭的报警与不报警,通过改变延时时间来实现报警声音和节奏。
四、编程思路与资源分配
1.1、时间显示
由单片机内部的定时/计数器T0实现计时功能(晶振为24MHZ)。用4个数码管静态扫描方式显示时钟时间。显示时、分的BCD码值。
1.2、时间的调节
P1.4、P1.5分别与按键K1、K2相连;K1按键每按一次,选中要修改的键闪烁指示;再按K2键,则自加一。
1.3、闹钟的调节
P1.6、P1.7分别于按键K3、K4相连;K3键按下,进入闹钟界面,K3按键每按一次,选中要修改的键闪烁指示;再按K4键,则自加一。
五、程序各模块
图
六、实验调试与结果分析
程序运行后,走时、秒闪、修改、定时闹钟功能都能实现。运行10分钟后与实际时间相差2秒左右,误差为0.33%;大致可以满足实验要求,但拿到现实生活中还是一个非常大的误差;还可以再修改一下部分的延时程序以减少误差。
七、实验
通过此次设计性实验,掌握了用串行口驱动四位数码管显示2组不同数据的方法;对逢六十进一、按键校正、定时闹铃的编程方法有了更深步的理解,动手能力得到了极大的提高!
八、实验程序清单
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TEX
;定时计数中断0
ORG 0100H
MAIN:
MOV R2,#20H
;主函数
CLR C
SETB P1.2 ;报警位置高电平
MOV 30H,#00H
;秒单元
MOV 31H,#00H
;分单元
MOV 32H,#00H
;时单元
MOV 33H,#00H
MOV 34H,#00H
MOV TMOD,#01H
;定时计数0
MOV
SCON,#00H
;串行口方式0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
MOV IE,#82H
SJMP $
TEX: JB
P1.6,FH3
;报警位判断
JNB
P1.6,$
;闹钟位闪
ACALL
FYSBCD1
;闹钟BCD码转换子程序
ACALL
DISP1
;闹钟显示子程序
ACALL
KEY1
;闹钟按键子程序
ACALL FYSBCD1
ACALL
DISP1
ACALL
DELY1
;延时子程序
FH3:
JB
P1.4,FH2
;修改位判定
JNB
P1.4,$
;修改位位闪
ACALL
FYSBCD
;修改位BCD码转换子程序
ACALL
DISP
;修改位显示子程序
ACALL
KEY
;修改位按键子程序
ACALL
FYSBCD
ACALL
DISP
ACALL
DELY1
FH2: MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R2,FH
MOV R2,#20H
ACALL FYSBCD
ACALL MS
;秒闪子程序
ACALL DELAY
;延时子程序
ACALL FYSBCD
ACALL BJ
;报警判断子程序
MOV A,30H
ADD A,#01
MOV 30H,A
CJNE A,#60,FH1
;判断秒是否超过60
MOV 30H,#00H
MOV A,31H
ADD A,#01
MOV 31H,A
CJNE A,#60,FH1
;判断分是否超过60
MOV 31H,#00H
MOV A,32H
ADD A,#01
MOV 32H,A
CJNE A,#24,FH1
;判断时是否超过24
MOV 32H,#00H
FH1: ACALL FYSBCD
;调用BCD码转换子程序
ACALL DISP
;调用显示子程序
FH: POP ACC
POP PSW
RETI
FYSBCD: MOV R3,#2
;BCD码转换子程序
MOV R0,#31H
MOV R1,#43H
LP: MOV A,@R0
MOV B,#10
DIV AB
MOV @R1,B
DEC R1
MOV @R1,A
INC R0
DEC R1
DJNZ R3,LP
RET
FYSBCD1:MOV R3,#2
;闹钟BCD码转换子程序
MOV R0,#33H
MOV R1,#48H
LP6: MOV A,@R0
MOV B,#10
DIV AB
MOV @R1,B
DEC R1
MOV @R1,A
INC R0
DEC R1
DJNZ R3,LP6
RET
MS: MOV DPTR,#TAB
;秒闪子程序
MOV R1,#40H
MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
MOV A,@R1
MOVC A,@A+DPTR
MOV ACC.0,C
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
CPL C
JNB TI,$
CLR TI
INC R1
MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
RET
DISP: MOV DPTR,#TAB
;显示子程序
MOV R1,#40H
LP1: MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
CJNE R1,#44H,LP1
RET
DISP1: MOV DPTR,#TAB
;闹钟显示子程序
MOV R1,#48H
LP5: MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
DEC R1
CJNE R1,#44H,LP5
RET
DELAY:MOV 60H,#00
;延时1子程序
MOV 62H,#100
LP2:
MOV 61H,#00
DJNZ 61H,$
DJNZ 61H,$
DJNZ 61H,$
DJNZ 60H,LP2
RET
DELY:
MOV
R4,#100
;延时2子程序
D0
:
MOV
R5,#200
DJNZ
R5,$
DJNZ
R4,D0
RET
DELY1:
MOV
R4,#5
;延时3子程序
D1:
MOV
R5,#100
D2:
MOV
R6,#200
DJNZ
R6,$
DJNZ
R5,D2
DJNZ
R4,D1
RET
KEY1:
MOV
47H,#0AH
;闹钟按键子程序
MOV
48H,#0AH
ACALL
DISP1
ACALL
DELY1
JB
P1.7,NX11
ACALL
DELY
JNB
P1.7,$
INC
33H
MOV
A,33H
CJNE
A,#60,NX11
MOV
33H,#00H
NX11:
ACALL
FYSBCD1
ACALL
DISP1
ACALL
DELAY
JNB
P1.6,DFZ1
SJMP
KEY1
DFZ1:
ACALL
DELY
JNB
P1.6,$
DF11:
MOV
46H,#0AH
MOV
45H,#0AH
ACALL
DISP1
ACALL
DELY1
JB
P1.7,NX22
ACALL
DELY
JNB
P1.7,$
INC
34H
MOV
A,34H
CJNE
A,#24,NX22
MOV
34H,#00H
NX22:
ACALL
FYSBCD1
ACALL
DISP1
ACALL
DELAY
JNB
P1.6,DSFH1
SJMP
DF11
DSFH1:
ACALL
DELY
JNB
P1.6,$
RET
BJ: MOV A,40H
;报警判断子程序
CJNE A,45H,LM
MOV A,41H
CJNE A,46H,LM
MOV A,42H
CJNE A,47H,LM
MOV A,43H
CJNE A,48H,LM
CLR P1.2
LM: RET
KEY:
MOV
42H,#0AH
;修改子程序
MOV
43H,#0AH
ACALL
DISP
ACALL
DELY1
JB
P1.5,NX1
ACALL
DELY
JNB
P1.5,$
INC
31H
MOV
A,31H
CJNE
A,#60,NX1
MOV
31H,#00H
NX1:
ACALL
FYSBCD
ACALL
DISP
ACALL
DELAY
JNB
P1.4,DFZ
SJMP
KEY
DFZ:
ACALL
DELY
JNB
P1.4,$
DF1:
MOV
41H,#0AH
MOV
40H,#0AH
ACALL
DISP
ACALL
DELY1
JB
P1.5,NX2
ACALL
DELY
JNB
P1.5,$
INC
32H
MOV
A,32H
CJNE
A,#24,NX2
MOV
32H,#00H
NX2:
ACALL
FYSBCD
ACALL
DISP
ACALL
DELAY
JNB
P1.4,DSFH
SJMP
DF1
DSFH:
ACALL
DELY
JNB
P1.4,$
RET
TAB:
DB 09H,7DH,07H,15H,71H,91H,81H,3DH,01H,11H,0FFH
END