向兵 楊述凱
摘 要:隨著電子技術的發(fā)展,單片機的應用在教學及科技開發(fā)中越來越普遍,而針對單片機的開發(fā)環(huán)境而言,大多采用C51語法進行設計。按鍵的使用在大多數(shù)硬件設計里相當頻繁,而按鍵的干擾處理可以使用硬件消抖,也可使用軟件消抖。這兩種方法可根據(jù)總體設計需求而選擇,以高效的方式處理所有任務。本文采用51單片機的其中一個定時器作為全局時鐘來定位處理任務,以不影響、不打斷其他正常工作的前提為標準,可大大提高處理器工作效率。
關鍵詞:單片機;按鍵;消抖;定時器
一、軟件消抖現(xiàn)狀
通常,我們會在程序中自定義一段延時程序命名為類似于delayms(unsigned int i)格式,然后在程序處理過程中判斷按鍵狀態(tài)達到要求后調用此函數(shù)來進行消抖。此方法在程序運行時,一旦按鍵狀態(tài)符合,需要進行延時等待二次判斷,任務較小的情況下能夠達到預期要求,若處理器任務較多,使用delayms函數(shù)進行延時會極大降低程序處理效率,且總體效果不佳。本文介紹的消抖方式是利用單片機定時器記錄全局時間,在每一次進入中斷后時鐘變量加1,在主要任務處理時循環(huán)判斷按鍵狀態(tài)變化時間,來達到類似于分時操作的效果。
二、程序初始化步驟
首先認為系統(tǒng)上電后按鍵狀態(tài)為高電平1,定義一個位變量:bit key_last_state=1,用來存儲程序運行過程中按鍵最后保持的狀態(tài)。我們將按鍵接在單片機P2.0引腳上,用變量key_current_state來表示P2.0引腳的電平,故定義:sbit key_current_state,此變量是由按鍵按下或松開之后的真實狀態(tài)變化。其次定義全局時鐘變量,將每一次進入中斷后總體時間變化量保存在其中,故有:unsigned int globle_time=0。本文中采用51單片機定時器0工作方式1產生1ms的時間間隔,即每1ms進入一次中斷服務程序。最后,定義按鍵變化時保存的臨時時間變量,故有:unsigned int key_last_time = 0。
至此,程序進入主函數(shù)后,首先應設置好定時器的工作模式及其方式,并賦予初始值。隨后配置好定時器0中斷,啟動定時器計時。
三、按鍵狀態(tài)識別及消抖
六、小結
本文采用單片機定時器作為時間基準,將全局時間保存在變量globle_time中,作為時間記錄值,消抖過程中可分時進行其他任務的操作,這樣,無需消耗多余的等待時間而降低程序效率。在消抖后進行當前按鍵狀態(tài)判斷時,可辨別出按鍵正常按下及松開兩種情況,分別做相應的程序處理及外圍控制。
參考文獻:
[1] 喬之勇等.單片機應用系統(tǒng)設計項目化教程[M].北京:電子工業(yè)出版社.2014.9
[2] 王靜霞.單片機基礎與應用[M].高等教育出版社.2016.3
[3]趙勇等.單片機原理與接口技術[M].電子科技大學出版社.2016.12
[4] 陳希球等.單片機應用.高等教育出版社[M].2017.4
作者簡介:
向兵(1990.10~),男,漢,四川南充人,助教,碩士研究生,從事單片機原理與應用、電子產品分析與制作等課程研究及項目開發(fā)。
楊述凱(1998.10~),男,漢,四川巴中人,綿陽職業(yè)技術學院信息工程系2017級,電子信息工程技術專業(yè)??圃谧x,擅長單片機開發(fā)、程序設計。
課題項目:綿陽職業(yè)技術學院,校級精品在線開放課程-《電子產品分析與 制作》