按键不用死循环等待的松手检测方法

按键不用死循环等待的松手检测方法

一般传统的松手检测都是用一个while死循环等待松手的,一直按着按钮的时候其他的程序是停住不跑的,占着cpu的资源就是所谓占着茅坑不拉屎。下面分享的这个方法就是可以不用死循环等待,该跑的代码还是继续跑但是又实现了松手检测的功能。非常实用。

short flag = 0;
void Scan_key()
{
    if (key != 0) // 按键没有按下的时候
    {
        flag = 0; // 标志位清零
    }
    if (key == 0) // 按键按下
    {
        HAL_Delay(10);
        if (key == 0) // 消除抖动后再次判断按键是否按下
        {
            // 如果按键没有一直按着就执行 如果标志位为1说明还没有松手
            if (flag == 0) 
            {
                HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_15); // 电平翻转
            }
            flag = 1; // 将标志位置1锁住 表示已经按下
        }
    }
}
posted @ 2020-07-21 15:44  大海&  阅读(2538)  评论(0编辑  收藏  举报