按鍵鬆手檢測 - 檢測是否連續按下
阿新 • • 發佈:2018-11-04
u8 KEY_Scan(void) { static u8 keyup=1; //防止檢測多次 if(keyup&&(KEY0==0||KEY1==0||KEY3==0)) { delay_ms(50);//去抖 if(KEY0==0||KEY1==0||KEY3==0) { keyup=0; if (KEY0==0) return KEY0_PRES; else if(KEY1==0) return KEY1_PRES; else if(KEY3==0) return WKUP_PRES; } } else if(KEY0==1&&KEY1==1&&KEY3==1) //若按鍵全部鬆開 keyup=1; return 0; }
今天寫按鍵的一個小程式,發現沒有鬆手檢測,如果一直按著按鍵不鬆開,會一直觸發,執行程式。然後發現例程的檢測程式,感覺不錯。
設定一個靜態變數,當此變數為一,並且有按鍵按下時,進入按鍵判斷函式。進入後把變數設定為0。若一直按著按鍵,一直執行不到最後若按鍵全部鬆開,keyup=1,所以,不會執行多次。
還可以設定一個引數,確定是否需要檢測多次:
<pre name="code" class="objc">u8 KEY_Scan(u8 mode) { static u8 key_up=1;//按鍵按鬆開標誌 if(mode) key_up=1; //支援連按 if(key_up&&(KEY0==0||KEY1==0||KEY3==0)) { delay_ms(10);//去抖動 key_up=0; if(KEY0==0)return KEY0_PRES; else if(KEY1==0)return KEY1_PRES; else if(KEY3==0)return WKUP_PRES; }else if(KEY0==1&&KEY1==1&&KEY3==1)key_up=1; return 0;// 無按鍵按下 }
若mode置一,說明支援連按,則keyup一直為一,會重複檢測
2016/1/16