51微控制器按鍵消抖

2021-10-04 17:58:28 字數 1650 閱讀 8675

二、矩陣鍵盤

define key_state_0 0

//判斷按鍵是否按下

#define key_state_1 1

//判斷按鍵是否抖動

#define key_state_2 2

//判斷按鍵是否彈起

#define key_input p3

#define key_mask 0x0f

void

key_read()

else key_state = key_state_0;

break

;case key_state_2:

if(key_press ==

0x0f

) key_state = key_state_0;

break;}

return key_return;

}int

main()

if(key_value ==2)

delay(10

);//延時10ms需自定義

}}

/*

1. 沒有按鍵按下 readdate=0 trg=0x00&(0x00^0x00)=0 cont=0

2. 按一次 key_input=0xfe readdate=0x01 trg=0x01&(0x01^0x00)=0x01 cont=0x01

3. 持續按下 trg=0x01&(0x01^0x00)=0x01 cont=0x01 下乙個掃瞄週期時

trg=0x01&(0x01^0x01)=0 cont=0x01

*/#define key_input p3

unsigned

char trg;

//判斷按鍵是否按下

unsigned

char cont;

//判斷按鍵是否持續按下

intkey_read()

intmain()

if(trg&

0x04)if

(trg&

0x02)if

(trg&

0x01

)delay(10

);//延時10ms需自定義

}}

define key_state_0 0

//判斷按鍵是否按下

#define key_state_1 1

//判斷按鍵是否抖動

#define key_state_2 2

//判斷按鍵是否彈起

#define key_input p3

#define key_mask 0x0f

intkey_read()

else

key_state =0;

break

;case key_state_2:

if(key_press ==

0xff

) key_state = key_state_0;

break;}

return key_return;

}int

main()

if(key_value ==2)

delay(10

);//延時10ms需自定義

}}

8 6 微控制器按鍵消抖

通常按鍵所用的開關都是機械彈性開關,當機械觸點斷開 閉合時,由於機械觸點的彈性作用,乙個按鍵開關在閉合時不會馬上就穩定的接通,在斷開時也不會一下子徹底斷開,而是在閉合和斷開的瞬間伴隨了一連串的抖動,如圖 8 10 所示。圖 8 10 按鍵抖動狀態圖 按鍵穩定閉合時間長短是由操作人員決定的,通常都會在...

微控制器之按鍵消抖

我們前面在電子中的學習中就接觸過按鍵,但是我們只清楚其電路圖代表的含義,卻不明白真正操作起來會遇到的一系列問題,由於機械觸點的彈性,乙個按鍵開關在閉合後不會馬上穩定接通,斷開時也不會馬上斷開,如果不處理的話,會導致按鍵識別為多下,故我們就來研究一下按鍵消抖 針對的是k1 k2 k3 實驗原理 這個電...

微控制器學習筆記 按鍵消抖

按鍵是我們學習微控制器時乙個重要的器件,我們在按下按鍵時,難免會一位手抖動或者接觸不穩定,但如果不消抖,按鍵按下的瞬間將會產生成百上千次按鍵有效的結果,最終的現象不可預料,所以有必要進行消抖。一 消抖原理 原理 使用定時器計時產生中斷,只要在一定次數的中斷內,按鍵按下有效的次數達到一定次數,就可以認...