MENU BIT P3.4
UPO BIT P3.5
;DOWNO BIT P3.7
JDQ BIT P3.7
ORG 00H
SJMP MAIN ;程序開始
ORG 0BH ;T0入口地址
JMP INTT0
ORG 1BH
JMP INTT1
ORG 30H
;------------------------------------------------
MAIN: MOV SP,#70H ;堆鍵地址設置
MOV R1,#60H ;清除首址
MOV R7,#16 ;清除單元數
MOV P3,#0FFH
SETB JDQ
CLEARH: MOV @R1,#00H
INC R1
DJNZ R7,CLEARH
;--------------------------------------------------
MOV R2,#00H ;60S計數單元
MOV R3,#00H ;60M計數單元
MOV R4,#14H ;1S中斷20次
MOV 22H,#10 ;0.5S中斷10次
MOV 29H,#00H ;MENU鍵按鍵次數
MOV 20H,#00H ;0.5S標志位
MOV 24H,#00H ;24小時到標志單元
MOV 6CH,#0BH ;熄滅符
MOV TMOD,#11H
MOV TL0,#0B0H
MOV TH0,#3CH
MOV TL1,#0B0H
MOV TH1,#3CH
SETB EA
SETB ET0
SETB ET1
SETB TR0
CLR TR1
JMP MENUD1
;-----------------------------
START1: CALL DISP
JNB MENU,MENU0 ;時間調整按鍵
SJMP START1
;------------------------------------------
MENU0: CALL DISP
JNB MENU,MENU0
NEXT: MOV R0,#68H ;調時單元
MOV 29H,#00H
CLR TR0
SETB TR1
NEXT1: CALL DISP
JNB MENU,MENUD1
JNB UPO,UP
;JNB DOWNO,DOWN
SJMP NEXT1
MENUD1: MOV R0,#68H ;調時單元
;MOV 29H,#00H
CLR TR0
SETB TR1
CALL DISP
JNB MENU,MENUD1
INC R0
INC R0
INC 29H ;按“MENU”鍵29H單元加 1
SETB 20H.1
JNB MENU,MENUD1
JNB UPO,UP
;JNB DOWNO,DOWN
MOV A,29H
CJNE A,#02H,NEXT1 ;MENU鍵按下3次退出調時程序,不到3次繼續
MOV 29H,#00H
SETB TR0
CLR TR1
CLR JDQ
MOV R2,66H
CLR 20H.2
CLR 20H.1
MOV 60H,66H
MOV 61H,67H
MOV 62H,68H
MOV 63H,69H
JMP START1
;------------------------------------------
UP: CALL DISP
JNB UPO,UP
UP2: CJNE R0,#68H,UP0
CALL ADDSS
UP3: CALL DISP
JNB MENU,MENUD1
JNB UPO,UP
;JNB DOWNO,DOWN
SJMP UP3
UP0: CJNE R0,#6AH,UP1
CALL ADDMM1
UP1: SJMP UP3
;---------------------------------------------
DOWN: CALL DISP
;JNB DOWNO,DOWN
CJNE @R0,#00H,DOWN0
MOV @R0,#0AH
DOWN0: DEC @R0
MOV 60H,66H
MOV 61H,67H
MOV 62H,68H
MOV 63H,69H
MOV 64H,6AH
MOV 65H,6BH
DOWN1: CALL DISP
JNB MENU,MENUD1
JNB UPO,UP
;JNB DOWNO,DOWN
JMP DOWN1
;----------------------------------------------------
DISP: MOV R5,#04H ;數碼管掃描位數
MOV R1,#60H ;顯示首地址
;MOV R5,#11110111B ;數碼管位掃描碼
PLAY: CJNE R5,#04H,D3
CLR P3.3
D3: CJNE R5,#03H,D4
CLR P3.2
D4: CJNE R5,#02H,D5
CLR P3.1
D5: CJNE R5,#01H,D6
CLR P3.0
;MOV A,R5
;MOV P3,A
D6: MOV A,@R1
JNB 20H.0,D1
MOV DPTR,#TAB0
SJMP D2
D1: MOV DPTR,#TAB1
D2: MOVC A,@A+DPTR
MOV P1,A
CALL DL1MS
INC R1
SETB P3.3
SETB P3.2
SETB P3.1
SETB P3.0
;MOV A,R5
;RR A
;MOV R5,A
DJNZ R5,PLAY
RET
;----------------------------------------------------
INTT1: PUSH ACC ;調時閃爍中斷程序
PUSH PSW
CLR TF1
MOV TL1,#0B0H
MOV TH1,#3CH
SETB TR1
DJNZ 22H,T1OUT
CPL 20H.2
MOV 22H,#10
T1OUT:
JB 20H.2,FLASH1
MOV 60H,66H
MOV 61H,67H
MOV 62H,68H
MOV 63H,69H
D1OUT: POP PSW
POP ACC
RETI
FLASH1: JB 20H.1,FLASH2
MOV 60H,6CH
MOV 61H,6CH
MOV 62H,68H
MOV 63H,69H
AJMP D1OUT
FLASH2: MOV 60H,66H
MOV 61H,67H
MOV 62H,6CH
MOV 63H,6CH
AJMP D1OUT
;====================================
INTT0: PUSH ACC ;秒中斷程序
PUSH PSW
CLR TF0
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
DJNZ R4,T0OUT
CALL DECSS;ADDSS
T0OUT: CJNE R4,#10,D0OUT
CPL 20H.0
D0OUT: POP PSW
POP ACC
RETI
JIAYIOUT:RET
;===================================================
ADDSS: CPL 20H.0
MOV R4,#14H ;50毫秒中斷20次
INC 66H
INC R2 ;60S計數寄存器
MOV 60H,66H
CJNE R2,#60,ADDSS1
JMP ADDMM
ADDSS1: MOV A,66H ;秒個位傳入顯示
CJNE A,#0AH,JIAYIOUT ;不相等轉移
;----------------------------------------------------------
MOV 66H,#00H ;---------------------------------------------------------------------------
INC 67H
MOV 61H,67H ;秒十位傳入顯示
RET
;-----------------------------------------------------------
ADDMM: MOV 66H,#00H ;秒個位清零
MOV 60H,66H
MOV 67H,#00H ;秒十位清零
MOV 61H,67H
MOV R2,#00H ;秒計數寄存器清零
;--------------------------------------------
ADDMM1: INC 68H
INC R3 ;60分計數寄存器
MOV 62H,68H ;分個位傳入顯示
CJNE R3,#60,ADM1
JMP start1
ADM1: MOV A,68H
CJNE A,#0AH,JIAYIOUT
;-------------------------------------
MOV 68H,#00H
INC 69H
MOV 63H,69H ;分十位傳入顯示
RET
;----------------------------------------------------------------------------
DECOUT: CJNE R2,#00H,A1
MOV R2,66H
DEC 67H
MOV 61H,67H
RET
A1: DEC 66H
DEC R2
MOV 60H,66H
RET
DECSS: CPL 20H.0
MOV R4,#14H ;50毫秒中斷20次
MOV A,66H
CJNE A,#00H,DECOUT
MOV A,67H
CJNE A,#00H,DECSS1
MOV A,68H
CJNE A,#00H,DECSS2
MOV A,69H
CJNE A,#00H,DECMM0
CLR TR0
;SETB TR1
SETB JDQ
RET
;JMP START1
;SETB TRO
DECSS1: MOV 66H,#9 ;秒個位從9-0開始
MOV 60H,66H
JMP DECOUT
DECSS2: MOV 66H,#9
MOV 60H,66H
MOV 67H,#6
MOV 61H,67H
DEC 68H
MOV 62H,68H
JMP DECOUT
;-----------------------------
DECMM0: MOV 66H,#9
MOV 60H,66H
MOV 67H,#6
MOV 61H,67H
MOV 68H,#9
MOV 62H,68H
DEC 69H
MOV 63H,69H
JMP DECOUT
;------------------------------------------------------------------------------
DL1MS: MOV 27H,#10 ;2MS
DL2: MOV 28H,#200
DJNZ 28H,$
DJNZ 27H,DL2
RET
;-------0---1---2---3---4---5---6---7---8---9---0--熄滅符------------
TAB0:DB 02H,9EH,24H,0CH,98H,48H,40H,1EH,00H,08H,02H,0FFH;--“:”--亮
TAB1:DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,03H,0FFH;--“:”--滅
END
|