999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

按鍵消抖在單片機和FPGA實驗教學中的應用

2018-08-11 03:34:18徐能謀張海峰通訊作者
數碼世界 2018年7期
關鍵詞:單片機程序實驗教學

徐能謀 張海峰( 通訊作者)

引言:按鍵作為當今許多智能設備、計算機和工業控制領域的人機接口,為了能讓按鍵穩定有效的工作,按鍵消抖一直是在使用按鍵時必須解決的。在長期的科研與教學實踐過程中,按鍵消抖往往是高校學生在剛開始學習按鍵時比較難處理的問題。初學者即使掌握一些延時等按鍵消抖方法,但在實際應用的過程中還是經常會出現消抖不完全等問題,特別是利用單片機做一些大項目的時候,往往會出現不同的模塊之間相互干擾,進而導致整個系統不正常工作;在進入到EDA課程的學習中,在面對FPGA的按鍵消抖時,很多學生又會不知所措,無法用硬件描述語言去生成一個合適的消抖電路。因此,在單片機和FPGA實驗教學中,讓學生掌握好按鍵消抖對提升學生的學習能力和思維方式有著重要意義。

無論是矩陣按鍵還是獨立按鍵,在實際使用時,必須經過消抖處理。在單片機中,按鍵消抖可以通過延時、定時器等實現;在FPGA中可以則使用邊沿檢測的方法實現按鍵消抖,就按鍵消抖原理而言,和單片機的延時消抖沒有區別。但是,在單片機與FPGA中,按鍵消抖的具體實現方法有不同之處。除了本文中介紹的按鍵去抖動的方法之外,還有很多處理按鍵抖動的方法,例如使用狀態機來寫按鍵消抖,在單片機和FPGA中都有著很好的消抖效果。

1 按鍵消抖原理

在單片機和FPGA實驗教學中,按鍵是經常需要使用的重要模塊。按鍵通常有機械觸點,當按鍵在閉合或者斷開的瞬間,都會出現抖動。抖動的時間在5~10ms內,為了確保抖動完全被消除,本文采用消抖時間為20ms。在按鍵按下和放開時,按鍵的前沿抖動和后沿抖動如圖1所示。

圖1

按鍵消抖可以分為硬件消抖和軟件消抖兩大類。去抖動的原理基本相似,都是通過一定的方式,記錄下最開始按鍵按下時的狀態,然后經過一定的延時,渡過按鍵的抖動時間之后,再比較此時按鍵的狀態是否與延時之前的狀態相同,如果是相同的,那么就可以確定按鍵的確被按下;如果不同,則說明是抖動。在單片機中,通過與按鍵連接的I/O口電平來判斷狀態,延時則可以使用延時子程序實現,也可以通過計時器實現;在FPGA中,延時可以通過編寫硬件描述語言,例如Verilog HDL等,生成一個硬件去抖動電路。

2 單片機按鍵消抖

2.1 單片機按鍵硬件消抖

在單片機的教學實踐中,常用的硬件去抖動的方法是在按鍵兩端并聯小電容,可以起到一定的去抖動的作用。利用電容的充放電特性來對抖動過程中產生電壓毛刺進行平滑處理,從而實現按鍵消抖。但是同樣也存在明顯的缺點,這種消抖方式的效果往往不是很好,而且還增加了成本和電路復雜度,所以,在實際應用中使用的并不多。

2.2 單片機按鍵軟件消抖

軟件延時函數延時去抖動方式在程序較小、程序規模不大、單片機連接的外設不多時,去抖動的效果很好。但是,在使用單片機開發程序規模和單片機連接多個外設時,采用延時函數去抖動有著很明顯的缺陷。首先,單片機的CPU資源非常少,延時消抖與等待釋放需要消耗 CPU 運行時間,執行效率低下;其次,當按鍵按下的時候,CPU相當于一直在等待延時和釋放,執行空語句,從而會導致單片機系統中的其他外設由于得不到CPU資源無法正常工作。

軟件延時函數延時去抖動在面對規模較大的單片機開發時,缺點太突出,使得CPU使用效率下降。因此,當在進行較大規模單片機開發時,可以采用定時中斷來實現按鍵的去抖動,從而解決CPU利用率低的問題。不過,隨之出現的問題是,單片機的中斷源相對較少,因此,在單片機中采用軟件消抖時應考慮實際情況選擇合適的按鍵去抖動方案。

2.2.1 延時消抖

