一種不依賴計時器的鍵盤長按,雙擊實現

2021-08-21 10:48:57 字數 1082 閱讀 4028

uint8_t key_scan(void)

; key_write(0x00); //寫鍵盤列

count = 10000;

while((key_read() == 0x0f) && (count != 0)) //等待鍵盤按下,10ms超時

if (count == 0) //若等待超時,按鍵無效

delay_ms(5);

for (i = 0; i < 4; i++) //按列掃瞄

scandata += 4;

} if (keyvalue == 0) //若無按鍵按下,返回

key_write(0x00); //列全寫0

count = 0;

while ((key_read() != 0x0f) && count < key_long_press_max_time) //讀行鍵值,若有按鍵按下則計時

if (count > key_short_press_max_time) //若計時超過key_short_press_max_time,為長按

#ifdef key_double_click //雙擊

else

}}#endif

if ((lastkeyvalue == keyvalue) || (lastkeyvalue == keyvalue + 20) || (lastkeyvalue == keyvalue -20)) //防止連按觸發

lastkeyvalue = keyvalue;

return keyvalue;

}

一種簡單的不依賴於程式語言的異常處理方法

現在有很多支援異常處理的程式語言。我現在想說的是在 c 語言等不支援異常處理的語言中怎樣實現多路的異常處理功能。首先,所有可能丟擲異常的函式,都返回乙個布林型值。當返回值為真時,表示沒有異常。否則表示有異常。此外用乙個全域性 或執行緒全域性 變數記錄異常資訊。第二,在函式內,返回值一開始置為真。異常...

一種達到微妙級別的計時器

ifndef celltimestamp hpp define celltimestamp hpp 為了避免同乙個標頭檔案被包含 include 多次,c c 中有兩種巨集實現方式 一種是 ifndef方式 另一種是 pragma once方式。pragma once 達到微秒的計時器 includ...

C 中種常用的計時器

1 system.timers.timer和system.windows.forms.timer,它的最低識別為1 18s。2 timegettime,他的最低識別能達到5ms。3 system.environment.tickcount,它最低識別為毫秒級。4 queryperformanceco...