用狀態機實現鍵盤消抖

2021-07-05 23:44:01 字數 1030 閱讀 1545

一直用狀態機做鍵盤消抖,覺得很好用,不必延時等待鍵盤穩定,當檢測到有鍵按下或彈起時能發出相應的鍵盤訊息,英文不好,只好用拼音做變數名和函式名,將就看吧 ;-)

設定狀態機有4種狀態,a0,a1,a2,a3

初始時處於a0狀態,當掃瞄發現有鍵按下時,轉入到a1狀態。

當處於a1狀態時,當掃瞄發現有鍵按下並且鍵值等於a1狀態下的鍵值時,轉入到a2狀態,否則轉入a0狀態。

當處於a2狀態時,當掃瞄發現有鍵按下並且鍵值等於a2狀態下的鍵值時,轉入到a3狀態,同時發出鍵按下訊息或將按下鍵的鍵值入隊,否則轉入a0狀態。

當處於a3狀態時,當掃瞄發現無鍵按下時,轉入到a0狀態。同時發出鍵彈起訊息或彈起鍵的鍵值入隊。

函式jiansaomiao()用於鍵掃瞄的到即時鍵值

函式jianchuli()用於按鍵處理,可放在時鐘中斷中呼叫

例:在10ms中斷中掃瞄並處理按鍵只需呼叫:jianchuli(jiansaomiao());

可使呼叫後完成發出鍵按下或鍵彈起的訊息,或者將鍵值送入鍵值佇列供後續處理*/

#define kong 0x00 //定義無鍵按下時,鍵掃瞄返回的值

#define a0 0

#define a1 1

#define a2 2

#define a3 3

struct

ztj;

void ztj_chushihua(void) //狀態機初始化

uchar jiansaomiao(void) //鍵值掃瞄

void jianchuli(uchar jz)

} break;

case a1:

break;

case a2:

else

ztj_chushihua(); //鍵值不穩,回到初始狀態a0

} break;

case a3:

} break;

default :

}}

狀態機按鍵消抖

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

用狀態機消抖法實現藍橋杯微控制器矩陣鍵盤的控制

下面是 功能 利用狀態機消抖法實現矩陣鍵盤,按s4開led1,按s5開led5 include reg52.h 用狀態機消抖的方法實現矩陣鍵盤 include intrins.h sfr p4 0xc0 矩陣鍵盤p3 6和p3 7口實際對應p4 2和p4 4口,sfr為定義暫存器,p4的位址為0xc...

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

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