<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機按鍵程序設計及電路設計

單片機按鍵程序設計及電路設計

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

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

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

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

ORG 0000H
AJMP START ;跳轉到初始化程序

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

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

END

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

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

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

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

ORG 0000H
AJMP START ;跳轉到初始化程序

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

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

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

END

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

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

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

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

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



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

關(guān)鍵詞: 單片機 按鍵程序 S51增強型

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>