單片機(jī)通過(guò)軟件實(shí)現(xiàn)按鍵消抖
通過(guò)上圖可以看出理想波形與實(shí)際波形之間是有區(qū)別的,實(shí)際波形在按下和釋放的瞬間都有抖動(dòng)的現(xiàn)象,抖動(dòng)時(shí)間的長(zhǎng)短和按鍵的機(jī)械特性有關(guān),一般為5~10ms。通常我們手動(dòng)按鍵然后釋放,這個(gè)動(dòng)作中穩(wěn)定閉合的時(shí)間超過(guò)了20ms。因此單片機(jī)在檢測(cè)鍵盤(pán)是否按下時(shí)都要加上去抖動(dòng)操作,有專(zhuān)用的去抖動(dòng)電路,也有專(zhuān)門(mén)的去抖動(dòng)芯片,但通常我們采用軟件延時(shí)的方法就可以解決抖動(dòng)問(wèn)題。
軟件實(shí)現(xiàn)如下:
//軟件去抖if (0 == Keyport) // 如果有鍵按下{
delay_ms(8); // 延時(shí)一段時(shí)間消抖
if (0 == Keyport) // 如果真的有鍵按下檢測(cè)到的是穩(wěn)定閉合狀態(tài)
{ ......; // 按鍵實(shí)現(xiàn)的功能
}
while (!Keyport); // 俗稱(chēng)“死等”, 松手檢測(cè),如果按住不放則一
// 直在while()循環(huán)里}