按键连按和不连按

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

以上是关于按键连按和不连按的主要内容,如果未能解决你的问题,请参考以下文章

vs 2010代码片段

ASP.NET 验证控件与防止按钮连按两次送出

pycharm 取消连按两下shift出现的全局搜索

按键检测函数

按键程序理解

iPhone耳机隐藏的强大功能,98%的人还不知道!