简单的定时器实现按键消抖,还望大家多指点!
/********************************按独立按键使数码管加1********************************/#include<reg52.h>#defineucharunsignedcharsbitKEY=P1^0;//定义独立按键bitKEYSTA=1;//按键的初始状态ucharcodeDispCode[]={0xc0,0xf9,0xa4,0xb0,//共阳数码管0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voidTimer0Init();//定时器初始化函数voidKeyProcess();//按键处理函数voidmain(){Timer0Init();KeyProcess();}voidTimer0Init(){TMOD|=0x01;TH0=0xF8;//定时2MSTL0=0xCD;EA=1;ET0=1;TR0=1;}voidKeyProcess(){bitlasttime=1;//定义前一次按键值,初始化为1;ucharcount=0;//计数值初始化为0;KEY=0x01;//按键初始化;P0=DispCode[count];//数码管初始化;while(1){if(KEYSTA!=lasttime)//如果“当前按键状态”与“前一次按键状态”不同,说明按键有动作;{if(lasttime==1)//如果按键有动作了,那么前一次按键状态为“弹起”(lasttime==1),说明按键按下时,会响应动作;{count++;if(count>=16)//计数加到16清零,只用一个共阳数码管;{count=0;}P0=DispCode[count];//共阳数码管显示相应的值;}lasttime=KEYSTA;//如果按键有动作,就更新前一次按键的值;}}}voidTimer0IRQ()interrupt1//2MS中断一次{statickeybuf=0xFF;//定义一个静态按键缓存变量,且值为FF;主要是暂存按键状态;TH0=0xF8;//重新写入初值;TL0=0xCD;keybuf=(keybuf<<1)|KEY;//左移一位,使当前的按键状态移到按键缓存中;if(keybuf==0)//如果移8次,按键状态都为0,说明按键真正按下;{KEYSTA=0;//确定按键状态为按键;}elseif(keybuf==0xFF)//如果移8次,按键状态都为1,说明按键未按下{KEYSTA=1;}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。