源程序
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME
;主程序部分
ORG 0100H
MAIN:MOVSP,#50H
MOV 20H,#00H ;秒鐘
MOV 21H,#00H ;分鐘
MOV 22H,#00H ;小時
MOV 23H,#01H
MOV 24H,#01H
MOV 25H,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
MOV TMOD,#01H ;16位計數(shù)器
MOV TH0,#03CH ;賦計數(shù)初值
MOV TL0,#0B0H
MOV IE,#87H ;允許外部中斷1和外部中斷0和T0溢出中斷
SETB TR0 ;啟動計數(shù)器T0
MOV R2,#14H
MOV P2,#0FFH
LOOP:LCALL DISPLAY1
JB P1.1,LOOP
LCALL SETTIME ;調(diào)用設(shè)定時間程序
LJMP LOOP
DELAY:MOV R4,#030H ;延時時間
DL00:MOV R5,#0FFH
DL11:MOV R6,#9H
DL12:DJNZ R6,DL12
DJNZ R5,DL11
DJNZ R4,DL00
RET
;設(shè)定時間程序
SETTIME:
L0:LCALL DISPLAY1 ;調(diào)用時間允許程序
MM1: JB P1.2,L1
MOV C,P1.2
JC MM1
LCALL DELAY1 ;調(diào)用延時
JC MM1
MSTOP1: MOV C,P1.2
JNC MSTOP1 ;判斷P1.2是否釋放釋放則繼續(xù)
LCALL DELAY1 ;調(diào)用延時
MOV C,P1.2
JNC MSTOP1
INC 22H ;小時增加1
MOV A,22H
CJNE A,#18H,GO12 ;判斷小時是否到24時未到繼續(xù)循環(huán)
MOV 22H,#00H ;小時復(fù)位
MOV 34H,#00H
MOV 35H,#00H
LJMP L0
L1:JBP1.3,L2
MOV C,P1.3
JC L1
LCALL DELAY1 ;延時
JC L1
MSTOP2: MOV C,P1.3
JNC MSTOP2 ;判斷P1.3是否釋放釋放則繼續(xù)
LCALL DELAY1 ;調(diào)用延時
MOV C,P1.3
JNC MSTOP2
INC 21H ;分鐘增加一
MOV A,21H
CJNE A,#3CH,GO11
MOV 21H,#00H ;分鐘復(fù)位
MOV 32H,#00H
MOV 33H,#00H
LJMP L0
GO11:MOV B,#0AH ;將A中的內(nèi)容分成高低兩部分
DIV AB
MOV 32H,B
MOV 33H,A
LJMP L0
GO12: MOV B,#0AH
DIV AB
MOV 34H,B
MOV 35H,A
LJMP L0
L2:JB P1.4,L0
MOV C,P1.4
JC L2
LCALL DELAY1 ;調(diào)用延時
MOV C,P1.4
JC L2
STOP1: MOV C,P1.4 ;判斷按鍵P1.4是否釋放?
JNC STOP1
LCALL DELAY1 ;調(diào)用延時
MOV C,P1.4
JNC STOP1
LJMP LOOP
DELAY1: MOV R4,#14H ;時間延時
DL001: MOV R5,#0FFH
DL111: DJNZ R5,DL111
DJNZ R4,DL001
RET
TIME: PUSH ACC ;現(xiàn)場保護
PUSH PSW
MOV TH0,#03CH ;賦初值
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2,#14H
MOV A,20H
CLR C
INC A ;秒鐘自加1
CJNE A,#3CH,GO1 ;判斷秒鐘是否到60秒?
MOV 20H,#0 ;到60秒復(fù)位
MOV 30H,#0
MOV 31H,#0
MOV A,21H
INC A ;分鐘自加1
CJNE A,#3CH,GO2 ;判斷分鐘是否到60分?
MOV 21H,#0H ;到60分復(fù)位
MOV 32H,#0
MOV 33H,#0
MOV A,22H
INC A ;時鐘自加1
CJNE A,#18H,GO3 ;判斷時鐘是否到24時?
MOV 22H,#00H ;到24時復(fù)位
MOV 34H,#0
MOV 35H,#0
AJMP RET0
GO1: MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
AJMP RET0
GO2: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 33H,A
MOV 32H,B
AJMP RET0
GO3: MOV 22H,A
MOV B,#0AH
DIV AB
MOV 35H,A
MOV 34H,B
AJMPRET0
RET0: POP PSW ;恢復(fù)現(xiàn)場
POP ACC
RETI
;運行部分
DISPLAY1: MOV R0,#30H
MOV R3,#0FEH
MOV A,R3
PLAY1: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH ;送高電平到P2
MOV A,R3
RL A ;
JNB ACC.6,LD1
INC R0
MOV R3,A
LJMP PLAY1 ;調(diào)用查表程序
LD1:RET
;延時時間
DL1: MOV R7,#02H ;延時時間
DL: MOV R6,#020H
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H ;共陰極數(shù)碼管編碼表
DB6DH,7DH,07H,7FH,6FH
END
調(diào)試運行
|