|
STRT EQU P2.6
STP EQU P2.7
CLRR EQU P3.0
SEC EQU P3.5
MIN EQU P3.6
HOUR EQU P3.7
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP T0INT
ORG 001BH
AJMP T1INT
ORG 0030H
MAIN:
CPL P1.0
MOV SP,#60H
MOV R4,#20
MOV TMOD,#11H
MOV TH0,#03CH ;#9EH 12M晶振時(shí)定時(shí)初值取#3CB0H,還可細(xì)調(diào),如 TL=#0B7H,可以更準(zhǔn)
MOV TL0,#0B0H ;#58H
MOV TH1,#0FEH
MOV TL1,#0CH
SETB EA
SETB ET0
SETB ET1
;MOV 28H,#12
kS: LCALL DISP ;秒調(diào)整按鍵
JB SEC,KM
LCALL DISP
JNB SEC,$-3
AJMP SINC
kM: JB MIN,KH ;分調(diào)整按鍵
LCALL DISP
JNB MIN,$-3
AJMP MINC
KH: JB HOUR,K1 ;時(shí)調(diào)整按鍵
LCALL DISP
JNB HOUR,$-3
AJMP HINC
SINC: INC 26H ;秒調(diào)整
MOV A,26H
CJNE A,#60,SINC0
MOV 26H,#0
SINC0: AJMP KS
MINC: INC 27H ;分調(diào)整
MOV A,27H
CJNE A,#60,MINC0
MOV 27H,#0
MINC0: AJMP KM
HINC: INC 28H ;時(shí)調(diào)整
MOV A,28H
CJNE A,#24,HINC0
MOV 28H,#0
HINC0: AJMP KH
k1: LCALL DISP ;開(kāi)始鍵
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START
k2: JB STP,K3 ;暫停鍵
LCALL DISP
JNB STP,STOP
K3: JB CLRR,KS
LCALL DISP
JNB CLRR,CLEAR ;清零鍵
AJMP KS
START: SETB TR0 ;開(kāi)始
SETB 7DH ;7DH為開(kāi)始鍵按下標(biāo)志,此作為允許鬧鈴標(biāo)志
AJMP K1
STOP: CLR TR0 ;暫停
CPL P1.0
AJMP K2
CLEAR: CLR TR0 ;清零
MOV A,#0
MOV 26H,A
MOV 27H,A
MOV 28H,A
AJMP KS
DISP:
MOV A,26H
MOV B,#10
DIV AB
MOV 20H,B ;余數(shù)(秒個(gè)位數(shù))
MOV 21H,A ;商(秒十位數(shù))
MOV A,27H
MOV B,#10
DIV AB
MOV 22H,B ;余數(shù)(分個(gè)位數(shù))
MOV 23H,A ;商(分十位數(shù))
MOV A,28H
MOV B,#10
DIV AB
MOV 24H,B ;余數(shù)(時(shí)個(gè)位數(shù))
MOV 25H,A ;商(時(shí)十位數(shù))
MOV A,20H ;秒個(gè)位
ACALL SEG7
MOV P0,A
CLR P2.0
ACALL DLY
SETB P2.0
MOV A,21H ;秒十位
ACALL SEG7
MOV P0,A
CLR P2.1
ACALL DLY
SETB P2.1
MOV A,22H ;分個(gè)位
ACALL SEG7
MOV P0,A
SETB P0.7
CLR P2.2
ACALL DLY
SETB P2.2
MOV A,23H ;分十位
ACALL SEG7
MOV P0,A
CLR P2.3
ACALL DLY
SETB P2.3
MOV A,24H ;時(shí)個(gè)位
ACALL SEG7
MOV P0,A
SETB P0.7
CLR P2.4
ACALL DLY
SETB P2.4
MOV A,25H ;時(shí)十位
ACALL SEG7
MOV P0,A
CLR P2.5
ACALL DLY
SETB P2.5
RET
ALARM:
JNB 7DH,ALRT
MOV A,28H ;比較小時(shí)
CJNE A,#0,RT ;不等返回。 相等,轉(zhuǎn)分鐘比較
MOV A,27H ;比較分鐘
CJNE A,#0,RT
MOV A,26H ;比較秒
CJNE A,#0,RT
SETB TR1
MOV R0,#0 ;鬧鈴時(shí)間到,鬧鈴計(jì)時(shí)清零
ALRT:
RET
RT:
RET
T0INT: MOV TH0,#03CH;#9EH ;定時(shí)中斷子程序。重裝定時(shí)常數(shù)
MOV TL0,#0B0H;#58H
DJNZ R4,T0INTR ;50msX20=1S,未滿20次,跳出中斷子程序
MOV R4,#20
CALL ALARM
DEC 26H ;1S,秒存儲(chǔ)單元內(nèi)數(shù)-1
MOV A,26H
CJNE A,#-1,T0INTR ;未滿0S,跳轉(zhuǎn)
MOV 26H,#59 ;到0S,秒單元回到60
DEC 27H ;分-1
MOV A,27H
CJNE A,#-1,T0INTR
MOV 27H,#59
DEC 28H ;時(shí)-1
MOV A,28H
CJNE A,#-1,T0INTR
MOV 28H,#59
T0INTR: RETI
T1INT:
MOV TH1,#0FEH
MOV TL1,#0CH
CJNE R0,#3,T1RTI ;鬧鈴時(shí)間設(shè)為5秒
CPL P1.0
CLR TR1 ;關(guān)鬧鈴
T1RTI:
RETI
DLY10: MOV R3,#30
D0: ACALL DLY
DJNZ R3,D0
RET
DLY: MOV R7,#2
D1: MOV R6,#40
DJNZ R6,$
DJNZ R7,D1
RET
SEG7:INC A
MOVC A,@A+PC
RET
DB 03FH ;0
DB 006H ;1
DB 05BH ;2 共陰
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 007H ;7
DB 07FH ;8
DB 06FH ;9
END
|
|