天天看點

STC單片機按鍵掃描程式STC單片機按鍵掃描程式

STC單片機按鍵掃描程式

最近在做一個電子秤相關項目,使用STC系列單片機作為主要晶片,項目第一階段直接使用IAP15W4K58S4驅動兩個矩陣鍵盤,一切調試順利,在項目即将結束時老闆要求使用另一塊單片機驅動矩陣鍵盤,讀取鍵值後通過序列槽傳回之前的IAP主要(理由是為了節省從矩陣鍵盤到主要闆之間的長排線的成本,16P+10P);OK ,老闆發話了,還能說什麼呢,做呗,于是問題出現了。下面先簡單介紹矩陣鍵盤的檢測原理,然後說一說一些容易遇到的問題。

1.先簡單介紹下矩陣鍵盤的掃描原理

對于N*M的矩陣鍵盤(N>=M),我們在編寫程式的過程中,為提高掃描效率與降低程式的複雜程度,常設計N為列檢測,M為行掃描,對應于程式上的檢測輸入與掃描輸出。下圖為矩陣鍵盤的示意圖。

STC單片機按鍵掃描程式STC單片機按鍵掃描程式

矩陣鍵盤示意圖

檢測原理:在上圖示意鍵盤中,規定豎向為列,即是P10,P11,P12,P13為列檢測;P14,P15,P16,P17為行掃描。沒有按鍵按下是,列檢測為到電平(一般為準雙向IO,弱上拉),行掃描為低電平輸出。當按鍵S5被按下後,P10與P15接通,P10由高電平變為低電平,單片機檢測到P10-P13有任何一位被拉低時,認為有按鍵按下,此時程式應記錄下哪一列按鍵被按下(得到按鍵的列坐标),然後按序拉高P14-P14,直到P10-P13全為初始狀态(高電平),此時拉高的行即為被按下的按鍵的行坐标。例如:S5被按下後,P10為0,得到列坐标為1,當P15拉高後,P10-P14均為1,得到行坐标為2,最後得到按鍵坐标為2行1列--S5。其他按鍵檢測原理相同。

單片機驅動掃描按鍵原理很簡單,但是在實際使用中對不同單片機的配置有要求,配置不當容易檢測到錯誤的鍵值。一下簡要說明幾個容易遇到的問題。

1.現在市面上的單片機IO基本都有4種标準模式(準雙向IO、推挽輸出、開漏輸出、高阻輸入)詳解見:(https://blog.csdn.net/jbh18401/article/details/76048843)。一般列檢測配置為準雙向IO,但準雙向IO的輸出為弱上拉啊,拉電流弱,抗幹擾性差,是以在列檢測IO外部,應外加上拉電阻(10-100K),一確定按鍵的穩定性。

2.在按鍵掃描的程式中,由于單片機程式執行速度快,在檢測按鍵行坐标時,拉高對應行後應适當延時,等待IO端口穩定後再檢測行輸入是否改變(程式如下)。若不加入延時,會導緻因IO還沒來得及完全拉高,列檢測程式已經執行完畢,最終導緻按鍵動作檢測不到或者誤檢。