; 器件:共陽極8段數碼管!89C51!
; 注:控制的數碼管的位上為電位反相!
; 即引腳為高電平時,對應的位碼會亮!
; 我是才學單片機的1
; 有什么不足的請大家指教,謝謝!
; 希望與單片機初學者一起學習1
;P2段碼,p1位碼
p3.3,p3.4,p3.5按鍵
ds1302 :p3.6 p3.7.p3.8
;2010,1,30
;閆偉東
;QQ:543345617
;EAILL;543345617@QQ.COM
;******************************************************************************
M EQU 50H;秒
S EQU 51H;分
H EQU 52H;小時
Q EQU 53H;計數器20次標志位
KEY_H EQU P3.2;對應按鍵位
KEY_S EQU P3.3;
KEY_M EQU P3.4;
CTH EQU (65336-50000)/256;設置計時器初始值50MS
CTL EQU (65336-50000) MOD 256;
ORG 0000H
JMP START
ORG 000BH
JMP TIME
START: MOV SP,#40H;
MOV DPTR,#ABC
MOV M,#00H
MOV S,#00H
MOV H,#00H
MOV Q,#00H
MOV TMOD, #01H;
MOV TH0,#CTH;初始指針
MOV TL0,#CTL
SETB EA;開中斷
SETB ET0
SETB TR0
;***************主程序開始**************************
LOOP: LCALL DISPLAY
JNB KEY_M,K1
JNB KEY_S,K2
JNB KEY_H,K3
JMP LOOP
;*************以下按鍵程序**************************
K1: CALL DELAY
JB KEY_M,LOOP
INC M
MOV A,M
CJNE A,#60,D1
MOV M,#00H
JMP LOOP
K2: CALL DELAY
JB KEY_S,LOOP
INC S
MOV A,S
CJNE A,#60,D2
MOV S,#00H
JMP LOOP
K3: CALL DELAY
JB KEY_H,LOOP
INC H
MOV A,H
CJNE A,#24,D2
MOV H,#00H
JMP LOOP
;*************連續按鍵程序*************************
D1: CALL DISPLAY
CALL DELAY_1
JB KEY_S,LOOP
JMP K1
D2: CALL DISPLAY
CALL DELAY_1
JB KEY_M,LOOP
JMP K1
D3: CALL DISPLAY
CALL DELAY_1
JB KEY_H,LOOP
JMP K1
;*************以下計數器中斷程序**************************
TIME: MOV TH0,#CTH;初始指針
MOV TL0,#CTL
INC Q
MOV A,Q
CJNE A,#20,TIME_2;
MOV Q,#00H
INC M
MOV A,M
CJNE A,#60,TIME_2
MOV M,#00H
INC S
MOV A,S
CJNE A,#60,TIME_2;
MOV S,#00H
INC H
MOV A,H
CJNE A,#24,TIME_2;
MOV H,#00H
MOV M,#00H
MOV S,#00H
MOV Q,#00H
TIME_2: RETI
;****************以下顯示程序****************************
DISPLAY: MOV A,M
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P2,A
SETB P1.1
CALL DELAY
CLR P1.1;@@@@@@@@@秒十位
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
SETB P1.0
CALL DELAY
CLR P1.0;@@@@@@@@@@@@秒個位
MOV P2,#0BFH
SETB P1.2
CALL DELAY
CLR P1.2;@@@@@@@@@222分秒之間橫杠
MOV A,S
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P2,A
SETB P1.4
CALL DELAY
CLR P1.4;@@@@@@@@@@分十位
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
SETB P1.3
CALL DELAY
CLR P1.3;@@@@@@@@@@@@分個位
MOV P2,#0BFH
SETB P1.5
CALL DELAY
CLR P1.5;@@@@@@@@@@分時橫杠
MOV A,H
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P2,A
SETB P1.7
CALL DELAY
CLR P1.7;@@@@@@@@@@@時十位
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
SETB P1.6
CALL DELAY
CLR P1.6
RET
DELAY: MOV R5,#5
N1: MOV R4,#250
DJNZ R4,$
DJNZ R5,N1
RET
DELAY_1: MOV R5,#5
F1: MOV R4,#40
F2: MOV R3,#250
DJNZ R3,$
DJNZ R4,F2
DJNZ R5,F1
RET
ABC: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
;***************************************************
;經過調試后發現有很多不足:
;最大的缺陷是精度不夠!
;可能必須用時鐘芯片才行吧,
; 2010.1.31.

