微控制器 按鍵消抖及原理(硬體和軟體方法詳解)

2021-10-22 05:48:22 字數 2595 閱讀 1892

**:在設計微控制器按鍵輸入的時候,進行按鍵消抖是防止按鍵輸入被cpu誤讀多次的必要手段。

一、按鍵抖動

通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由於機械觸點的彈性作用,乙個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產生這種現象而作的措施就是按鍵消抖。

抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms。這是乙個很重要的時間引數,在很多場合都要用到。按鍵穩定閉合時間的長短則是由操作人員的按鍵動作決定的,一般為零點幾秒至數秒。為確保cpu對鍵的一次閉合僅作一次處理,必須去除鍵抖動。在鍵閉合穩定時讀取鍵的狀態,並且必須判別到鍵釋放穩定後再作處理。

二、按鍵消抖方法

1.硬體消抖:適用於按鍵較少時

(1)rs觸發器

圖中兩個「與非」門構成乙個rs觸發器。當按鍵未按下時,輸出為0;當鍵按下時,輸出為1。此時即使用按鍵的機械效能,使按鍵因彈性抖動而產生瞬時斷開(抖動跳開b),只要按鍵不返回原始狀態a,雙穩態電路的狀態不改變,輸出保持為0,不會產生抖動的波形。也就是說,即使b點的電壓波形是抖動的,但經雙穩態電路之後,其輸出為正規的矩形波。這一點通過分析rs觸發器的工作過程很容易得到驗證。

(2)電容器

利用電容的放電延時,採用併聯電容法,也可以實現硬體消抖。如圖所示,由於電容兩端電壓不能突變,使得按鍵兩端的電壓平緩變化,直至電容充放電到達一定電壓閾值時,微控制器才讀取到電平變化。

2.軟體消抖

如果按鍵較多,常用軟體方法消抖

(1)延時函式按鍵消抖

檢測出鍵閉合後執行乙個延時程式,5ms~10ms(取決於機械特性)的延時,讓前沿抖動消失後再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。當檢測到按鍵釋放後,也要給5ms~10ms的延時,待後沿抖動消失後才能轉入該鍵的處理程式。

優點:簡單方便

缺點:程式在空跑浪費cpu資源、不夠精準

例子:

if

(pxin

(x)==key_press)

}

注:如果按鍵是用中斷方式實現的,那就更不能在中斷服務函式裡面使用延時函式,因為中斷服務函式最基本的要求就是快進快出!

(2)定時器按鍵消抖

原理:按鍵採用中斷驅動方式,當按鍵按下以後觸發按鍵中斷,在按鍵中斷中開啟乙個定時器,定時週期為 10ms,當定時時間到了以後就會觸發定時器中斷,最後在定時器中斷處理函式中讀取按鍵的值,如果按鍵值還是按下狀態那就表示這是一次有效的按鍵。

如圖所示:

圖中 t1 ~ t3 這一段時間就是按鍵抖動,是需要消除的。設定按鍵為下降沿觸發(由按鍵的電路決定),因此會在 t1、t2 和 t3 這三個時刻會觸發按鍵中斷,每次進入中斷處理函式都會重新開器定時器中斷,所以會在 t1、t2 和 t3 這三個時刻開器定時器中斷。但是 t1 ~ t2 和 t2 ~ t3 這兩個時間段是小於我們設定的定時器中斷週期(也就是消抖時間,比如 10ms),所以雖然 t1 開啟了定時器,但是定時器定時時間還沒到 t2 時刻就重置了定時器,最終只有 t3 時刻開啟的定時器能完整的完成整個定時週期並觸發中斷,我們就可以在定時器中斷處理函式裡面做按鍵處理了。

優點:節約cpu資源

缺點:消耗乙個定時器

例子:

//初始化按鍵

void

key_init

(void

)//初始化按鍵io中斷

void

extix_init

(void

)//初始化定時器中斷

void

tim3_int_init

(u16 arr,u16 psc)

//按鍵的中斷處理函式

void

exti0_irqhandler

(void

)exti_clearitpendingbit

(exti_line0);}

//定時器3中斷處理函式

void

tim3_irqhandler

(void

)tim_clearitpendingbit

(tim3, tim_it_update);}

}

注:

1.消抖的定時時間由按鍵的機械特性決定,多除錯。

2.中斷處理函式處理完要清除相應中斷標誌。

3.進行按鍵處理後要清零和失能定時器,否則無按鍵按下時也在定時。

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...