ORG 0H
MOV R0,#20
MOV R1,#0 //Set time value = 0, seconds
MOV R2,#0 //minutes
MOV R3,#0 //hours
ACALL SETDIc m m k n ; fS //initialise{ w w ^ ] ] = the display
MOV TMOD,#0x01
REPEAT: MOV TH0,#0x3C
MOV TL0,#0xB0
SETB TR0
WAIT: JNB TF0,WAIT
CLR TR0
CLR TF0
DJv x . v z ^ y /NZ R0,0 c rREPEAT
MOV TH0,#0x3C
MOV TG R F NL0,#0xB0
SETB TR_ O L q ] a y +0
MOV R0,#19
CPL P2.3 //output every second
ACALL INCT //Increment time
ACALL DIST //Display time
AJMP WAIT
SETDIS: MOV A,#30H //Display initialisation routine
ACALL COMNWRT
ACALL DELAY1
MOV A,#0CH
ACALL COMNWRT
ACALL DELAY1
MOV A,#01
ACALL COMNWRT
ACALL DELAY2
MOV A,#06H
ACALL COMNWRT
ACALL DELAY1
RET
INCT: MOV A,R1 //Update time count routine
//your co? ^ % ; 2 }de here
ADD A,#01H
DA A
MOV R1,A
CJNE A,#60H,INCJ X * N qE
MOV R1,#0
MOV A,R2
ADD A,#1
DA A
MOV R2,A
CJNE A,#60H,! C 6 | @ V xINCE
MOV R2,#0
MOV A,R3
ADD A,#01H
DA A
MOV R3,A
CJNE A,#24H,INCE
MOV RV c s3,#0
INCE: RET
DIST: MOV A,#01 //Up/ H - : i ( B Bdate display routine
ACALL COMNWRT //Reset display
ACALL DELAY2
MOV A,R3 //MSD first
//your code here
SWAP A
ACX i P XALL FUNC1
MOV A,R3
ACALL FUNC1
MOV A,#3AH
ACAk K F aLL DATAWRT
ACALL DELAY1
MOV A,R2
SWAP A
ACALL FUNC1
MOV A,R2
ACALL FUNC1
MOV A,#3AH
ACALL DATAWRT
ACALL DELAY1
MOV A,R1
SWAP A
ACAL. = , W N &L FUNC1
MOV A,R1
ACALL FUNC1
RET
FUNC1:
ANL A,#0FH
ORL A,#30H
ACALL DATAWRT
ACALL DELAY1
RET
COMNWRT:
MOV P0,A
CLR P2.0
C. 1 e E } H D cLR P2.1
SETB P2.2
ACALL DELAY1
CLR P2.2
RET
DATAWRT:
MOV P0,A
SETB P2.0
CLR P2.1
SETB P2.2
ACALL DELAY1
CLR P2.2
RET
DELAY1: MOV R5,7 u x N#30 //Short delay
LP1: DJNZ R5,LP1
RET
DELAY2:c Q f f e MOV R5,#50 //long delaG | H h 2 h :y
HER} y G F w v ? IE2: MOV R4,3 R P S U#50
HERE: DJNZ R4,HERE
DJNZ R5,HERE2
RET
END
发表评论