; 器件:共阳极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.