一种有效的多按键消抖方法

May 13, 2016, 4:58 p.m.

#define Key_1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)  //读取Key_1,Key_2,Key_3的值
#define Key_2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)  //Key_1按下时为高电平,Key_2,Key_3按下时为低电平
#define Key_3 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)

u8 Key_Scan()                                                                       //按键扫描函数
{
    static u8 Key_up = 1;                                                        //设置Key_up变量,判定按键是否松开,原理:static关键字只定义一次变量,若下文再次定义,则默认使用最后赋给变量的值
    if(Key_up & (Key_1 | !Key_2 | !Key_3))                                //当按键已全部松开且又有新按键按下
    {
        Key_up = 0;                                                                  //清零Key_up,表示有按键按下未松开
        delay_ms(30);                                                               //延时后再判断键值,达到消抖作用
        if(Key_1) return 1;
        else if(!Key_2) return 2;
        else if(!Key_3) return 3;
    }
    else if(!Key_1 & Key_2 & Key_3)                                       //当所有按键松开时,将Key_up置1
    {
        Key_up = 1;
    }
    return 0;
}

优点:同时实现多个按键的消抖和扫描
缺点:无法判断按键长按


评论(0)

评论暂缺

添加新评论