使用狀態機的按鍵掃瞄 單擊 雙擊和長按

2021-10-01 06:16:25 字數 1272 閱讀 2822

這篇部落格記錄下前面用到的狀態機按鍵掃瞄漏掉的乙個實驗專案,單個按鍵的單擊、雙擊和長按的檢測。

**如下:

#include

typedef

unsigned

int uint16;

typedef

unsigned

char uint8;

#define no_key 0xff

#define key_state0 0

#define key_state1 1

#define key_state2 2

#define key_state3 3

#define single_click 0

#define double_click 1

#define long_click 2

sbit key1 = p3^2;

sbit led_click = p1^0;

sbit led_double = p1^1;

sbit led_long = p1^2;

bit int_flag;

uint8 cnt =0;

uint8 key_scan()

; uint8 key_jud()

;uint8 key_scan()

else

break

;case key_state2:

if(key1)

elseif(

++key_timer_cnt1 >=20)

break

;case key_state3:

if(key1)

break

;default

:break;}

return key_value;

}uint8 key_jud()

else

break

;case key_state1:

if(key_value1 == single_click)

elseif(

++key_timer_cnt2 >=10)

break

;default

:break;}

return key_value;

//送出判定結果

}void

timer0init()

void

timer0_isr

() interrupt 1 using 0

void

main()

}}}

基於狀態機的新型按鍵消抖掃瞄程式

一般的按鍵輸入軟體介面程式非常簡單,在程式中一旦檢測到按鍵輸入口為低電平 有時可能為高 便採用軟體延時的方法來進行消抖,然後再次檢測按鍵輸入,如果再次確認為低電平則表示有按鍵按下,轉入執行按鍵處理程式。如果延時後檢測的電平為高電平則放棄本次按鍵檢測,重新開始一次按鍵檢測過程。在簡單的系統中這種方法比...

按鍵的程式設計 狀態機1

現在的大學教育就是這樣。學無法致用。狀態機第一次見的時候是在數電裡面,那個時候是研究數位電路 比如鎖存器 用到的。不過由於是自學的,所以早就忘的一塌糊塗了。沒上完大學的人就是這樣啊。不過狀態機同樣在硬體的程式設計中得到廣泛使用。第一次見到狀態機的程式設計,就是在按鍵的程式設計中 馬潮老師的書 後來覺...

基於狀態機的按鍵程式

基於狀態機的按鍵程式 一般的按鍵輸入軟體介面程式非常簡單,在程式中一旦檢測到按鍵輸入口為低電平 有時可能為高 便採用軟體延時的方法來進行消抖,然後再次檢測按鍵輸入,如果再次確認為低電平則表示有按鍵按下,轉入執行按鍵處理程式。如果延時後檢測的電平為高電平則放棄本次按鍵檢測,重新開始一次按鍵檢測過程。在...