軟件延時消抖的原理,就是當檢測到按鍵狀態變化之后,先延時等待20ms,讓抖動消失之后再進行一次按鍵狀態檢測,如果與剛才檢測到的狀態相同,就可以確認按鍵已經穩定的動作了。下面是軟件延時消抖的參考程序:

//按鍵軟件延時消抖

void key_deal(keyin)

{

if(keyin==0)//按鍵剛剛按下

{

delay(20);// 延時 20ms

if(keyin==0)//確認按鍵被按下

{

while(keyin==0) ;//等待按鍵釋放

keyout=0;//此時按鍵抖動已去除

}

else keyout=1;

}

else keyout=1;

}

上面的程序是一個簡單的按鍵延時消抖程序,作為一個簡單延時消抖例程。但是,在實際的單片機做項目開發時,程序往往很大,狀態值也很多,主程序要不停的進行掃描,判斷各種狀態值是否發生變化,及時的進行任務調度,但是,delay語句會導致CPU被占用,主程序得不到執行,如果外部時間恰好在程序執行delay語句中發生,這樣很容易使的單片機丟失部分數據,最終導致系統不正常工作。

2.2.2 定時中斷消抖

為了解決軟件延時消抖帶來的弊端,同時又要完成按鍵去抖動,此時,可以采用定時中斷方式實現按鍵消抖。定時中斷消抖很好的避免了延時消抖中占用單片機的執行時間,當主程序檢測到按鍵被按下時,開啟定時器,定時時間設置為20ms,當到達定時時間之后將定時標志位置1。在主程序中,檢測到定時標志為置1之后停止定時器,同時判斷按鍵是否仍然被按下,如果是,那么按鍵消抖完成并且按鍵已經穩定,否則按鍵沒有被成功按下。

雖然定時中斷消抖可以解決延時消抖的弊端,但是在實際應用過程中,單片機的中斷源相對少,當工程項目很大時,中斷源將會不夠用,此時,定時中斷消抖顯然不太合適。為了解決定時中斷消抖在面對中斷源較少時的情況,還可以采用狀態機的方法實現按鍵消抖。

3 FPGA按鍵消抖

在FPGA開發中,硬件去抖動電路時十分常用,利用硬件描述語言,可以直接生成硬件去抖動的電路。與單片機中的按鍵消抖相比,FPGA最大的優勢在與電路的可靠性高,而不像單片機十分依賴于軟件,并且,生成的所有硬件都可以并行運行,沒有單片機串行運行的限制。因此,在FPGA中做硬件去抖動電路比在單片機上做要更簡單。

采用與單片機軟件消抖的原理,FPGA中按鍵消抖的基本思想是:首先,外部需要提供一個時鐘,然后每個時鐘上升沿都來的時候都去檢查看按鍵狀態是否發生變化,如果變化,則相應的計數器啟動,當計數器記滿一定時間并且期間按鍵值沒有變化時,說明此時的按鍵值是穩定的,可以讀取。然后根據去抖動之后的按鍵值的變化做相應的功能處理。

在FPGA中,采用延時消抖有兩種方法,一種是將抖動時間計算在延時時間內,從按鍵按下開始,計時器工作,當計數滿足20ms之后,判斷按鍵是否仍然被按下,從而實現按鍵消抖。下面是使用Verilog HDL編寫的按鍵消抖參考程序:

always @(posedge CLK_1kHz)

begin

if(keyin==0 & KL==0)

KL<=1;

else if(KL>0 & KL<20)

KL<=KL+1;

else if(KL==20 & keyin==0)

begin keyout<=1`b0;KL<=0;end

else

keyout<=1`b1;

end

同時,利用Maxplus II對程序進行波形仿真,在輸入上手動加上一些抖動,觀察輸出。波形仿真如圖2所示。

圖2

從仿真波形圖可以看出,這種方法可以消除按鍵的抖動。另一種方法就是不計算抖動時間,讀取按鍵當前值并且按鍵值在20ms內一直保持不變后,就可以確定按鍵進入了穩定狀態,此時再讀取該按鍵的值,實現按鍵去抖動。下面是使用Verilog HDL編寫的按鍵消抖參考程序:

//按鍵去抖動處理 key是按鍵 CLK頻率是1kHz keyout是去抖動之后的按鍵值

always @(posedge CLK_1kHz)//記錄按鍵在高電平下穩定持續時間

begin

if(!keyin) KL<=KL+1;

else KL<=0;

end

always @(posedge CLK_1kHz)//記錄按鍵在低電平下穩定持續時間

begin

if(keyin) KH<=KH+1;

else KH<=0;

end

always @(posedge CLK_1kHz)//判斷按鍵穩定持續時間是否達到20ms

