
短按
用电平变换中端口最好
直接if(rb0)判断就行了
长按
if(rb0)
dealy(100ms);
if(rb0)
do;
抖动,就是一个确定的延时检测时间
if(rb0)
delay(10ms);
if(rb0)
do;
长按3秒进入程序可以这样
while(1)
{
if( key==0)//按键按下
{
cnt++;
if( cnt>300)
{
cnt=0;//到3秒,退出本循环进入下一段程序
break;
}
dely(10);//延时10毫秒
}
}
while(1)
{
//此为主程序段
}
定义一个延时函数,检测到按键按下后,延时一个很短的时间,再检测该按键,如果已释放,则为短按,同时将长按的计数器清零;延时一个较长的时间,如再次检测到按键还处于按下状态,则为长按,同时将短按的计数器清零
光猫重启—同一个开关的长按与短按。
短按:管道激活,把没下发的数据重新下发,已经下发的数据保持原样;
长按:数据清空。相当于把光猫变成了一张白纸。数据清空了,要做上去,就需要重新注册。
以NEC格式为例:
按键一次: 依次发送 引导码 + 地址 + 地址取反 + 数据 + 数据取反
长按键: 隔110ms左右发一次引导码(重复),并不带任何数据(全部为高电平)
所以根据这个特点可以识别长按键:
程序接收一帧数据后,提取出地址和数据,然后判断
//有地址和数据的,为一次按键
//地址和数据为空的,为重复按键
if((ir_addr_code==0xffff)&&(ir_origin_data==0xff)&&(ir_data==0xff))
{
repeat=1;
key= last_key;
}
首先你的程序写的不够合理,作为按键一般会使用外部中断而不是定时中断,外部中断可以保证实时按键。
一般按键都是采用外部中断,如果是在while循环里面进行按键键值判断,那么在判断之前最好加个小延时,进行按键去抖。
像你这个wile循环耗时很长,最适合使用外部中断了,当然如果按键没有接到外部中断引脚,采用定时中断也可以达到一定的效果,但是一定要把定时时间设置的短一些。
首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电
按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状态。
软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。
按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。
运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键松开,那就彻底没电关机。
以上就是关于单片机大侠 帮帮我 谢谢了!单片机按键短按,长按,弃抖动,松手检测程序全部的内容,包括:单片机大侠 帮帮我 谢谢了!单片机按键短按,长按,弃抖动,松手检测程序、51单片机C程序:如何实现一个按键长按3秒进入程序,再长按3秒关机,短一次却换流水灯切换模式,共3种模式、跪求一个51的按键程序,能实现长按和短按的判别的,谢谢大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)