您的位置首页生活百科

单片机时钟程序 24小时制

单片机时钟程序 24小时制

的有关信息介绍如下:

单片机时钟程序   24小时制

C语言的:#include #includeunsigned char ledbuf[8];code unsigned char ledmap[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //8段显示void delay(unsigned char cnt) { unsigned char i; while(cnt--!=0) for(i=100;i!=0;i--); }#define tick 7554 #define T100us (256-134) unsigned char hour,minute,second,ankey; unsigned int c100us;void sees(){ ledbuf[0]=ledmap[hour/10]; ledbuf[1]=ledmap[hour%10]; ledbuf[2]=0xbf; ledbuf[3]=ledmap[minute/10]; ledbuf[4]=ledmap[minute%10]; ledbuf[5]=0xbf; ledbuf[6]=ledmap[second/10]; ledbuf[7]=ledmap[second%10];}void displayled() { char i; unsigned char pos; pos=0x01; for(i=7;i>=0;i--) { P2=0x255; P0=ledbuf[i]; P2=~pos; delay(2); P2=0x255; pos<<=1; } } void key(){ if(P32==0||P33==0||P35==0) delay(2); if(P32==0||P33==0||P35==0) { if(P32==0) { hour++; if(hour==24) hour=0; while(P32==0) { sees(); displayled(); } } if(P33==0) { minute++; if(minute==60) minute=0; while(P33==0) { sees(); displayled(); } } if(P35==0) { second++; if(second==60) second=0; while(P35==0) { sees(); displayled(); } } } }void t0int()interrupt 1 { c100us--; if(c100us==0) { c100us=tick; second++; if(second==60) { second=0; minute++; if(minute==60) { minute=0; hour++; if(hour==24)hour=0; } } } } void main() { TMOD=0x02; TH0=T100us; TL0=T100us; IE=0x82; hour=0; minute=0; second=0; c100us=tick; TR0=1; while(1) { sees(); displayled(); key(); }}汇编的:ORG 0000HAJMP MAINORG 000BHAJMP TIMEORG 0300HMAIN:MOV P3,#0FFH;MOV 25H,#00H;MOV R0,#40H;MOV 20H,#00H;MOV 21H,#00H;MOV 22H,#00H;MOV 23H,#00H;MOV P2,#0FFHMOV IP,#02H;MOV IE,#82H;MOV TMOD,#01H;MOV TL0,#0B0H;MOV TH0,#3CH;SETB TR0;MOV SP,#50H;NEXT:LCALL DISP;LCALL KEY;JZ NEXT;LCALL ANKEY;SJMP NEXT;NOPNOP;NOP;TIME:PUSH ACC;PUSH PSW;MOV TL0,#0B4H;MOV TH0,#3CH;INC 20H;MOV A,20H;CJNE A,#20,RETI1;MOV 20H,#00H;MOV A,21H;INC A;MOV 21H,A;CJNE A,#3CH,RETI1;MOV 21H,#00H;MOV A,22H;ADD A,#01H;MOV 22H,A;CJNE A,#3CH,RETI1;MOV 22H,#00H;MOV A,23H;ADD A,#01H;MOV 23H,A;CJNE A,#18H,RETI1;MOV 23H,#00H;RETI1:POP PSW;POP ACC;RETI;NOPNOPDISP:MOV A,21H;MOV B,#10;DIV AB;MOV 41H,A;MOV 40H,B;MOV A,22H;MOV B,#10;DIV AB;MOV 43H,A;MOV 42H,B;MOV A,23H;MOV B,#10;DIV AB;MOV 45H,A;MOV 44H,B;MOV R0,#40HLCALL DISP2; 1CLR P2.0;LCALL DELAY;SETB P2.0;INC R0;LCALL DISP2;CLR P2.1;LCALL DELAY;SETB P2.1;MOV P0,#0bfh;CLR P2.2 ;LCALL DELAY;SETB P2.2;INC R0;LCALL DISP2;CLR P2.3;LCALL DELAY;SETB P2.3;INC R0;LCALL DISP2;CLR P2.4;LCALL DELAY;SETB P2.4;MOV P0,#0BFH;CLR P2.5;LCALL DELAY;SETB P2.5;INC R0;LCALL DISP2;CLR P2.6;LCALL DELAY;SETB P2.6;INC R0;LCALL DISP2;CLR P2.7;LCALL DELAY;SETB P2.7;MOV R0,#40H;DISP2:MOV DPTR,#TABLE;MOV A,@R0;MOVC A,@A+DPTR;MOV P0,A;RETDELAY:MOV R6,#255;D2:DJNZ R6,D2;RET;TABLE:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h; 0 1 2 3 4 5 6 7 8 9;按键判断程序KEY:MOV A,P3;CPL A;ANL A,#3CH;JZ RETX ;无键按下则返回LCALL DISP ;LCALL DELAY;MOV A,P3;CPL A;ANL A,#3CH;JZ RETX ;无键按下则返回MOV R6,A ;将键值存入R6。LOOP2: LCALL DISP ;MOV A,P3;CPL A;ANL A,#3CH;JNZ LOOP2 ;等待键释放MOV A,R6;RETX: MOV P3,#0FFH;RET;NOPNOP;按键处理子程序ANKEY: CLR EA;关中断LX: MOV A,R6;JB ACC.2,L1;是功能键转L1JB ACC.3,L2;是确认键转L2JB ACC.4,L3;是减1键转L3JNB ACC.5,L12;不是增1键,转L12JB 2BH.4,L6;判断使哪一位(时、分、秒)的值加1JB 2DH.4,L8;JB 2FH.4,L9;L12: LCALL DISP; LCALL DISP;LCALL KEY;判断有无键按下。JZ L12;LJMP LX;L2: MOV 25H,#00H ;确认键处理程序CLR 2BH.4;CLR 2DH.4;CLR 2FH.4;SETB EA;RET;L3: JB 2BH.4,L61;减一键处理程序JB 2DH.4,L81;JB 2FH.4,L91;AJMP L12;L1: MOV A,25H;功能键处理程序JZ LB1;JB ACC.0,LB2;JB ACC.1,LB3;JNB ACC.2,L12;LB1: MOV 25H,#01H;25H单元是标志位,(25H)=01H调节时单元的值SETB 2BH.4; CLR 2DH.4;CLR 2FH.4;AJMP L12;LB3: MOV 25H,#04H;25H单元是标志位,(25H)=04H调节秒单元的值SETB 2FH.4;CLR 2DH.4;CLR 2BH.4;AJMP L12;LB2: MOV 25H,#02H;25H单元是标志位,(25H)=02H调节分单元的值SETB 2DH.4;CLR 2BH.4;CLR 2FH.4;AJMP L12;L61: AJMP L611; L81: AJMP L811;L91: AJMP L911;L112:AJMP L12;L6: MOV A,23H;时加一INC A;MOV 23H,A;CJNE A,#24H,L12;MOV 23H,#00H;AJMP L12;L8: MOV A,22H;分加一INC A;MOV 22H,A;CJNE A,#60H,L12;MOV 22H,#00H;AJMP L12;L9: MOV A,21H;秒加一INC A;MOV 21H,A;CJNE A,#60H,L12;MOV 21H,#00H;AJMP L12;L611: MOV A,23H;时减一DEC A;MOV 23H,A;CJNE A,#00H,L112;MOV 23H,#23H;AJMP L12;L811: MOV A,22H;分减一DEC A;MOV 22H,A;CJNE A,#00H,L112;MOV 22H,#59HAJMP L12;L911: MOV A,21H;秒减一DEC A;MOV 21H,A;CJNE A,#00H,L112;MOV 21H,#59H;AJMP L12;NOPNOP END