;定义地址
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
TCNT EQU 34H
HOURK BIT P3.0;时调整端口
MINITEK BIT P3.1;分调整端口
SECONDK BIT P3.2;秒调整端口
ORG 00H
SJMP START
ORG 0BH
LJMP INT_0
;初始化程序
START: MOV HOUR,#00H
MOV MINITE,#00H
MOV SECOND,#00H
SETB SECONDK
SETB MINITEK
SETB HOURK
MOV TCNT,#00H
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#01H
mov dptr,#0ff23h
mov a,#81h
movx @dptr,a
;开中断
SETB EA
SETB ET0
SETB TR0
;查询外界中断
WT: LCALL DISP
;查询秒按键是否按下
JB SECONDK,NK1
LCALL DELY10MS
JB SECONDK,NK1
INC SECOND
MOV A,SECOND
CJNE A,#60,NS60
MOV SECOND,#00H
NS60:
LCALL DISP
JNB SECONDK,$
;查询分按键是否按下
NK1: JB MINITEK,NK2
LCALL DELY10MS
JB MINITEK,NK2
INC MINITE
MOV A,MINITE
CJNE A,#60,NM60
MOV MINITE,#00H
NM60: LCALL DISP
JNB MINITEK,$
;查询分按键是否按下
NK2: JB HOURK,NK3
LCALL DELY10MS
JB HOURK,NK3
INC HOUR
MOV A,HOUR
CJNE A,#24,NH24
MOV HOUR,#00H
NH24:
LCALL DISP
JNB HOURK,$
NK3: LJMP WT
;显示时钟子程序
DISP:
;秒显示
MOV A,SECOND
MOV B,#0AH
DIV AB
MOV 40H,A
MOV DPTR,#0FF20H
MOV A,#0FDH
MOVX @DPTR,A
MOV DPTR,#TABLE
MOV A,40H
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
LCALL DELAY
MOV DPTR,#0FF20H
MOV A,#0FEH
MOVX @DPTR,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
LCALL DELAY
;分显示
MOV A,MINITE
MOV B,#0AH
DIV AB
MOV 41H,A
MOV DPTR,#0FF20H
MOV A,#0F7H
MOVX @DPTR,A
MOV DPTR,#TABLE
MOV A,41H
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
LCALL DELAY
MOV DPTR,#0FF20H
MOV A,#0FBH
MOVX @DPTR,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ANL A,#7FH ;分和秒之间加点
MOV DPTR,#0FF21H
MOVX @DPTR,A
LCALL DELAY
;时显示
MOV A,HOUR
MOV B,#0AH
DIV AB
MOV 42H,A
MOV DPTR,#0FF20H
MOV A,#0DFH
MOVX @DPTR,A
MOV DPTR,#TABLE
MOV A,42H
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
LCALL DELAY
MOV DPTR,#0FF20H
MOV A,#0EFH
MOVX @DPTR,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ANL A,#7FH ;时和分之间加点
MOV DPTR,#0FF21H
MOVX @DPTR,A
LCALL DELAY
RET
;定时中断子程序
INT_0:
MOV TH0,#4CH
MOV TL0,#01H
INC TCNT
MOV A,TCNT
CJNE A,#14H,RETUNE
INC SECOND
MOV TCNT,#00H
MOV A,SECOND
CJNE A,#3CH,RETUNE
INC MINITE
MOV SECOND,#00H
MOV A,MINITE
CJNE A,#3CH,RETUNE
INC HOUR
MOV MINITE,#00H
MOV A,HOUR
CJNE A,#18H,RETUNE
MOV HOUR,#00H
MOV MINITE,#00H
MOV SECOND,#00H
MOV TCNT,#00H
RETUNE:RETI
;数码管代码段
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH
;选择数码管延时子程序
DELAY: MOV R6,#0AH
D1: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,D1
RET
;按键去抖动子程序
DELY10MS:
MOV R4,#20
D2: MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
END
;外部接线:P3.0接按键开关S1调整时
接按键开关S2调整分 P3.1
;P3.2接拨码开关K1调整秒