按键连按和不连按

声明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

原文地址:https://www.cnblogs.com/qifeng1024/p/12026666.html