首页 单片机按键程序

单片机按键程序

举报
开通vip

单片机按键程序单片机按键程序 #include #include #include #include volatile unsigned char mzt; volatile unsigned char b; //AJ volatile unsigned char ajov; volatile unsigned char ta,t1,tb,t2,zt,aj,ajok,t; volatile unsigned char tc,td,zt2,aj2,ajok2,t3,t4,t_2; //时间 cons...

单片机按键程序
单片机按键程序 #include #include #include #include volatile unsigned char mzt; volatile unsigned char b; //AJ volatile unsigned char ajov; volatile unsigned char ta,t1,tb,t2,zt,aj,ajok,t; volatile unsigned char tc,td,zt2,aj2,ajok2,t3,t4,t_2; //时间 const unsigned char led[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; const unsigned char p[4]={0xEF,0xDF,0xBF,0x7F};//位控制 volatile unsigned char time_0k,w,time_0;//位选时间标志 位选 变量 volatile unsigned char time[4]; // volatile unsigned char time_t,timeov,dark,time_t1;//时间软件计时 溢出软件中断 显示开关 //秒 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf volatile unsigned char sw[4]; volatile unsigned char sw_t,sw_0k,sw_0,swov; //秒表软件时间,显示标志,显示时间,软件溢出中断 volatile unsigned char sw_z,sw_s;//秒表清零0 暂停控制位00 //闹钟 volatile unsigned char clock[4]; volatile unsigned char cl_0,cl_0k,show,blink; //显示 时间 标志 闪烁标志 计时 volatile unsigned char clov;//软件溢出中断 volatile unsigned char clock_e,fy_e;//闹钟,反应使能 ff volatile unsigned char sound; //改时间 volatile unsigned char cc_0,cc_0k,ccov; //显示 时间 标志 闪烁标志 计时 //反应 volatile unsigned char rand,l,fy; //随机数 数码管数 闹钟时间到启动标志 volatile unsigned char fyov,fy_0,fy_0k,ko,i; //溢出软件标志 按键计时1.2 有按键ff //led volatile unsigned char del,m,n,mc; //led fy_e clock_e ISR(TIMER0_OVF_vect) { TCNT0=0X06;//4000/0.25/64=250 ajov=ajov+1;//有计时程序 //时间 if(mzt==0)//?????? { timeov=timeov+1; //显示 } //秒表 if(mzt==1) { swov=swov+1; } //闹钟 if(mzt==2) { clov=clov+1; } //改时间 if(mzt==3) { ccov=ccov+1; } //反应 if(mzt==4) { fyov=fyov+1; } }// ISR(TIMER2_OVF_vect)//蜂鸣器响 { if(mzt==4) { n=0x00; sound=~sound; if(sound)//led 7 portc 1 0 { n=~(1<<5); //1111101 del=del&n; } else { n=(1<<5); del=del|n;// 000000010 } } }//ov2 end ISR(INT1_vect)//big button { if(mzt==4) {ko=0xff;} //if(mzt!=4&&mzt!=0)//反应时间控制 //{ //h // } if(mzt==0) { mc=0x00; clock_e=~clock_e; if(clock_e)//led 7 portc 1 0 { mc=~(1<<1); //1111101 del=del&mc; } else { mc=(1<<1); del=del|mc;// 000000010 } }//mxt }// ISR(INT0_vect)//int0 int0 int0 int0 int0 { if(mzt!=4) { b=0;//位选清零 mzt=mzt+1; if(mzt==4) mzt=0; } } int main (void) { OSCCAL=0X97;//时钟校正 PORTB=0X00; DDRB=0XFF;//数码管数据 DDRC=0X3F;//LED PORTC=0X3F; DDRD=0XF0; PORTD=0XF0; GICR=0xC0; MCUCR=0x0A; //4.0ms TCCR0=0X03;//4m 0.25us*250*64(分频)*250==1.0s TIMSK=0X01; mzt=0; //AJ ajov=0; ta=0;tb=0;zt=0;t1=0;t2=0;t=0;aj=0;//第一颗按键 tc=0;td=0;zt2=0;t3=0;t4=0;t_2=0;aj2=0;//第二颗按键 //时间 time[0]=0;time[1]=3;time[2]=2;time[3]=1; time_t=0; dark=0x00; timeov=0; time_0k=0; w=0; time_0=0;time_t1=0; //秒表 sw[0]=0;sw[1]=0;sw[2]=0;sw[3]=0; swov=0;sw_0k=0;sw_0=0;sw_t=0; sw_z=0x00;sw_s=0x00;//清零暂停 //闹钟 clock[0]=1; clock[1]=3; clock[2]=2; clock[3]=1; clov==0; show=0; blink=0; cl_0=0; cl_0k==0; b=0; clock_e=0; fy_e=0; sound=0;n=0; //改时间 ccov=0; cc_0=0; cc_0k=0; //反应 rand=0;ko=0;fy_0=0;i=0;fy=0;fy_0k=0; //led del=0xff; sei(); while(1) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; if(mzt==0) { //时间显示 if(time_0k==1)//0vf 中断执行 { PORTB=0XFF;//消除拖尾显示 PORTD=p[w]; PORTB=led[time[w]]; if(w==2) PORTB&=0x7F; w=w+1;//显示下一位(溢出中断一次更改显示位一次) if(w==4) w=0; time_0k=0;//显示标志软件清零 if(dark) PORTB=0XFF;//取消显示 } //timeov if(timeov>0) { //位选时间time_0k 显示 time_0=time_0+1; if(time_0>=0)//位选软件计时 { time_0=0; time_0k=1; } timeov=timeov-1;//清楚溢出软件标志 }//timeov //aj if(ajok==1) { dark=~dark; ajok=0; } if(ajok2==1) { fy_e=~fy_e; ajok2=0; if(fy_e)//led显示 L8 POTRC0 { m=~1<<0; del=del&m; } else { m=1<<0; del=del|m; } } }//mzt时间end+++++++++++++++++ //sw秒表++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if(mzt==1) { //显示 if(sw_0k==1)//0vf 中断执行 { PORTB=0XFF;//消除拖尾显示 PORTD=p[w]; PORTB=led[sw[w]]; if(w==3) PORTB&=0x7F; w=w+1;//显示下一位(溢出中断一次更改显示位一次) if(w==4) w=0; sw_0k=0;//显示标志软件清零 } //秒表清零 if(sw_z==0) { sw[0]=0;sw[1]=0;sw[2]=0;sw[3]=0; } //秒表软件溢出 if(swov>0) { ////秒表计时 if(sw_s&&sw_z) { if(++sw_t>=25)//4M { sw_t=0; if(++sw[0]>=10)//100m { sw[0]=0; if(++sw[1]>=10)//秒 { sw[1]=0; if(++sw[2]>=6)//10秒 { sw[2]=0; if(++sw[3]>=10)//分 {sw[3]=0;} }//2 }//1 }//0 } } if(++sw_0>=0)//位选软件计时 { sw_0=0; sw_0k=1;//秒表sw_0k 显示 } swov=swov-1;//清楚溢出软件标志 }//swov end ///miaobiao aj aj aj if(ajok==1) { sw_z=0;//清零有效 ajok=0; } if(ajok2==1) { sw_s=~sw_s; sw_z=0xff;//清零无效 ajok2=0; } }//miaobiao mzt end //====================================================== // //闹钟=================================== if(mzt==2) { //显示 if(cl_0k==1)//0vf 中断执行 { PORTB=0XFF; PORTD=p[w]; PORTB=led[clock[w]]; PORTB&=0X7F; if(w==b&&show)//闪烁 PORTB=0XFF;//灭 w=w+1; if(w==4) w=0; cl_0k=0; } //clov clov clov clov clov if(clov>0) { //闪烁控制 blink=blink+1; if(blink>=10) { blink=0; show=~show; } if(++cl_0>=0)//位选软件计时 { cl_0=0; cl_0k=1;//秒表sw_0k 显示 } clov=clov-1;//清楚溢出软件标志 }//clov //cl a j/cl a j/cl a j/ if(ajok==1) //位选 { b=b+1; if(b==4) b=0; ajok=0; }//aj //循环加1 if(ajok2==1) { if(b==0)//分 { clock[b]=clock[b]+1; if(clock[b]>=10) clock[b]=0; } if(b==1)//十分 { clock[b]=clock[b]+1; if(clock[b]>=6) clock[b]=0; } if(b==2)//小时 { clock[b]=clock[b]+1; if(clock[b]>=5) clock[b]=0; } if(b==3)//十小时 { clock[b]=clock[b]+1; if(clock[b]>=3) clock[b]=0; } ajok2=0;//清除标志 }//aj2 }//闹钟程序++++++++++++++++++++++++++++++end //改时间cc if(mzt==3)// { if(cc_0k==1)//0vf 中断执行 { PORTB=0XFF; PORTD=p[w]; PORTB=led[time[w]]; if(w==2) PORTB&=0X7F; if(w==b&&show)//闪烁 PORTB=0XFF;//灭 w=w+1; if(w==4) w=0; cc_0k=0; } if(ccov>0) { //闪烁控制 blink=blink+1; if(blink>=10) { blink=0; show=~show;//闪烁控制 } if(++cc_0>=0)//位选软件计时 { cc_0=0; cc_0k=1;//秒表sc_0k 显示 } ccov=ccov-1;//清楚溢出软件标志 }//ccov,,,,,,,,,,,,,,end //aj aj aj aj aj aj aj aj aj a ja aj aj if(ajok==1) //位选 { b=b+1; if(b==4) b=0; ajok=0; }//aj if(ajok2==1) { if(b==0)//分 { time[b]=time[b]+1; if(time[b]>=10) time[b]=0; } if(b==1)//十分 { time[b]=time[b]+1; if(time[b]>=6) time[b]=0; } if(b==2)//分 { time[b]=time[b]+1; if(time[b]>=5) time[b]=0; } if(b==3)//分 { time[b]=time[b]+1; if(time[b]>=3) time[b]=0; } ajok2=0; }//aj2 }//改时间——————————————————————————END //反应力+++++++++++++++++++++++++++++++++++++++star if(mzt==4) { //显示 if(fy==1) { l=rand; PORTB=led[l]; PORTD=0X0F; fy=0; } if(fyov>0) { if(++fy_0>=100)//4m { fy_0=0; if(++fy_0k>=2)//检验 { fy_0k=0; if(l==i&&ko)//按键成功 { mzt=0; fy_e=0; TCCR2=0X00; TIMSK|=0X00;//蜂鸣器响4m 0.25*256*1024=65.536ms del=~(1<<6); } ko=0; i=i+1;//更新 if(i>5) i=0; del=1<0) { //time if(mzt!=3) { ;//时间软件计时 if(++time_t>=250)//4m 1.s { time_t=0; if(++time_t1>=60) {time_t1=0; if(++time[0]>=10)//秒 { time[0]=0; if(++time[1]>=6)//10秒 { time[1]=0; if(++time[2]>=4)//分 { time[2]=0; if(++time[3]>=2)//10分 {time[3]=0;} } } } } } }//mzt //aj0 if(ta==1)//消抖 { t1=t1+1; if(t1>=20) { t1=0; t=1; ta=0; } } if(tb==1)//暂停 { t2=t2+1; if(t2>=200) { t2=0; t=1; tb=0; } } //aj0 //aj1 if(tc==1)//消抖 { t3=t3+1; if(t3>=20) { t3=0; t_2=1; tc=0; } } if(td==1)//暂停 { t4=t4+1; if(t4>=200) { t4=0; t_2=1; td=0; } } ajov=ajov-1; } ///ov //rand rand=rand+1; if(rand>=5) rand=0; }//WHILE }//MAIN
本文档为【单片机按键程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_266065
暂无简介~
格式:doc
大小:43KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-18
浏览量:57