單片機組成的小系統(tǒng)中,有的需要人機交互功能,按鍵是最常見的輸入方式。最常見的按鍵電路大致有,一對一的直接連接和動態(tài)掃描的矩陣式連接兩種。一對一的直接連接就是一個按鍵直接對應一個CPU的輸入口,比如下圖
本文引用地址:http://m.butianyuan.cn/article/201611/322912.htm
左右兩個電路作用一樣,區(qū)別是左邊CPU的輸入端常態(tài)為高電位,按下按鍵時為低電位;右邊的常態(tài)為低電位,按下按鍵是高電位。
這樣的電路簡單直接,一個按鍵獨占一個端口,在按鍵數(shù)量較少端口數(shù)量富裕時可以直接使用。但很多場合需要的按鍵數(shù)比較多,要盡量少地占用端口就必須使用矩陣式的按鍵鏈接。如下圖:
圖中將按鍵按行列矩陣的方式排列,其中的每一行公用一根行線,每一列公用一根列線。以此圖為例,16個按鍵,按一對一方式連接的話需要16個端口,而按這樣的矩陣方式鏈接只需要8個端口,所需端口數(shù)大量減少。按鍵數(shù)Knum=line*row,而端口數(shù)Pnum=line+row,其中的line和row分別代表行數(shù)和列數(shù)。
圖中的Px,Py為CPU的IO端口,在本例中可以使用不同的端口也可以使用同一個8位端口。上拉電阻不是必須,單片機IO口內部有上拉電路時此處就可省略。
這個電路的工作原理是采用程序掃描的方式檢測某個按鍵狀態(tài)。比如將Px口的4位全置為低電平,這時如果沒有任何按鍵按下的話,從Py口讀回的4位應全為高,而如果有某一鍵按下,則對應按下鍵的那一列的位讀回值將為低。這樣就能知道按下鍵所在的列;接著確定按鍵所處行,把Py口的輸入值作為輸出,Px全部置高并讀取輸入,就能得到按鍵所在行位置,于是就確定了所按按鍵的行列位置。
掃描可以有兩種實現(xiàn)的方法,一種是全行全列掃描,一種是逐行全列掃描。
上面的例子其實就是全行全列掃描方式,見流程框圖。
其特點是,一個流程就能到是否有按鍵按下,并能確定按下按檢測行列值,檢測步驟簡單迅速。但作為行列接口的Px,Py必須是雙向的,亦即同時具有輸入輸出功能,單片機的端口基本都能滿足。
評論