资源描述:
《c51可调10小时倒计时源程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#includeunsignedcharsec100,sec,sec5,min,hour,flag1,command,temp,opto;unsignedchari,digit,buffer[4],onHour1,onMin1,offHour1,offMin1;charcputick,key,delay,count1;charconvert[10]={0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f};voidp
2、ause(int);voidscanLED();voidmanualOnOff();voidsavetimeOnOff1();voidsetmin();voidsethour();voidshowOnce();voidsavetimeOff1();voidtime();voidtimeToBuffer();voidblink();voidoffmsd();voidkeyexe();voidkeydelay();voidcomparetime();voidtimer0int(void)interrupt1using
3、1{TH0
4、=0xdc;cputick++;time();}voidmain()//主运行程序//{EA=1;//打开总中断开关//ET0=1;//打开定时器中断//TMOD
5、=0x01;//定时器方式选择//TR0=1;opto=0xff;//定时开关置1//cputick=0;hour=10;min=0;sec=0;//初始开机时分秒//key=-1;flag1=0;onHour1=10;onMin1=00;//定时开关开启时间//offHour1=00;offMin1=00;//定时开关关闭时间//coun
6、t1=0;buffer[0]=0x40;buffer[1]=0x40;buffer[2]=0x40;buffer[3]=0x40;while(1){while(cputick<1)scanLED();cputick=0;timeToBuffer();blink();offmsd();keyexe();keydelay();comparetime();}}voidtime()//计时子程序//{sec100++;if(sec100>=100)//这里if构成顺序选择结构///{sec100=0;flag1
7、=0x0
8、5;temp=50;sec++;if(sec>=60){sec=0;//秒产生程序//flag1
9、=0x02;min--;if(min==-1){min=59;//分倒计时//hour--;if(hour==-1){hour=23;//时倒计时//}}}}}voidscanLED(){inti;digit=0x08;key=-1;for(i=0;i<4;i++){P3=~digit&opto;P1=~buffer[i];pause(5);P1=0xff;if((P3&0x10)==0)key=i;digit>>=
10、1;}}voidtimeToBuffer(){buffer[0]=convert[min%10];//分个位//buffer[1]=convert[min/10];//分十位//buffer[2]=convert[hour%10];//时个位//buffer[3]=convert[hour/10];//时十位//}voidblink(){if((flag1&0x04)!=0){temp--;if(temp!=0){buffer[1]
11、=0x80;buffer[2]
12、=0x80;}else(flag1&=~0x04
13、);}//if和else构成多分支选择结构,当表达式为假时,就跳过分支语句,执行后续程序/////}voidkeyexe()//键盘处理子程序//{if(key!=-1)//if如果的意思//{if((flag1&0x80)==0){flag1
14、=0x80;delay=50;//延时//switch(key)//开关和跳转语句//{case(0)://开关语句关键字//manualOnOff();break;//通常用在循环语句和开关语句中,用来跳出循环程序块//case(1):savetimeOnOff1();
15、break;case(2):setmin();break;case(3):sethour();}}}}voidsethour()//小时调整子程序//{hour--;if(hour==23)hour=0;}voidsetmin()//分钟调整子程序//{min--;sec=0;if(min==59)min=0;}voidsavetimeOnOff1(){count1++;