4 4 矩陣式鍵盤電路的改進

2021-07-09 14:58:48 字數 1760 閱讀 9168

本文向大家推薦乙個精簡io介面的4×4鍵盤電路,該鍵盤電路僅僅使用4條io介面引線,即可完成一般需要8位介面才能完成的功能。

在51微控制器系統中,經常使用4×4鍵盤,一般情況下,都是使用乙個8位的介面,外接16個按鍵。

下圖就是乙個常規的4×4鍵盤電路圖。

這種常規的矩陣鍵盤電路,相信大家都司空見慣了,好多人都會編寫它的驅動程式。

圖中使用了p0口的8個引腳(p0.0~p0.7),分別驅動鍵盤的行和列。按鍵的編號,在圖中分別標註了0~f。

檢測按鍵的一般的思路是在四個列線,分別輸出乙個低電平,然後輸入行線,逐行檢測是否存在低電平。

如果在某行有低電平出現,就說明該行、列的交叉點上的按鍵,被按下了。

其實,這些行、列引線,是「分時」工作的,當在某一列輸出低電平的時候,其它的列,輸出的就是高電平。

如果利用這些輸出高電平的列,進行輸入,那麼就可以極大的節省io介面的引線數量。

基於這個道理,在上圖中,下面的四個列驅動引線(p0.4~p0.7),就完全可以省去,只是使用行驅動的引腳(p0.0~p0.3)來分時輸出低電平即可。

電路見下圖。

為了對引腳之間進行隔離,圖中加上了四個二極體,確保只有在引腳輸出低電平的時候,方可把鍵盤中相應的列置為0。

針對這個電路,對按鍵的檢測方法,和常規的4×4鍵盤檢測思路是相同的,例如:

當在p0.0輸出低電平,即最左邊的列為0,這時檢測p0.1、p0.2及p0.3是否為0,可以判斷最左邊的三個按鍵是否按下;

當在p0.1輸出低電平,即左邊第二列為0,這時檢測p0.0、p0.2及p0.3是否為0,可以判斷左邊第二列的三個按鍵是否按下;

…………;

這個檢測按鍵是否按下的思路非常簡單,會編寫常規4×4鍵盤驅動程式的網友,肯定都會編寫出來這種電路的驅動程式。

因為行和列使用了相同的io引線,實際上,連線在同乙個引線的行、列交叉點處的按鍵,就已經失效了,那麼就把把原來的按鍵,移動出來,把二極體畫在交叉點,電路如下所示。

再把移出來四個按鍵連線在io引線,另一端直接接地;把其它按鍵的編號,再整理一下,就成了下圖電路。

這個電路比常規的4×4鍵盤電路僅僅多用了四個二極體,但是卻節省了四條io介面引線,這個意義是十分巨大的。

按照這個電路的設計思路,使用 n 條io介面引線,就可以驅動 n×n 個按鍵。

那麼用5個io引腳,就可以驅動5×5的鍵盤,這就足以滿足各種應用了。

網上也有一些其它型別的節省介面的鍵盤電路,但是都有不足,不是電路過於複雜,就是驅動的按鍵個數較少,遠遠不及本電路簡單實用。

做而論道已經按照這個電路製作了pcb板,外形和常規4×4鍵盤電路板相差無幾。二極體體積很小,佈線並沒有障礙。

實踐證明,這是個完美的精簡介面的4×4鍵盤電路,不僅可以用在51微控制器系統,在使用其它mcu組建的電路中同樣適用。

針對這個電路,做而論道已經用組合語言和c語言編寫出了驅動程式,因為組合語言可以使用「位操作」指令,所以程式的比較簡單;c語言的程式,就顯得累贅一些。

程式暫時就不公布了,有興趣的網友可以來討論。

矩陣式鍵盤

矩陣式鍵盤碼值首先,我們要準備的器械有 arduino uno 代替c51 4 4矩陣式鍵盤 為了方便理解我將行列分別進行了編號 左邊四個介面為行數,右邊四個為列數,分別對應第1,2,3,4行。接下來讓我們看看那些碼值 哦,是不是一點頭緒都沒有,不急實驗繼續。注意,這裡是keypad而不是keybo...

4 4矩陣式鍵盤(非中斷)源程式

include define uchar unsigned char define uint unsigned int uchar code table uchar temp uchar key uchar k uchar code h 延時函式 void mdelay uchar delay vo...

矩陣式鍵盤 兩種掃瞄

矩陣式結構的鍵盤識別要複雜一些,列線通過電阻接正電源,並將行線所接的微控制器的i o口作為輸出端,而列線所接的i o口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態就可得知是否有鍵按下了。在矩陣...