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

2021-09-26 08:16:58 字數 2121 閱讀 2085

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

一、消抖原理

原理:使用定時器計時產生中斷,只要在一定次數的中斷內,按鍵按下有效的次數達到一定次數,就可以認為按鍵按下了,此時返回乙個按鍵有效的現象。

例子:比如,我們設定200us產生乙個中斷,定義兩個變數:count_timeskey_pressed_times,每次中斷count_times加一,同時若檢測key按鍵被按下,則key_pressed_times加一。當count_times達到30時,若key_pressed_times>20,則認為按鍵按下了。

count_times:計算中斷次數

key_pressed_times:計算中斷時按鍵按下的次數

二、程式**

原理圖

按鍵的引腳:key1: p3.2、key2: p3.3

數碼管段選:p0[7…0]

數碼管位選:p2[2…0] + p2.3(解碼使能)

變數定義

#define uchar unsigned char

#define uint unsigned int

uchar code duanxuan[10]

=;uchar code weixuan[4]

=;sbit led_sel=p2^3;

//74lh138解碼器的使能

sbit key1=p3^2;

//按鍵key1

sbit key2=p3^3;

//按鍵key2

uint number;

//顯示在數碼管上的值

uint flag;

//位選的位置

int count_times,key1_pressed_times,key2_pressed_times;

//消抖中統計次數的量

bit status_p,status_p2;

//按鍵的錢後兩個狀態

init()函式

void

init()

中斷函式:控制數碼管顯示、統計中斷次數、統計key1和key2被按下的次數

void

interrupttimer0

()interrupt 1

flag++

;// 中斷次數 檢測key1、key2是否被按下

count_times++;if

(key1==0)

key1_pressed_times++;if

(key2==0)

key2_pressed_times++

;}

main()函式:每15ms採集一次資料,檢測按鍵是否可以被認為被按下

void

main()

}else status_p=1;

if(key2_pressed_times>=20)

}else status_p2=1;

count_times=0;

// 所有次數清零

key1_pressed_times=0;

key2_pressed_times=0;}}}

延時消抖:另一種消抖的辦法,如果某一時刻檢測到按鍵key為低電平(按下),再10us,如果按鍵還是低電平,則可認為按鍵按下是有效的。

if

( sbtkey1 ==0)

}

以上就是關於按鍵消抖的內容啦~

第五篇微控制器學習筆記完結,cheers ! ?

8 6 微控制器按鍵消抖

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

微控制器之按鍵消抖

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

51微控制器按鍵消抖

二 矩陣鍵盤 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 rea...