新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)按鍵程序設(shè)計(jì)及電路設(shè)計(jì)

單片機(jī)按鍵程序設(shè)計(jì)及電路設(shè)計(jì)

作者: 時(shí)間:2013-01-15 來(lái)源:網(wǎng)絡(luò) 收藏

二、按鍵實(shí)驗(yàn)例程
下面我們通過(guò)幾個(gè)實(shí)驗(yàn)例程來(lái)學(xué)習(xí)按鍵掃描編程及按鍵軟件消抖動(dòng)的編程,通過(guò)這些對(duì)比實(shí)驗(yàn),給大家一個(gè)更加感性的認(rèn)識(shí)。

1、按鍵K1控制LED指示燈實(shí)驗(yàn):本程序通過(guò)實(shí)驗(yàn)板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當(dāng)K1按下開(kāi)關(guān)時(shí)指示燈亮,再次按下時(shí)指示燈滅。

輕觸按鍵K1控制指示燈的實(shí)驗(yàn)例程(沒(méi)有軟件消抖動(dòng)處理) 實(shí)驗(yàn)結(jié)果分析:

ORG 0000H
AJMP START ;跳轉(zhuǎn)到初始化程序

ORG 0033H
START:MOV SP,#60H ;SP初始化
MOV P3,#0FFH ;端口初始化

MAIN: JB P3.2,MAIN ;檢測(cè)按鍵K1有沒(méi)有按下
CPL P1.0 ;執(zhí)行按鍵命令,改變P1.0指示燈狀態(tài)
JNB P3.2,$ ;等待按鍵K1釋放
AJMP MAIN ;返回重新檢測(cè)按鍵

END

由于本實(shí)驗(yàn)程序中沒(méi)有進(jìn)行軟件消抖動(dòng)延時(shí)處理,我們把程序燒寫到上運(yùn)行時(shí),多次按壓K1控制LED的亮滅,發(fā)控制不太穩(wěn)定,大約按十次,LED發(fā)光二極管的輸出狀態(tài)有2到3次是錯(cuò)誤的。

這就是因?yàn)闆](méi)有軟件去抖動(dòng)的原因,在按鍵的前沿抖動(dòng)或后沿抖動(dòng)期間,抖動(dòng)脈沖均有可能被程序檢測(cè)而錯(cuò)誤執(zhí)行,此時(shí)相當(dāng)于按鍵被按壓和松開(kāi)了N次,LED的輸出狀態(tài)也已經(jīng)改變了N次,故松開(kāi)按鍵后LED的狀態(tài)是一個(gè)隨機(jī)結(jié)果。

2、改進(jìn)的按鍵K1控制LED指示燈實(shí)驗(yàn):本程序通過(guò)實(shí)驗(yàn)板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當(dāng)K1按下開(kāi)關(guān)時(shí)指示燈亮,再次按下時(shí)指示燈滅。

改進(jìn)的輕觸按鍵K1控制指示燈的實(shí)驗(yàn)例程(經(jīng)過(guò)軟件消抖動(dòng)處理) 實(shí)驗(yàn)結(jié)果分析:

ORG 0000H
AJMP START ;跳轉(zhuǎn)到初始化程序

ORG 0033H
START:MOV SP,#60H ;SP初始化
MOV P3,#0FFH ;端口初始化

MAIN: JB P3.2,MAIN ;檢測(cè)按鍵K1有沒(méi)有按下
ACALL YS20ms ;消前沿抖動(dòng)延時(shí),實(shí)現(xiàn)軟件去抖動(dòng)
JB P3.2,MAIN ;再次檢測(cè)按鍵,如果為高電平,則是抖動(dòng)
CPL P1.0 ;執(zhí)行按鍵命令,改變P1.0指示燈狀態(tài)
JNB P3.2,$ ;等待按鍵K1釋放
AJMP MAIN ;返回重新檢測(cè)按鍵

YS20ms:
MOV R7,#40 ;延時(shí)20ms子程序
YS1: MOV R6,#229
DJNZ R6,$
DJNZ R7,YS1
RET

END

由于本實(shí)驗(yàn)程序中對(duì)按鍵的前沿抖動(dòng)進(jìn)行20ms的軟件消抖動(dòng)延時(shí)處理,我們把程序燒寫到上運(yùn)行,多次按壓K1控制LED的亮滅,發(fā)控制就很穩(wěn)定了,不會(huì)出現(xiàn)控制錯(cuò)誤的現(xiàn)象。

通過(guò)本實(shí)驗(yàn),可以看出軟件去抖動(dòng)延時(shí)還是很重要的,消抖動(dòng)延時(shí)時(shí)間一般在5~20ms之間,實(shí)際應(yīng)用時(shí)候根據(jù)實(shí)驗(yàn)取得最佳延時(shí)。

本程序沒(méi)有對(duì)按鍵松開(kāi)時(shí)的后沿抖動(dòng)進(jìn)行消抖動(dòng),如果在要求很嚴(yán)格的系統(tǒng)中,建議增加后沿消抖動(dòng)延時(shí)處理,這樣可以確保按鈕不會(huì)產(chǎn)生誤動(dòng)作。

3、帶按鍵音效的按鍵掃描實(shí)驗(yàn)例程:下面的按鍵掃描實(shí)驗(yàn)例程除了有軟件消抖動(dòng)功能外,還具有按鍵音效,當(dāng)按壓按鍵K1~K4時(shí)候,按鍵號(hào)碼會(huì)顯示在實(shí)驗(yàn)板的數(shù)碼管上,同時(shí)可以聽(tīng)到按鍵音。

51單片機(jī)相關(guān)文章:51單片機(jī)教程



上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