微控制器--按鍵定時器檢測:短按、長按
阿新 • • 發佈:2019-01-04
通過使用定時器計數的方法來分辨按鍵的:短按、長按
- 檢測到引腳被拉低:按鍵按下為低電平,沒有按下為高電平
- 延時10毫秒:濾波
- 引腳還是被拉低:確定按鍵被按下
- 設定按鍵按下標誌
- 開啟定時器,開始計數:定時器中有一個全域性變數用於記錄計數值
- 直到引腳被拉高:按鍵被釋放將為高電平
- 關閉定時器
- 檢測按鍵按下標誌
- 檢測定時器按鍵檢測時間全域性變數是否大於某個值,一般為200ms
- 大於則為長按,否則為短按
uint8_t ylf_key_scan(void)
{
static uint8_t press_flag;
if (!KEY_PIN)
{
scs_delay_ms(10);
if (!KEY_PIN)
{
press_flag = 1;
TR0 = 1; // 定時器0開始計數
while(!KEY_PIN);
TR0 = 0; // 定時器0計數結束
}
}
if (press_flag)
{
if (KEY_COUNT >= 200)
{
KEY_COUNT = 0;
press_flag = 0;
return KEY_LONG_PRESSED;
} else {
KEY_COUNT = 0;
press_flag = 0;
return KEY_SINGLE_PRESSED;
}
}
return KEY_DEFAULT_STATUS;
}