51完整源程序(显示扫描的同时进行按键扫描):
SEC EQU 30H
MIN EQU 31H
HOU EQU 32H
HK BIT P1.5
MK BIT P1.6
SK BIT P1.7
DISPBUF EQU 40H
DISPBIT EQU 48H
T2SCNT EQU 49H
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV SEC,#00H
MOV MIN,#00H
MOV HOU,#12
MOV DISPBIT,#00H
MOV T2SCNT,#00H
LCALL CH_VAL
MOV TMOD,#01H
MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
SETB EA
SETB ET0
SETB TR0
LOOP:
LCALL DISP
NK0: JB SK,NK1
LCALL DELAY10MS
JB SK,NK1
INC SEC
MOV A,SEC
CJNE A,#60,NS60
MOV SEC,#00H
NS60: LCALL DISP
JNB SK,NS60
NK1: JB MK,NK2
LCALL DELAY10MS
JB MK,NK2
INC MIN
MOV A,MIN
CJNE A,#60,NM60
MOV MIN,#00H
NM60: LCALL DISP
JNB MK,NM60
NK2: JB HK,NK3
LCALL DELAY10MS
JB HK,NK3
INC HOU
MOV A,HOU
CJNE A,#24,NH24
MOV HOU,#00H
NH24: LCALL DISP
JNB HK,NH24
NK3:
LJMP LOOP
DELAY10MS:
MOV R6,#3
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP:
MOV A,#DISPBUF
ADD A,DISPBIT
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P3,#0FFH
MOV P2,A
MOV A,DISPBIT
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P3,A
INC DISPBIT
MOV A,DISPBIT
CJNE A,#08H,DISP
MOV DISPBIT,#00H
RET
CH_VAL:
MOV A,#DISPBUF
ADD A,#7
MOV R1,A
MOV A,HOU
MOV B,#10
DIV AB
MOV @R1,A ;47H
DEC R1
MOV A,B
MOV @R1,A ;46H
DEC R1
MOV A,#10 ;显示“-”
MOV @R1,A ;45H
DEC R1
MOV A,MIN
MOV B,#10
DIV AB
MOV @R1,A ;44H
DEC R1
MOV A,B
MOV @R1,A ;43H
DEC R1
MOV A,#10 ;显示“-”
MOV @R1,A ;42H
DEC R1
MOV A,SEC
MOV B,#10
DIV AB
MOV @R1,A ;41H
DEC R1
MOV A,B
MOV @R1,A ;40H
RET
INT_T0:
MOV TH0,(65536-50000)/256
MOV TL0,(65536-50000)MOD 256
INC T2SCNT
MOV A,T2SCNT
CJNE A,#20,DONE
MOV T2SCNT,#00H
INC SEC
MOV A,SEC
CJNE A,#60,NEXT
MOV SEC,#00H
INC MIN
MOV A,MIN
CJNE A,#60,NEXT
MOV MIN,#00H
INC HOU
MOV A,HOU
CJNE A,#24,NEXT
MOV HOU,#00H
NEXT: LCALL CH_VAL
DONE: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
TAB: DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
END