按键连按和不连按
Posted qifeng1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按键连按和不连按相关的知识,希望对你有一定的参考价值。
声明1个概念:
连按:就类似于遥控器的+ - 音量键 只要你按住不松手 他就一直 + 或 -
不连按:按下去 弹起来 这个过程算作是一次有效按键,如果按下去不弹起则不会进行任何操作
//按键处理函数 //返回按键值 //mode:0,不支持连续按;1,支持连续按; //0,没有任何按键按下 //1,WKUP按下 WK_UP //注意此函数有响应优先级,KEY0>KEY1>KEY2>WK_UP!! u8 KEY_Scan(u8 mode) { static u8 key_up=1; //按键松开标志 if(mode==1)key_up=1; //支持连按 if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) { delay_ms(10); key_up=0; if(KEY0==0) return KEY0_PRES; else if(KEY1==0) return KEY1_PRES; else if(KEY2==0) return KEY2_PRES; else if(WK_UP==1) return WKUP_PRES; }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; return 0; //无按键按下 }
代码解释:当mode == 0 时,在按下的时候,第一次检测到按下会触发,第二次检测到按下 但是此时key_up == 0 返回值是 0 没有动作变化,直到改变了按键状态,才会改变key_up这个标志位的值,才会使灯的亮度发生变化
当mode == 1 时,key_up被static修饰,这个值不会被重复初始化,所以当第二次检测到按下时key_up会变成1 从而进入if条件,return出一个检测到按键的返回值。
这个代码的妙用就是当你长时间按下一个键,不同的模式,是否会选择给回第二次(后面很多次)检测的返回值。
如果给回返回值 则表示检测到了 那就是连按
r
以上是关于按键连按和不连按的主要内容,如果未能解决你的问题,请参考以下文章