按鍵不用死循環等待的鬆手檢測方法

按鍵不用死循環等待的鬆手檢測方法

一般傳統的鬆手檢測都是用一個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鎖住 表示已經按下
        }
    }
}