這篇部落格記錄下前面用到的狀態機按鍵掃瞄漏掉的乙個實驗專案,單個按鍵的單擊、雙擊和長按的檢測。
**如下:
#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
現在的大學教育就是這樣。學無法致用。狀態機第一次見的時候是在數電裡面,那個時候是研究數位電路 比如鎖存器 用到的。不過由於是自學的,所以早就忘的一塌糊塗了。沒上完大學的人就是這樣啊。不過狀態機同樣在硬體的程式設計中得到廣泛使用。第一次見到狀態機的程式設計,就是在按鍵的程式設計中 馬潮老師的書 後來覺...
基於狀態機的按鍵程式
基於狀態機的按鍵程式 一般的按鍵輸入軟體介面程式非常簡單,在程式中一旦檢測到按鍵輸入口為低電平 有時可能為高 便採用軟體延時的方法來進行消抖,然後再次檢測按鍵輸入,如果再次確認為低電平則表示有按鍵按下,轉入執行按鍵處理程式。如果延時後檢測的電平為高電平則放棄本次按鍵檢測,重新開始一次按鍵檢測過程。在...