資源描述:
《單片機(jī)C語言 電子時(shí)鐘程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、#include#defineuintunsignedint#defineucharunsignedcharunsignedcharkey2;bitding=1;unsignedcharGetkey(void);uchara,n=0,shi,fen,miao;voiddelay01s(void);ucharLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharLED1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x
2、02,0x78,0x00,0x10};//有小數(shù)點(diǎn)的voidinit();//函數(shù)聲明voidDelay(unsignedcharz);//函數(shù)聲明voiddisplay();//函數(shù)聲明//函數(shù)聲明voidmain()//函數(shù)聲明{P1=0xfe;//對(duì)P1口賦初值init();//函數(shù)調(diào)用while(1){//函數(shù)調(diào)用key2=Getkey();switch(key2){case1:shi++;if(shi==24){shi=0;}break;case2:fen++;if(fen==60){fen=0;}break;case3
3、:if(fen!=0)fen--;if(fen==24){fen=0;}break;case4:ding=~ding;default:break;}display();//函數(shù)調(diào)用}}voidinit(){TMOD=0x01;//定時(shí)器工作方式選擇和賦初值TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;//開總中斷ET0=1;//開定時(shí)器中斷TR0=1;//啟動(dòng)定時(shí)器}voidtimer0()interrupt1//中斷服務(wù)程序{if(ding==1){TH0=(65536-500
4、00)/256;//中斷時(shí)間50msTL0=(65536-50000)%256;//定時(shí)器重新賦初值a++;if(a==10){n=~n;}if(a==20){n=~n;a=0;P1=P1<<1
5、P1>>7;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}}}}}}voiddisplay()//顯示程序{P0=LED[shi/10];P2=((P2&0x0f)
6、0x70);Delay(4);if(n==0){P0=LED[shi
7、%10];}else{P0=LED1[shi%10];}P2=((P2&0x0f)
8、0xb0);Delay(4);P0=LED[fen/10];P2=((P2&0x0f)
9、0xd0);Delay(4);P0=LED[fen%10];P2=((P2&0x0f)
10、0xe0);Delay(4);}/**********獲得鍵值子程序**********************/unsignedcharbool;//bool是否松鍵的標(biāo)志unsignedcharGetkey(void){unsignedchartemp,key=0;P2=
11、(P2&0xff)
12、0x0f;if((P2&0xff)!=((P2&0xff)
13、0x0f))//有鍵按下{//delay01s();if(((P2&0xff)!=((P2&0xff)
14、0x0f))&&(bool==0))//有鍵按下{temp=~(P2
15、0xf0);if(temp==1)key=1;elseif(temp==2)key=2;elseif(temp==4)key=3;elseif(temp==8)key=4;bool=1;}}if(((P2&0xff)==((P2&0xff)
16、0x0f))&&(bool==1)){b
17、ool=0;}returnkey;//返回1~16鍵值}/********延時(shí)程序******/voiddelay01s(void){unsignedcharj,k;for(j=5;j>0;j--)//198{for(k=15;k>0;k--)//248{;}}}voidDelay(unsignedcharz){unsignedchari,j,k;//定義變量for(i=z;i>0;i--)for(j=25;j>0;j--)for(k=20;k>0;k--);}