begin

if(KH>20) keyout<=1`b1;

else if(KL>20) keyout<=1`b0;

end

同時,利用Maxplus II對程序進行波形仿真,在輸入上手動加上一些抖動,觀察輸出。波形仿真如圖3所示。

圖3

經過波形仿真可以看出,第二種方法顯然可以很好的解決按鍵抖動,消除了前沿和后沿抖動,實現了按鍵消抖。

上面兩種方法都可以實現FPGA按鍵消抖。然而,相比于第一種消抖方式,第二種消抖方式更為常用和有效。首先,第二種方式具有前沿和后沿消抖;其次,在按鍵按下或者放開的過程中,如果按鍵存在毛刺,那么該電路也可以有效的消除這些毛刺,使得電路更加穩定可靠。

4 結束語

在單片機和FPGA實驗教學中,利用本文介紹的按鍵消抖方法可以有效的處理按鍵在動作時的抖動問題。除了上述介紹的一些按鍵去抖動的方法之外,還有很多按鍵消抖的方法,像利用狀態機實現去消抖、累乘消抖[4]等,這些去抖動的方法也具有很強的實用性。在眾多的按鍵消抖方式中,每種方法各有利弊,在實際的實驗或者項目開發時,需要根據實際的軟件資源、硬件資源、成本等綜合考慮,從中選出合適的按鍵消抖方式。

猜你喜歡
單片機程序實驗教學
小議初中化學演示實驗教學
甘肅教育(2020年4期)2020-09-11 07:42:36
電容器的實驗教學
物理之友(2020年12期)2020-07-16 05:39:20
對初中化學實驗教學的認識和體會
甘肅教育(2020年8期)2020-06-11 06:10:04
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
幾何體在高中數學實驗教學中的應用
主站蜘蛛池模板: 99re66精品视频在线观看| 免费AV在线播放观看18禁强制| 国产精品视频系列专区| 亚洲AⅤ综合在线欧美一区| 亚洲国产成人自拍| 99热线精品大全在线观看| 国产精品无码一区二区桃花视频| 精品国产91爱| 亚洲日本中文字幕天堂网| 99er精品视频| 国产精品吹潮在线观看中文| 国产在线小视频| 日韩欧美国产精品| 大学生久久香蕉国产线观看| 黄色片中文字幕| 午夜性爽视频男人的天堂| 国产精品网曝门免费视频| 找国产毛片看| 欧美成人一级| 亚洲va在线观看| 中日韩一区二区三区中文免费视频 | 国产精品私拍在线爆乳| 成人在线亚洲| 国产精品手机在线观看你懂的| 亚洲日韩国产精品综合在线观看| 国内精品视频区在线2021| 99久久精品国产麻豆婷婷| 毛片网站观看| 国产又大又粗又猛又爽的视频| 国产成人一二三| 99视频只有精品| 九九久久精品国产av片囯产区| 国产精品尹人在线观看| 少妇精品在线| P尤物久久99国产综合精品| 亚洲第一区在线| 无码内射在线| 国产在线自在拍91精品黑人| 日韩欧美综合在线制服| 一级香蕉视频在线观看| 97视频免费看| 99一级毛片| 亚洲成人动漫在线| 综合人妻久久一区二区精品| 一级香蕉人体视频| 久久精品国产一区二区小说| 国产精品九九视频| 国产97视频在线观看| 99视频精品在线观看| 蜜臀AV在线播放| 一本二本三本不卡无码| 欧美成人第一页| 国产精品永久不卡免费视频| 午夜爽爽视频| 扒开粉嫩的小缝隙喷白浆视频| 99人体免费视频| 97精品久久久大香线焦| 2021天堂在线亚洲精品专区| 亚洲一区二区约美女探花| 免费又黄又爽又猛大片午夜| 无码啪啪精品天堂浪潮av| 久久网欧美| 国产美女无遮挡免费视频网站| 亚洲精品无码高潮喷水A| 激情无码字幕综合| 国产95在线 | 国产美女无遮挡免费视频网站 | JIZZ亚洲国产| 免费一级毛片完整版在线看| 最新午夜男女福利片视频| 四虎永久免费地址在线网站 | 华人在线亚洲欧美精品| 99精品免费欧美成人小视频 | 99热这里只有精品2| 日韩资源站| 美女黄网十八禁免费看| 114级毛片免费观看| 91成人在线免费观看| 国产亚洲现在一区二区中文| 青草91视频免费观看| 国产第一页亚洲| 中文字幕66页|