abc123194:
以下是我做的一個簡易時鐘程序,功能不多,就只顯示小時和分鐘,兩個鍵調(diào)節(jié)小時數(shù)和分鐘數(shù),關(guān)鍵是代碼少啊,也不用鎖存器,只要三極管就行了#include #defineucharunsignedchar #defineuintunsignedint ucharHour,Minite,Second,Num;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbitjiashi=P3^1;sbitjiafeng=P3^0;voiddelayms(uintxms) { uinti,j; for(i=xms;i>0;i--) //i=xms即延時約xms毫秒 for(j=113;j>0;j--); } voidinit() //初始化函數(shù) { TMOD=0x01;//設(shè)置定時器0為工作方式1(00000001)TH0=(65536-50000)/256;//裝初值50ms一次中斷 TL0=(65536-50000)%256; EA=1; //開總中斷 ET0=1;//開定時器0中斷 TR0=1;//啟動定時器0 Num=0;Hour=06; Minite=00; Second=00; }voiddisplay(ucharHour,ucharMinite) //顯示子函數(shù) {P1=0xff;P2=0xf7;P1=table[Hour/10]; delayms(5); P1=0xff;P2=0xfb; P1=table[Hour%10]&0x7f;delayms(5);P1=0xff;P2=0xfd; P1=table[Minite/10]; delayms(5); P1=0xff;P2=0xfe;P1=table[Minite%10]; delayms(5); } voidT0_time()interrupt1{ TH0=(65536-50000)/256;//重裝初值 TL0=(65536-50000)%256; Num++; } voidjishi() { if(Num==20) //如果到了20次,說明1秒時間到 { Num=0; //然后把num清0重新再計20次 Second++; if(Second>=60) { Second=0; Minite++;if(Minite>=60) { Minite=0; Hour++; if(Hour>=24){Hour=0;} } } }if(jiashi==0){delayms(50);if(jiashi==0){Hour++;Second=0;if(Hour>=24){Hour=0;} while(!jiashi);}}if(jiafeng==0){delayms(50);if(jiafeng==0){Minite++;Second=0;if(Minite>=60) { Minite=0;}while(!jiafeng);}} }voidmain() { init(); while(1) { display(Hour,Minite);jishi(); }}