下面是**
/*功能:利用狀態機消抖法實現矩陣鍵盤,按s4開led1,按s5開led5*/
#include
"reg52.h"
//用狀態機消抖的方法實現矩陣鍵盤
#include
"intrins.h"
sfr p4 =
0xc0
;//矩陣鍵盤p3^6和p3^7口實際對應p4^2和p4^4口,sfr為定義暫存器,p4的位址為0xc0,
sbit p42 = p4^2;
sbit p44 = p4^4;
//key_return對應相應按鍵
#define key p3
//key為p3口對應值
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
unsigned
char state_p24;
//p3口和p42,p44的資料
sbit buzzer = p0^6;
char
read_key
(void
)else
}else
else
} key1=state_p24&
0xf0;
key=
0x0f
;p42=
0;p44=0;
//讀低四位
if(p42)
//讀取p30,p31,p32,p33
else
}else
else
} key2=state_p24&
0x0f;
key_press=key1|key2;
//讀取p3口的值
switch
(key_state)
else
key_state = key_state_0;
break
;case key_state_2:
//判斷按鍵是否彈起
if(key_press==
0xff
) key_state = key_state_0;
break;}
return key_return;
//返回各按鍵對應值
}void
delay10ms()
while
(--i);}
void
main()
if(key_val==5)
//如果鍵值等於s5按下的鍵值
delay10ms()
;}}
用狀態機實現鍵盤消抖
一直用狀態機做鍵盤消抖,覺得很好用,不必延時等待鍵盤穩定,當檢測到有鍵按下或彈起時能發出相應的鍵盤訊息,英文不好,只好用拼音做變數名和函式名,將就看吧 設定狀態機有4種狀態,a0,a1,a2,a3 初始時處於a0狀態,當掃瞄發現有鍵按下時,轉入到a1狀態。當處於a1狀態時,當掃瞄發現有鍵按下並且鍵值...
狀態機按鍵消抖
一般的按鍵輸入軟體介面程式非常簡單,在程式中一旦檢測到按鍵輸入口為低電平 有時可能為高 便採用軟體延時的方法來進行消抖,然後再次檢測按鍵輸入,如果再次確認為低電平則表示有按鍵按下,轉入執行按鍵處理程式。如果延時後檢測的電平為高電平則放棄本次按鍵檢測,重新開始一次按鍵檢測過程。在簡單的系統中這種方法比...
微控制器學習07 狀態機
簡介資料 有限狀態機 fsm 是表示有限個狀態及在這些狀態之間的轉移和動作等行為的數學模型,通常fsm包含幾個要素 狀態的管理 狀態的監控 狀態的觸發 狀態觸發後引發的動作。1 數學語言描述如下 乙個有限狀態機m是乙個五元組,m k,e,t,s,z 其中 1 k是乙個有窮集,其中的每個元素稱為狀態 ...