如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
附录2主程序#include<reg52、h〉#defineucharunsignedchar#defineuintunsignedintsbitKEYON=P2^0;//开始键sbitKEYOFF=P2^1;//关闭键sbitKEYSET=P2^2;//预约键sbitKEYINC=P2^3;//加1键sbitKEYDEC=P2^4;//减1键sbitKEYFREE=P2^5;//预留键sbitPOWER=P3^6;//电源开关指示灯sbitLED=P3^3;//按键指示灯ucharcodedispcode[]={0x3f,0x06,0x05b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9得字型码uchardatadisbuf[]={0,0,0,0};//显示缓冲区ucharhour,min;//小时、分变量bitOnflag,flag;ucharSetflag;voiddelay(uchar);//延时子函数voidinit(void);//定时器初始化子函数ucharGetKeyNum();//求按键号voidKeyprocess(uchar);//按键处理子函数voidcalculate();//计时子函数voiddisplay();//显示子函数//---—--——--——-———---—主函数-——---——---—--——-—-—————-voidmain(void){init();P1=0x00;while(1)display();}//——-----————-—定时器TO、T1初始化,外部中断0初始化子函数-———-voidinit(){TMOD=0x11;//TO、T1作定时器、工作方式1TH0=(65536—50000)/256;//定时50msTL0=(65536—50000)%256;TH1=(65536—50000)/256;TL1=(65536-50000)%256;IT0=1;//选择外部中断0为下降沿触发方式EX0=1;//开外部中断0ET1=1;//开定时器1ET0=1;//开定时器0EA=1;//开总中断TR0=1;}//——---—----显示子函数--—-—-—--——-----——--——----voiddisplay(){uchari,j=0x08;if((Setflag==0)&&!(min|hour))//数码管显示“——-—"{for(i=0;i〈4;i++)disbuf[i]=dispcode[10];}else//正常显示时间{disbuf[0]=dispcode[min%10];//分个位disbuf[1]=dispcode[min/10];//分十位disbuf[2]=dispcode[hour%10]+0x80;//小时个位disbuf[3]=dispcode[hour/10];//小时十位}if((Setflag!=0)&flag)//如果调时,数码管闪烁显示{for(i=0;i<4;i++){if((disbuf[i]==0x3f)&&(i>2))//不显示前面得0P0=0;elseP0=disbuf[i];if(Setflag==1)P1=j&0xfc;//调时,关断前两位位码elseP1=j&0xf3;//调分,关断后两位位码delay(5);//延时2、5msP1=0x00;j=j>〉1;}}else//数码管正常显示{for(i=0;i<4;i++){if((disbuf[i]==0x3f)&&(i>2))P0=0;//不显示前面得0elseP0=disbuf[i];P1=j;//位选通delay(5);//延时2、5msP1=0X00;j=j〉〉1;}}}//-————-—---——-—外部中断0中断函数——---—-——--——-—---—-—----—----——-voidint0()interrupt0using0{ucharkeynum;display();//动态显示程序作为去抖动if(INT0==0)//判断就是否有按键按下{keynum=GetKeyNum();//有效键,获取键值while(INT0==0);//等待按键释放Keyprocess(keynum);//按键处理}}//-———--—-——--—-——-定时器0中断子函数---——-——-——------—---————-—-voidtime0()interrupt1//处理调时、显示器闪烁{staticucharledcn