新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 淺談按鍵消抖

        淺談按鍵消抖

        作者: 時間:2016-11-29 來源:網絡 收藏

        下面再介紹一種按鍵消抖的方法:利用switch()結構,程序設計如下:

        無延時的軟件消抖

        /*********************************************名稱:鍵盤掃描子函數功能:在按鍵穩定期內判斷鍵值,并返回鍵值**********************************************/uchar keyscan(void){static char key_state = 0;static char key_value = 0;uchar key_press, key_return = 0;key_press=turn_left&turn_right;     //讀按鍵I/O電平switch (key_state) {case 0 :   // 按鍵初始態if (key_press==0) key_state = 1; // 鍵被按下,但需要確認是否是干擾break;case 1 : // 按鍵確認態if (key_press==0)//如有鍵按下則不是干擾,判斷鍵值{       if(turn_left==0)   //判斷是哪一個按鍵被按下key_value=1;       //按鍵較多時可采用switch選擇結構else if(turn_right==0)key_value=2;else  key_value=0;key_state = 2; // 狀態轉換到鍵釋放態}else  key_state = 0; // 按鍵已抬起,屬于干擾,轉換到按鍵初始態break;case 2 :if (key_press==1) {key_return=key_value;//按鍵釋放后再輸出鍵值 key_value=0;key_state = 0; //如果按鍵釋放,轉換到按鍵初始態}  break;}return key_return; //返回鍵值}/*********************************************名稱:按鍵處理子函數功能:**********************************************/void key_operation(void){    switch (keyscan())      //根據鍵值不同,執行不同的內容{ case 1:hight_votage-=1;if(hight_votage<5)hight_votage=5; break;case 2:hight_votage+=1;if(hight_votage>25)hight_votage=25; break;default :break;} }

        只要有按鍵就一定要想到消抖,總之不管是硬件消抖還是軟件消抖,在腦海里始終要想到按鍵按下時出現圖一的情景,然后再進行相應的設計。

        幾個好的按鍵設計的總結
        對于多個按鍵的設計常用思路是: 按照面向過程的編程方式, 將數據與過程分離. 把和按鍵狀態相關的東西比如按鍵功能統統塞到結構里, 把消抖的代碼放在一個函數中。這里介紹按鍵設計的幾種方法:

        1、 矩陣鍵盤,http://www.51hei.com/f/jzjpcx.rar
        (這個文檔里放了幾個矩陣鍵盤的程序,個人覺得這幾個程序比較精簡,大家可以參看一下)

        2、 ADC按鍵,具體設計點擊這個網址:http://www.ceet.hbnu.edu.cn/bbs/viewthread.php?tid=7641&extra=&highlight=%CA%FD%D7%D6%CA%BE%B2%A8%C6%F7&page=2

        ADC按鍵的優點是節省IO口,但是需要調配好電阻值,個人覺得有點麻煩。

        3、 并入串出按鍵,具體設計點擊這個網址:http://www.ceet.hbnu.edu.cn/bbs/redirect.php?tid=8059&goto=lastpost#lastpost

        4、 4*3鍵盤并且復用端口很牛http://www.51hei.com/mcu/1316.html


        上一頁 1 2 下一頁

        關鍵詞: 按鍵消抖軟件消

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 苍溪县| 凌海市| 乳源| 徐闻县| 慈利县| 县级市| 石泉县| 敖汉旗| 梁平县| 华安县| 合水县| 太原市| 富裕县| 绥化市| 突泉县| 青阳县| 福安市| 金阳县| 琼海市| 平原县| 洮南市| 涞水县| 彭山县| 高安市| 娱乐| 象州县| 邯郸县| 田阳县| 阿鲁科尔沁旗| 利川市| 莱阳市| 南华县| 兴隆县| 茂名市| 呈贡县| 富民县| 武定县| 湟源县| 六枝特区| 井陉县| 舟山市|