在單片機應用系統中,按鍵主要有兩種形式:1、直接按鍵; 2、矩陣編碼鍵盤。直接按鍵的每個按鍵都單獨接到單片機的一個I/O口上,直接按鍵則通過判斷按鍵端口的電位即可識別按鍵操作;而矩陣鍵盤通過行列交叉按鍵編碼進行識別。下面我們以S51增強型單片機實驗板的直接按鍵來學習單片機輕觸按鍵在單片機系統中的應用。S51增強型單片機實驗板的4個輕觸按鍵原理圖。。。
S51增強型單片機輕觸按鍵原理圖 |
圖 1 |
一、按鍵時序分析
通常所用的按鍵為輕觸機械開關,正常情況下按鍵的接點是斷開的,當我們按壓按鈕時,由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而機械觸點在閉合及斷開的瞬間均伴隨有一連串的抖動,按鍵的時序如下圖2所示,抖動時間的長短由按鍵的機械特性及操作人員按鍵動作決定,一般為5ms~20ms;按鍵穩定閉合時間的長短是由操作人員的按鍵按壓時間長短決定的,一般為零點幾秒至數秒不等。
輕觸按鍵操作時序示意圖 |
![]() |
圖 2 |
從上面圖2中我們可以看到,一次完整的擊鍵過程,包含以下5個階段:
1. 等待階段: 此時按鍵尚未按下,處于空閑階段。
2. 前沿(閉合)抖動階段:此時按鍵剛剛按下,但按鍵信號還處于抖動狀態,這個時間一般為5~20ms。為了確保按鍵操作不會誤動作,此時必須有個前沿消抖動延時。
3. 鍵穩定階段:此時抖動已經結束,一個有效的按鍵動作已經產生。系統應該在此時執行按鍵功能;或將按鍵所對應的鍵值記錄下來,待按鍵釋放時再執行。
4. 后沿(釋放)抖動階段:一般來說,考究一點的程序應該在這里再做一次消抖延時,以防誤動作。但是,如果前面“前沿抖動階段”的消抖延時時間取值合適的話,可以忽略此階段。
5. 按鍵釋放階段:此時后沿抖動已經結束,按鍵已經處于完全釋放狀態,如果按鍵是采用釋放后再執行功能,則可以在這個階段進行按鍵操作的相關處理。
二、按鍵實驗例程
下面我們通過幾個實驗例程來學習按鍵掃描編程及按鍵軟件消抖動的編程,通過這些對比實驗,給大家一個更加感性的認識。
1、按鍵K1控制LED指示燈實驗:本程序通過實驗板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當K1按下開關時指示燈亮,再次按下時指示燈滅。
輕觸按鍵K1控制指示燈的實驗例程(沒有軟件消抖動處理) |
實驗結果分析: |
|
MAIN: JB P3.2,MAIN ;檢測按鍵K1有沒有按下 END |
|
|
|
2、改進的按鍵K1控制LED指示燈實驗:本程序通過實驗板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當K1按下開關時指示燈亮,再次按下時指示燈滅。
改進的輕觸按鍵K1控制指示燈的實驗例程(經過軟件消抖動處理) |
實驗結果分析: |
|
MAIN: JB P3.2,MAIN ;檢測按鍵K1有沒有按下 |
|
|
|
3、帶按鍵音效的按鍵掃描實驗例程:下面的按鍵掃描實驗例程除了有軟件消抖動功能外,還具有按鍵音效,當按壓按鍵K1~K4時候,按鍵號碼會顯示在實驗板的數碼管上,同時可以聽到按鍵音。