張紅軍 賀州學院數學與計算機學院
在我國常見的單片機控制電路設計中,由于機械的特殊性導致其在投產中并不能夠達到理想的效果。在電路設計預期效果中,其想要達到按鍵按下則點位遍地,按鍵釋放則點位變高,如圖1所示。但是在實際操作中,通常是機械按鍵按下后經過多次高低電位的變化后才變成持續穩定的低電壓,按鍵經過多次釋放后才能夠慢慢恢復到想要的穩定高電壓。當這個變化過程必然經過高低壓的震動,因此我們將這個過程稱之為抖動。抖動時間通常為6-12ms,在設計時取值為8ms。也正是因為抖動的產生,所以雖然只按了一次鍵,但是實際上機器已經接收了多次按鍵。如果使用單片機控制按鍵+1電路,如果不消除抖動,則數碼管的顯示次數會非常多,進而導致數碼管顯示數據出現抖動現象。如果噪音的干擾較為嚴重,及時沒有人為操作,也會使單片機因為干擾噪音的出現而自動運行,進而造成操作失誤現象的產生。這種失誤將會造成非常大的瞬時,所以在消抖程序中加入抗干擾程序是必須要進行的程序。本文以單片機按鍵+1的電路為例子,敘述C語言抗干擾消抖的程序設計。

圖1 理想波形圖
消除抖動的方式有兩種,一種是硬件,另一種是軟件。其中,硬件消除抖動的方式也分為RS硬件消抖、電容濾波消抖、中斷法消抖三種形式。硬件消除抖動可以編寫消抖程序,并將其運用到元件、電路板、成本等環節中,就可以實現消抖。通過軟件消抖可以借助高低電平變化來實現。以下是具體的消抖程序介紹:
硬件消抖就是將抖動消除在信號輸入之前,這樣就可以節省資源,提高系統對于信號的感知力。
運用兩個與非門構成一個RS硬件,再利用其記憶作用消除抖動對于及其的作用力。當開關每切換一次,輸出端就進行一次操作,進而消除抖動的影響。
1.1.2 電容濾波消抖
使用RS鎖存器進行消抖,只能夠在單刀雙擲開關中取得良好的效果。在當前常用的鍵盤中,常常是兩個接線端的按鍵。針對這一按鍵的特征,可以將電容并聯到案件中,利用平波的方式進行調整,從而消除脈沖波。
1.1.3 中斷法消抖
每個案件都需要與外部中斷口相連接,當對按鍵進行按動時,可以引起單片機的中斷,進而消除抖動。這種方法可以不用在主程序中進行查詢,只需要中斷之后再處理相應的問題即可。缺點就是單片機的中斷是非常有價值的,一旦發生中斷將會導致數據丟失,因此當前對于這種消抖方法比較少用。
有上述可知,如果采用硬件消抖的方式對單片機進行消抖,則N個按鍵就必須要進行N個防抖程序設計。所以,當按鍵比較多的時候,硬件防抖程序將無法進行操作,這也暴露出了硬件消抖的弊端。在這種情況下,可以選取軟件的方式進行防抖。軟件消抖是采用降低鍵盤輸入端口的接收信號頻率,從而將高頻抖動變化成低頻抖動,一旦發現案件閉合,就進行8s的延時,讓前一個抖動小時候則再一次進入檢測的狀態,如果仍在閉合狀態,則確認是否有按鍵按下。當按鍵釋放后再進行8s的延時,當抖動全部消失后轉入處理程序。一般程序代碼如下所示:
如果程序是if(v==0)的狀態則證明按鍵發生了變化,繼續進行下一步驟
在程序出現delay的狀態時經歷8s延時,經歷按鍵抖動
當if(v==0)時進行第二次檢測按鍵狀態
然后執行下面程序
結束
可以通過QR1的數值判斷按鍵是否經歷過按下或是釋放。QR1;在延時8s后按下抖動期后再次判斷,如果QR=0則是人為操作,如果QR≠0則證明其他原因干擾導致的。因此在程序流程設計中,可以按照如下步驟來設計:
第一步設立為開始,按鍵是否按下,如果是延時8s,若不是返回。延時8s后進行第二次的按鍵是否按下檢查,如果是則繼續,如果不是則返回到第一步。當第二次檢查后進行按鍵是否釋放的檢查,如若是,則延時8s,如果否則返回第二次按鍵是否按下的檢查中。當延時8s后檢查按鍵是否釋放,如若是進行接下來的按鍵是否釋放檢查;如若不是則返回上億步按鍵是否釋放的檢查中。如若按鍵已經全部釋放則進行執行功能程序段的檢查,最后結束。
在C語言下的抗干擾消抖按鍵程序電路設計中,充分考慮了消抖按鍵程序的實際使用情況,并針對抗干擾程序的運行等問題對于電路設計進行了適當的調整,具體電路設計圖如下所示:

圖3 電路設計圖
可以通過上述的電路設計和流程設計,設定抗干擾消抖按鍵程序如下所示:


綜上所述,只要將執行功能程序段的設計稍微改動一下,就可以將原本的按鍵釋放后數碼顯示管顯示,改變為按鍵按下后數碼顯示管顯示。同理,將本程序稍微改動一下,也可以將+1的電路變為-1的電路。
[1] 印健健. 基于C語言的抗干擾消抖按鍵程序設計[J]. 數字技術與應用, 2015,10(8):185-186
[2] 程佳佳. 基于VHDL的按鍵消抖程序設計[J]. 科教導刊:電子版, 2017,7(24):222-223
[3] 楊張利. 按鍵消抖程序設計在單片機中的運用[J]. 科技致富向導, 2014,1(20):267-268
[4] 侯玉寶, 陳忠平, 鄔書躍. 51單片機C語言程序設計經典實例[M]. 電子工業出版社, 2016,2(7):00012-00015