新聞中心

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

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

        作者: 時間:2013-01-15 來源:網絡 收藏

        二、按鍵實驗例程
        下面我們通過幾個實驗例程來學習按鍵掃描編程及按鍵軟件消抖動的編程,通過這些對比實驗,給大家一個更加感性的認識。

        1、按鍵K1控制LED指示燈實驗:本程序通過實驗板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當K1按下開關時指示燈亮,再次按下時指示燈滅。

        輕觸按鍵K1控制指示燈的實驗例程(沒有軟件消抖動處理) 實驗結果分析:

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

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

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

        END

        由于本實驗程序中沒有進行軟件消抖動延時處理,我們把程序燒寫到上運行時,多次按壓K1控制LED的亮滅,發控制不太穩定,大約按十次,LED發光二極管的輸出狀態有2到3次是錯誤的。

        這就是因為沒有軟件去抖動的原因,在按鍵的前沿抖動或后沿抖動期間,抖動脈沖均有可能被程序檢測而錯誤執行,此時相當于按鍵被按壓和松開了N次,LED的輸出狀態也已經改變了N次,故松開按鍵后LED的狀態是一個隨機結果。

        2、改進的按鍵K1控制LED指示燈實驗:本程序通過實驗板上的按鍵K1控制P1.0上的LED亮滅。程序功能如下:當K1按下開關時指示燈亮,再次按下時指示燈滅。

        改進的輕觸按鍵K1控制指示燈的實驗例程(經過軟件消抖動處理) 實驗結果分析:

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

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

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

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

        END

        由于本實驗程序中對按鍵的前沿抖動進行20ms的軟件消抖動延時處理,我們把程序燒寫到上運行,多次按壓K1控制LED的亮滅,發控制就很穩定了,不會出現控制錯誤的現象。

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

        本程序沒有對按鍵松開時的后沿抖動進行消抖動,如果在要求很嚴格的系統中,建議增加后沿消抖動延時處理,這樣可以確保按鈕不會產生誤動作。

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

        51單片機相關文章:51單片機教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 成都市| 巴青县| 上思县| 玛多县| 永兴县| 额尔古纳市| 宁德市| 边坝县| 南投市| 天镇县| 青田县| 桑植县| 西林县| 永登县| 库尔勒市| 方山县| 房山区| 读书| 贵南县| 罗甸县| 花垣县| 田东县| 长兴县| 扶余县| 斗六市| 岳阳市| 青浦区| 阿勒泰市| 北海市| 搜索| 巫山县| 岫岩| 大冶市| 平利县| 吉林省| 航空| 福鼎市| 四会市| 金川县| 台湾省| 白沙|