单片机AT89C51做秒计时器 哪位大神救个急啊
(一)功能简述
通过单片机系统实现秒表计时功能,可以进行暂停计时、恢复计时、设定时间和清零等操作。
(二)设计要求
系统上电,数码管显示“99”.
每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。
设置按键S13,当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢计时。
当停止计时时,按下S14键,可以设置秒数,按键S1-S10分别对应数字0-9;先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。按下S13键启动计时。
设置按键S15,当S15按下时,数码管显示为“99”,秒表从新开始计时。
考试过程中,应使用硬件平台指定的资源进行设计。
(三)设计文档
系统示意图和程序流程图
电路原理图
源程序 展开
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#9
CLR 00H
CLR 01H
LOOP:
JB P1.0,LP01
JNB P1.0,$
SETB TR0
CLR 01H
SJMP LOOP0
LP01:
JB P1.1,LP02
JNB P1.1,$
SETB 01H
SJMP LOOP0
LP02:
JB P1.2,LOOP0
JNB P1.1,$
CLR TR0
MOV P3,#0FDH
MOV P2,#0
MOV P3,#0FEH
MOV P2,#0
SJMP MAIN
LOOP0:
JB 00H,LOOP1
MOV A,R0
SJMP LOOP2
LOOP1:
MOV A,R1
LOOP2:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R3,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
JB 01H,T0C
INC R2
T0C:
CPL 00H
MOV A,R3
JB 00H,T001
MOV P3,#0FDH
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV P2,A
T002:
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR TR0
RETI
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
END