本人没有实验设备,
用仿真的软件显示很乱。
要求可以显示时,分,秒。刚开始显示全零。
有一个按钮,按一下开始计时,再按一下停止,再按一下清零。
程序如下:
SECOND EQU 30H
MINITUE EQU 31H
HOUR EQU 32H
COUNT EQU 33H
ORG 00H
START: MOV SECOND,#00H ;准备开始全部清零
MOV MINITUE,#00H
MOV HOUR, #00H
MOV COUNT,#00H
AA: MOV A,#24H ;显示00
MOV P2,A
MOV A,#3FH
MOV P0,A
LCALL DELAY1
MOV A,#0DBH ;显示--
MOV P2,A
MOV A,#40H
MOV P0,A
LCALL DELAY1
MOV A,P3 ;判断是否开始计数?
LCALL DELAY2
JB ACC.5,AA
MOV TMOD,#01H ;开始计数
MOV TH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
SETB TR0
DISP: MOV A,SECOND
MOV B,#10
DIV AB
MOV DPTR,#TABLE ;显示秒数的十位,并存于R0
MOVC A,@A+DPTR
MOV P0,A
MOV R0,A
MOV A,#0FDH
MOV P2,A
LCALL DELAY1
MOV A,B ;显示秒数的个位,并存于R1
MOVC A,@A+DPTR
MOV P0,A
MOV R1,A
MOV A,#0FEH
MOV P2,A
LCALL DELAY1
MOV A,#0DBH ;显示--
MOV P2,A
MOV A,#40H
MOV P0,A
LCALL DELAY1
MOV A,MINITUE
MOV B,#10
DIV AB
MOV DPTR,#TABLE ;显示分数的十位,并存于R2
MOVC A,@A+DPTR
MOV P0,A
MOV R2,A
MOV A,#0EFH
MOV P2,A
LCALL DELAY1
MOV A,B
MOVC A,@A+DPTR ;显示分数的个位,并存于R3
MOV P0,A
MOV R3,A
MOV A,#0F7H
MOV P2,A
LCALL DELAY1
MOV A,#0DBH ;显示--
MOV P2,A
MOV A,#40H
MOV P0,A
LCALL DELAY1
MOV A,HOUR
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR ;显示时数的十位,并存于R4
MOV P0,A
MOV R4,A
MOV A,#07FH
MOV P2,A
LCALL DELAY1
MOV A,B
MOVC A,@A+DPTR ;显示时数的个位,并存于R5
MOV P0,A
MOV R5,A
MOV A,#0BFH
MOV P2,A
LCALL DELAY1
MOV A,P3 ;判断是否停止计数?
LCALL DELAY2
JNB ACC.5,EE
SJMP WAIT
EE: LJMP CC
WAIT: JNB TF0,FF
SJMP GG
FF: AJMP DISP
GG: CLR TF0
MOV TH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
INC COUNT
MOV A,COUNT
CJNE A,#20,NEXT1
MOV COUNT,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,NEXT2
MOV SECOND,#00H
INC MINITUE
MOV A,MINITUE
CJNE A,#60,NEXT2
MOV MINITUE,#00H
INC HOUR
MOV A,HOUR
CJNE A,#24,NEXT2
LJMP START
NEXT2: LJMP DISP
NEXT1: LJMP WAIT
CC: MOV A,#0FDH ;显示秒数的十位
MOV P1,A
MOV P0,R0
LCALL DELAY1
MOV A,#0FEH ;显示秒数的个位
MOV P1,A
MOV P0,R1
LCALL DELAY1
MOV A,#0DBH ;显示--
MOV P2,A
MOV A,#40H
MOV P0,A
LCALL DELAY1
MOV A,#0EFH ;显示分数的十位
MOV P1,A
MOV P0,R2
LCALL DELAY1
MOV A,#0F7H ;显示分数的个位
MOV P1,A
MOV P0,R3
LCALL DELAY1
MOV A,#0DBH ;显示--
MOV P2,A
MOV A,#40H
MOV P0,A
LCALL DELAY1
MOV A,#07FH ;显示时数的十位
MOV P1,A
MOV P0,R4
LCALL DELAY1
MOV A,#0BFH ;显示时数的个位
MOV P1,A
MOV P0,R5
LCALL DELAY1
MOV A,P3 ; 判断是否清零?
LCALL DELAY2
JNB ACC.5,DD
SJMP CC
DD: LJMP START
DELAY1: MOV R2,#10 ;延时5MS
D1: MOV R3,128
DJNZ R3,$
DJNZ R2,D1
RET
DELAY2: MOV R4,#20 ;延时10MS
D2: MOV R5,#128
DJNZ R5,$
DJNZ R4,D2
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END