單片機的消抖
軟件消抖:如果按鍵較多,常用軟件方法去抖,即檢測出鍵閉合后執(zhí)行一個延時程序,產(chǎn)生5ms~10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測到按鍵釋放后,也要給5ms~10ms的延時,待后沿抖動消失后才能轉(zhuǎn)入該鍵的處理程序
可以在去抖程序里加入檢測松手程序例如 …… …… if(!key) //檢測鍵盤是否按下 delay()://去抖延時一般是50ms if(!key)//再次檢測鍵盤是否按下 ×××++: //這里寫數(shù)碼管加"1"程序 while(key);//加入寫句,目的是等待key變?yōu)樵瓉淼臓顟B(tài)才會執(zhí)行下一條指令!
1、按鍵在按下的時候、由于機械連接的不穩(wěn)定,導(dǎo)致剛剛被按鍵連通的電路中出現(xiàn)電平抖動。 2、在某些情況下,例如系統(tǒng)受到外部震動,也會在按鍵電路中出現(xiàn)電平抖動,但這種抖動不是控制者所希望的操作,如果沒有防抖動程序,那么系統(tǒng)會因這種不希望出現(xiàn)的干擾而錯誤動作。 3、為了避免系統(tǒng)誤判,可以編寫防抖動程序。程序流程的文字說明如下(假設(shè)按鍵按下后,低電平送到單片機): (1)是否有低電平輸入(按鍵電路按鍵被按下了嗎)?如果是,到(2)步執(zhí)行;不是,繼續(xù)執(zhí)行(1) (2)延時等待(可以使用定時器或非定時器都可以),然后執(zhí)行(3)步 (3)是否有低電平輸入?是的話,執(zhí)行后面的其他程序;不是,則跳轉(zhuǎn)到(1)步執(zhí)行 4、說明:干擾抖動的持續(xù)時間很短,為了防止(1)中的低電平是系統(tǒng)內(nèi)的干擾抖動,則延時等待一會,然后判斷是否真的按鍵按下。
并聯(lián)電容消抖:
用10K的上拉電阻與按鍵串聯(lián),然后按鍵并聯(lián)一個去抖電容,以用來消除按鍵的機械抖動 電容的計算方法如下: 電容的容值是根據(jù)機械按鍵的觸點抖動頻率而定,一般機械按鍵的抖動頻率為100Hz左右,當(dāng)按鍵閉合抖動時接觸時間在毫秒級,根據(jù)電容充放電的時間t=0.7*根號RC R=10K,C選0.1uF,電容的充放電時間約20ms,大于抖動時間,可將抖動濾除掉 通常電容C選取0.01uF~1uF
硬件消抖2:在鍵數(shù)較少時可用硬件方法消除鍵抖動。下圖所示的RS觸發(fā)器為常用的硬件去抖。
圖中兩個“與非”門構(gòu)成一個RS觸發(fā)器。當(dāng)按鍵未按下時,輸出為1;當(dāng)鍵按下時,輸出為0。此時即使用按鍵的機械性能,使按鍵因彈性抖動而產(chǎn)生瞬時斷開(抖動跳開B),中要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,不會產(chǎn)生抖動的波形。也就是說,即使B點的電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。這一點通過分析RS觸發(fā)器的工作過程很容易得到驗證。
評論