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...