按鍵定時掃描——有限狀態機的軟件實現方法(上)

按鍵定時掃描

                                    ——有限狀態機的軟件實現方法

由於按鍵掃描採用定時掃描方式,由連續2次或3次掃描的狀態來判斷按鍵是否按下,

所以可以採用有限狀態機--即時序邏輯思維,來判斷按鍵是否按下。

 

                         圖一

Keydown的卡諾圖:

得到邏輯表達式:                                       

Keydown  =~keyn-1&  keyn

Keyup    = keyn-1 & ~keyn

Keypress  =  keyn

此係統不能去抖

改進狀態機:

去抖算法原理:

按鍵掃描時序圖

定義變量:Curr_avoidkey   表示當前經去抖後的按鍵狀態 , 即Avoidkeyn

      Last_avoidkey   表示上次經去抖後的按鍵狀態,  即Avoidkeyn-1

      Curr_Scankey    表示當前掃描的按鍵狀態,     即keyn

      Last_Scankey    表示上次掃描的按鍵狀態,     即keyn-1

Curr_avoidkey;的狀態轉換表:

時刻

Last_Scankey

Curr_Scankey

Last_avoidkey

Curr_avoidkey

1

0

0

0

0

2

0

1

0

0

3

1

0

0

0

4

0

1

0

0

5

1

1

0

1

6

1

1

1

1

7

1

0

1

1

8

0

1

1

1

9

1

0

1

1

10

0

0

1

0

11

0

0

0

0

Curr_avoidkey的卡諾圖:

Curr_avoidkey = (Curr_Scankey & Last_Scankey) | Last_avoidkey & (Curr_Scankey ^ Last_Scankey)得算法表達式:

經過去抖算法後:

keydown   = (~Last_avoidkey) & Curr_avoidkey   

keyup     = Last_avoidkey & (~Curr_avoidkey)

keypress   = Curr_avoidkey

Last_Scankey = Curr_Scankey

Last_avoidkey= Curr_avoidkey

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章