單片機如何用一個IO口采集多個按鍵信號?

一般按鍵信號都是高低電平,對于每一個按鍵信號單片機都需要一個IO口進行采集,這種按鍵采集方式比較簡單,但是占用的單片機IO口比較多。

  • 單片機
Image placeholder
管理員 2021-03-03 18:38

一般按鍵信號都是高低電平,對于每一個按鍵信號單片機都需要一個IO口進行采集,這種按鍵采集方式比較簡單,但是占用的單片機IO口比較多。

如果按鍵非常多,例如鍵盤,可以采用行列陣列方式進行信號采集。這種方式僅需要少量IO口即可采集大量的按鍵信號。例如7個IO口可以最多采集3*4=12個按鍵信號。

但是這種采集方式的編程比較復雜,再加上按鍵防抖等考慮因素,程序更加復雜,初學者不容易掌握。
本文給大家分享一種按鍵信號的采集方法,可以用一個IO口采集多個按鍵信號,不僅電路簡單,而且編程比較容易實現。

該方法只用一個IO可以采集多個按鍵,用的是IO口的AD功能。當不同的按鍵按下時,單片機AD口采集到的電壓值不一樣,于是就能區分出來是哪個按鍵按下了。即使是兩個按鍵同時按下,也能根據電阻并聯之后的電阻值算出輸入到單片機的電壓值,依據這個電壓值也能識別出是哪兩個按鍵按下。是不是很簡單呢?
理論上這種方法用一個IO口可以采集幾十幾百個按鍵,但是考慮到電阻值的誤差、上拉電源電壓的誤差、單片機AD采樣的誤差,在實際應用時,一個IO口采集的按鍵信號數量一般不會超過10個。
使用這個方法必須注意:
(1) 必須用恒定已知的上拉電源,例如板內的穩壓5V。
(2) 如果按鍵比較多,電路中所用電阻建議用1%高精度電阻。
(3) 編程識別按鍵值時要用AD值區間范圍來判定具體哪個按鍵按下了,不要用固定的AD值判定,原因就是前述提到的各種誤差。
(4) 如果單片機的IO口足夠多,仍然建議用前述簡單的一個IO采集一個按鍵的方式。
對于這個按鍵采集方法,大家有什么想法沒?歡迎大家留言,贊美、拍磚、求教、指教都可以的。

評論0