
掃鍵流程:(設(shè)置某一IO口輸出為“0”――稱其為“掃某IO口”) 1、掃描直接接地的5個(gè)按鍵K61-K65,例如,若K61按下,則IO1-IO5為01111,若K62按下,IO為10111,依次類推。(二極管的導(dǎo)通壓降為零點(diǎn)幾父,單片機(jī)認(rèn)為邏輯0) 2、若判斷沒有按鍵,接著對逐一對IO口進(jìn)行掃鍵。例如,當(dāng)對IO1掃描時(shí)(IO1置0),檢測IO2-2O5的狀態(tài),若IO狀態(tài)為1110,則為K14按下,若為0111,則為K11按下。但當(dāng)對某一IO口掃鍵時(shí),如果有對地的鍵按下,這時(shí)有可能會(huì)誤判按鍵,因?yàn)閷Φ劓I比其他鍵有更高的響應(yīng)優(yōu)先級。例如:掃IO1,IO1 輸出“0”,恰好此時(shí)K62按下,IO2 檢測到有按鍵,那就不能判斷是K11 還是K62。。我們可以在程序上避免這種按鍵誤判:若IO2 檢測到有按鍵,那下一步就去判斷是否有對地鍵按下,判斷方法為:先將IO1-IO5置為11111,再去掃描IO1-IO5的狀態(tài),若IO狀態(tài)為10111,則可判為K62,如果沒有,即IO的狀態(tài)為11111,那就可以正確地判斷是K11了。 我們小結(jié)掃鍵個(gè)數(shù)S(N為IO口個(gè)數(shù)):
S = (N-1)*N + N ――啟用二極管
S = (N-1)*N /2 ――省掉二極管 詳細(xì)程序和仿真圖詳見:http://www.zg4o1577.cn/mcu/1413.html
|