at89c51实现的数字钟.doc
文本预览下载声明
ALB EQU 20H.0
S_SET BIT P1.0;秒键
M_SET BIT P1.1;分键
H_SET BIT P1.2;时键
T_SET BIT P1.3;设定时间键
A_SET BIT P1.4;确认键键
AM_SET BIT P1.5;闹铃设定键
SPK BIT P1.6
SECOND EQU 30H
MINUTE EQU 31H
HOUR EQU 32H
TCNT EQU 34H
HH EQU 35H
MM EQU 36H
SS EQU 37H
ORG 00H
JMP START
ORG 0BH
JMP INT_T0
START:
CLR ALB
MOV DPTR,#TABLE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
LCALL INIT
LCALL BZ
LCALL BZ
LCALL BZ
;---------------判断是否有键按下----
LOOP:
ACALL DISPLAY
ACALL TIME_PR0
ACALL DISPLAY
JB T_SET,L2
ACALL DELAY
JNB T_SET,L1
JMP LOOP
L1: ACALL DISPLAY
LCALL SET_TIME
JMP LOOP
L2:
JB AM_SET,LOOP
ACALL DELAY
JB AM_SET,LOOP
LCALL SET_ALARM
JMP LOOP
;-------------------------------设定表时间---------------------------------------------------------
SET_TIME:
CLR TR0
MOV SECOND,#0
A1:
ACALL DISPLAY ;---秒键
JNB S_SET,S1
JNB M_SET,S2
JNB H_SET,S3
JNB A_SET,S4
LJMP A1
S1:ACALL DELAY;--消除颤抖
JB S_SET,A1
INC SECOND;--秒设定
MOV A,SECOND
CJNE A,#60,J0
MOV SECOND,#0
LJMP K1
S2:ACALL DELAY;------分键
JB M_SET,A1
K1:INC MINUTE
MOV A,MINUTE
CJNE A,#60,J1
MOV MINUTE,#0
JMP K2
S3:ACALL DELAY;-------时键
JB H_SET,A1
K2:INC HOUR
MOV A,HOUR
CJNE A,#24,J2
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
JMP A1
S4:ACALL DELAY
JB A_SET,BACKK
JMP S4
;--------------
J0:JB S_SET,A1;秒设置键松开
ACALL DISPLAY
JMP J0
J1:JB M_SET,A1
ACALL DISPLAY
JMP J1
J2:
JB H_SET,A1
ACALL DISPLAY
JMP J2
BACKK:ACALL BZ
ACALL BZ
ACALL BZ
SETB TR0
RET
;--------------------------中断断服务程序-----------------------------------------------------------
INT_T0:MOV TL0,#0B0H
MOV TH0,#3CH
INC TCNT
MOV A,TCNT
CJNE A,#20,RETURN
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETURN
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETURN
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETURN
显示全部