LED_BIT_1 EQU 30H ; 存放8位数码管的段码
LED_BIT_2 EQU 31H
LED_BIT_3 EQU 32H
LED_BIT_4 EQU 33H
LED_BIT_5 EQU 34H
LED_BIT_6 EQU 35H
LED_BIT_7 EQU 36H
LED_BIT_8 EQU 37H ; 存放初始密码
SECOND EQU 60H
MINUTE EQU 61H
HOUR EQU 62H
TCNT EQU 63H
ORG 00H ;初始化程序 ,设置初始密码
SJMP START
ORG 0BH
LJMP INT_T0
START:
MOV DPTR,#TABLE
MOV HOUR,#0
MOV MINUTE,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#03ch ;定时50毫秒
MOV TL0,#03ch
MOV IE,#082H
SETB TR0
MOV LED_BIT_1,#00H ;段码存储区清0
MOV LED_BIT_2,#00H
MOV LED_BIT_3,#00H
MOV LED_BIT_4,#00H
MOV LED_BIT_5,#00H
MOV LED_BIT_6,#00H
MOV LED_BIT_7,#79H
MOV LED_BIT_8,#73H
MOV TMOD,#01H
MOV TH0,#0fdh
MOV TL0,#0fdh
MOV IE,#82H
A1:
LCALL DISPLAY ;调用时间显示
JNB P1.0,S1
JNB P1.1,S2
JNB P1.2,S3
JNB P1.3,S4
LJMP A1
S1: LCALL DLY_S ;去抖动
JB P1.0,A1
INC HOUR ;秒值加1
MOV A, HOUR
CJNE A,#24,J00 ;判断是否加到60秒
MOV HOUR,#0
LJMP A1
S2: LCALL DLY_S
JB P1.1,A1
K01: DEC HOUR ;SHI-
MOV A,HOUR
CJNE A,#0,J01 ;判断是否-0分
MOV HOUR,#24
LJMP A1
S3: LCALL DLY_S
JB P1.2,A1
K02: INC MINUTE ;小时值加1
MOV A,MINUTE
CJNE A,#60,J02 ;判断是否加到24小时
MOV MINUTE,#0
LJMP A1
S4: LCALL DLY_S
JB P1.3,A1
K03: DEC MINUTE ;小时值加1
MOV A,MINUTE
CJNE A,#0,J03 ;判断是否加到24小时
MOV MINUTE,#59
LJMP A1
J00: JB P1.0,A1 ;等待按键抬起
LCALL DISPLAY
SJMP J00
J01: JB P1.1,A1
LCALL DISPLAY
SJMP J01
J02: JB P1.2,A1
LCALL DISPLAY
SJMP J02
J03: JB P1.3,A1
LCALL DISPLAY
SJMP J03
INT_T0: MOV TH0,#3ch ;定时器中断服务程序
MOV TL0,#3ch ;对秒,分钟和小时的计数
INC TCNT
MOV A,TCNT
CJNE A,#20,RETUNE ;计时1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3闹铃设置子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3
DISPLAY: ;显示时间控制子程序
MOV A,SECOND ;显示秒
MOV B,#10
DIV AB
CLR P2.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.6
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.4
CLR P2.5
MOV P0,#40H ;显示分隔符
LCALL DLY_S
SETB P2.5
MOV A,MINUTE ;显示分钟
MOV B,#10
DIV AB
CLR P2.2
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.2
MOV A,B
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.3
MOV A,HOUR ;显示小时
MOV B,#10
DIV AB
CLR P2.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.0
MOV A,B
CLR P2.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
;*****************************************************秒表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延时
DLY_S: MOV R6,#5 ;延时程序
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
RET
DLY_L: MOV R5,#50
D2: MOV R6,#100
D3: MOV R7,#100
DJNZ R7,$
DJNZ R6,D3
DJNZ R5,D2
RET
END