abc123194:
以下是我做的一个简易时钟程序,功能不多,就只显示小时和分钟,两个键调节小时数和分钟数,关键是代码少啊,也不用锁存器,只要三极管就行了#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() //初始化函数 { TMOD=0x01;//设置定时器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) //显示子函数 {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(); }}