在單片機(jī)應(yīng)用系統(tǒng)中,按鍵主要有兩種形式:1、直接按鍵; 2、矩陣編碼鍵盤。直接按鍵的每個按鍵都單獨(dú)接到單片機(jī)的一個I/O口上,直接按鍵則通過判斷按鍵端口的電位即可識別按鍵操作;而矩陣鍵盤通過行列交叉按鍵編碼進(jìn)行識別。下面我們以S51增強(qiáng)型單片機(jī)實驗板的直接按鍵來學(xué)習(xí)單片機(jī)輕觸按鍵在單片機(jī)系統(tǒng)中的應(yīng)用。
S51增強(qiáng)型單片機(jī)輕觸按鍵原理圖
圖 1
一、按鍵時序分析
通常所用的按鍵為輕觸機(jī)械開關(guān),正常情況下按鍵的接點(diǎn)是斷開的,當(dāng)我們按壓按鈕時,由于機(jī)械觸點(diǎn)的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而機(jī)械觸點(diǎn)在閉合及斷開的瞬間均伴隨有一連串的抖動,按鍵的時序如下圖2所示,抖動時間的長短由按鍵的機(jī)械特性及操作人員按鍵動作決定,一般為5ms~20ms;按鍵穩(wěn)定閉合時間的長短是由操作人員的按鍵按壓時間長短決定的,一般為零點(diǎn)幾秒至數(shù)秒不等。
輕觸按鍵操作時序示意圖
圖 2
從上面圖2中我們可以看到,一次完整的擊鍵過程,包含以下5個階段:
1. 等待階段: 此時按鍵尚未按下,處于空閑階段。
2. 前沿(閉合)抖動階段:此時按鍵剛剛按下,但按鍵信號還處于抖動狀態(tài),這個時間一般為5~20ms。為了確保按鍵操作不會誤動作,此時必須有個前沿消抖動延時。
3. 鍵穩(wěn)定階段:此時抖動已經(jīng)結(jié)束,一個有效的按鍵動作已經(jīng)產(chǎn)生。系統(tǒng)應(yīng)該在此時執(zhí)行按鍵功能;或?qū)存I所對應(yīng)的鍵值記錄下來,待按鍵釋放時再執(zhí)行。
4. 后沿(釋放)抖動階段:一般來說,考究一點(diǎn)的程序應(yīng)該在這里再做一次消抖延時,以防誤動作。但是,如果前面“前沿抖動階段”的消抖延時時間取值合適的話,可以忽略此階段。
5. 按鍵釋放階段:此時后沿抖動已經(jīng)結(jié)束,按鍵已經(jīng)處于完全釋放狀態(tài),如果按鍵是采用釋放后再執(zhí)行功能,則可以在這個階段進(jìn)行按鍵操作的相關(guān)處理。
二、按鍵實驗例程
下面我們通過幾個實驗例程來學(xué)習(xí)按鍵掃描編程及按鍵軟件消抖動的編程,通過這些對比實驗,給大家一個更加感性的認(rèn)識。
1、按鍵K1控制LED指示燈實驗:本程序通過實驗板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當(dāng)K1按下開關(guān)時指示燈亮,再次按下時指示燈滅。
輕觸按鍵K1控制指示燈的實驗例程(沒有軟件消抖動處理) 實驗結(jié)果分析:
ORG 0000H
AJMP START ;跳轉(zhuǎn)到初始化程序
ORG 0033H
START:MOV SP,#60H ;SP初始化
MOV P3,#0FFH ;端口初始化
MAIN: JB P3.2,MAIN ;檢測按鍵K1有沒有按下
CPL P1.0 ;執(zhí)行按鍵命令,改變P1.0指示燈狀態(tài)
JNB P3.2,$ ;等待按鍵K1釋放
AJMP MAIN ;返回重新檢測按鍵
END
由于本實驗程序中沒有進(jìn)行軟件消抖動延時處理,我們把程序燒寫到單片機(jī)上運(yùn)行時,多次按壓K1控制LED的亮滅,發(fā)控制不太穩(wěn)定,大約按十次,LED發(fā)光二極管的輸出狀態(tài)有2到3次是錯誤的。
這就是因為沒有軟件去抖動的原因,在按鍵的前沿抖動或后沿抖動期間,抖動脈沖均有可能被程序檢測而錯誤執(zhí)行,此時相當(dāng)于按鍵被按壓和松開了N次,LED的輸出狀態(tài)也已經(jīng)改變了N次,故松開按鍵后LED的狀態(tài)是一個隨機(jī)結(jié)果。
2、改進(jìn)的按鍵K1控制LED指示燈實驗:本程序通過實驗板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當(dāng)K1按下開關(guān)時指示燈亮,再次按下時指示燈滅。
改進(jìn)的輕觸按鍵K1控制指示燈的實驗例程(經(jīng)過軟件消抖動處理) 實驗結(jié)果分析:
ORG 0000H
AJMP START ;跳轉(zhuǎn)到初始化程序
ORG 0033H
START:MOV SP,#60H ;SP初始化
MOV P3,#0FFH ;端口初始化
MAIN: JB P3.2,MAIN ;檢測按鍵K1有沒有按下
ACALL YS20ms ;消前沿抖動延時,實現(xiàn)軟件去抖動
JB P3.2,MAIN ;再次檢測按鍵,如果為高電平,則是抖動
CPL P1.0 ;執(zhí)行按鍵命令,改變P1.0指示燈狀態(tài)
JNB P3.2,$ ;等待按鍵K1釋放
AJMP MAIN ;返回重新檢測按鍵
YS20ms:
MOV R7,#40 ;延時20ms子程序
YS1: MOV R6,#229
DJNZ R6,$
DJNZ R7,YS1
RET
END
由于本實驗程序中對按鍵的前沿抖動進(jìn)行20ms的軟件消抖動延時處理,我們把程序燒寫到單片機(jī)上運(yùn)行,多次按壓K1控制LED的亮滅,發(fā)控制就很穩(wěn)定了,不會出現(xiàn)控制錯誤的現(xiàn)象。
通過本實驗,可以看出軟件去抖動延時還是很重要的,消抖動延時時間一般在5~20ms之間,實際應(yīng)用時候根據(jù)實驗取得最佳延時。
本程序沒有對按鍵松開時的后沿抖動進(jìn)行消抖動,如果在要求很嚴(yán)格的系統(tǒng)中,建議增加后沿消抖動延時處理,這樣可以確保按鈕不會產(chǎn)生誤動作。
3、帶按鍵音效的按鍵掃描實驗例程:下面的按鍵掃描實驗例程除了有軟件消抖動功能外,還具有按鍵音效,當(dāng)按壓按鍵K1~K4時候,按鍵號碼會顯示在實驗板的數(shù)碼管上,同時可以聽到按鍵音。
-
led
+關(guān)注
關(guān)注
242文章
23849瀏覽量
674405 -
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44998瀏覽量
650786 -
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
83029
發(fā)布評論請先 登錄
AVR單片機(jī)的程序設(shè)計方法
單片機(jī)C語言程序設(shè)計的20例基礎(chǔ)程序設(shè)計詳細(xì)資料概述

單片機(jī)基礎(chǔ)教程之匯編語言程序設(shè)計知識的詳細(xì)資料說明

AVR單片機(jī)讀卡器程序設(shè)計的資料說明

AD轉(zhuǎn)換器CS5550與單片機(jī)的接口程序設(shè)計的論文資料說明

單片機(jī)的計時程序設(shè)計資料免費(fèi)下載

使用51單片機(jī)進(jìn)行廣告屏和按鍵掃描的C語言程序和設(shè)計資料說明

STC12C5616AD單片機(jī)實現(xiàn)16位AD按鍵的電路圖和源代碼等資料說明

使用單片機(jī)實現(xiàn)按鍵發(fā)音的程序和仿真電路圖免費(fèi)下載

使用單片機(jī)實現(xiàn)按鍵發(fā)音的程序和仿真電路圖免費(fèi)下載

使用單片機(jī)實現(xiàn)門鈴設(shè)計的程序和資料說明

單片機(jī)按鍵使用程序 (51單片機(jī))

STM32F103ZET6單片機(jī)雙串口互發(fā)程序設(shè)計與實現(xiàn)

評論