基于定时器的51单片机时钟程序
- 格式:doc
- 大小:33.00 KB
- 文档页数:20
基于定时器的51单片机时钟程序 51单片机时钟程序,基于定时器写出,同时还有定时、日历、键盘调节功能 #include #include sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; sbit key2=P3^5; sbit luis=P3^6; sbit key4=P3^7; #define uint unsigned int #define uchar unsigned char uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code table2[]={ 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef}; uchar a,b,d,shis,ges, shif,gef,shim,gem,shi, fen,miao,shiy,gey,shir, ger,yue,ri; void display1(uchar,uchar, uchar,uchar,uchar,uchar); void display2(uchar,uchar, uchar,uchar); void init(); void keyscan1(); void keyscan2(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { init(); a=0; miao=0; shi=0; fen=0; yue=1; ri=1; while(1) { if(luis==1) { display1(shis,ges,shif,gef,shim,gem); keyscan1(); } else { display2(shiy,gey,shir,ger); keyscan2(); } } } void init() { d=0xaa; P1=d; TMOD=0x11; TH0=(65536-45872)/256; TL0=(65536-45872)%256; TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; } void display1(uchar shis,uchar ges,uchar shif, uchar gef,uchar shim,uchar gem) { dula=1; P0=table[shis]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table2[ges]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[shif]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); dula=1; P0=table2[gef]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); dula=1; P0=table[shim]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); dula=1; P0=table[gem]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(1); } void r0() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; a++; { if(a==20) { a=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; { if(yue==1) { ri++; if(ri==32) { ri=0; yue=yue+1; } } if(yue==2) { ri++; if(ri==29) { ri=0; yue=yue+1; } } if(yue==3) { ri++; if(ri==32) { ri=0; yue=yue+1; } } if(yue==4) { ri++; if(ri==31) { ri=0; yue=yue+1; } } if(yue==5) { ri++; if(ri==32) { ri=0; yue=yue+1; } } if(yue==6) { ri++; if(ri==31) { ri=0; yue=yue+1; } } if(yue==7) { ri++; if(ri==31) { ri=0; yue=yue+1; } } if(yue==8) { ri++; if(ri==32) { ri=0; yue=yue+1; } } if(yue==9) { ri++; if(ri==31) { ri=0; yue=yue+1; } } if(yue==10) { ri++; if(ri==32) { ri=0; yue=yue+1; } } if(yue==11) { ri++; if(ri==31) { ri=0; yue=yue+1; } } if(yue==12) { ri++; if(ri==32) { ri=0; yue=1; } } } } } } shiy=yue/10; gey=yue%10; shir=ri/10; ger=ri%10; shis=shi/10; ges=shi%10; shim=miao/10; gem=miao%10; shif=fen/10; gef=fen%10; } } } void r1() interrupt 3 { TH1=(65536-45872)/256; TL1=(65536-45872)%256; b++; { if(b==20) { b=0; d=_crol_(d,1); P1=d; } } } void keyscan1() { if(key1==0) { delay(5); if(key1==0); { shi++; if(shi==24) shi=0; while(!key1); } } if(key2==0) { delay(5); if(key2==0); { fen++; if(fen==60) fen=0; while(!key2); } } if(key4==0) { delay(5); if(key4==0); { delay(5); while(!key4); TR0=~TR0; } } } void display2(uchar shiy,uchar gey, uchar shir,uchar ger) { dula=1; P0=table[shiy]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table2[gey]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[shir]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1);