Path: EDNTaiwan電子技術設計 >> 設計實例 >> 消費性電子 >> 以兩隻I/O接腳將4×3矩陣鍵盤連接至微控制器
消費性電子 Share print

以兩隻I/O接腳將4×3矩陣鍵盤連接至微控制器

2013年07月26日  | Aruna Prabath Rubasinghe

Share this page with your friends

在基於微控制器(MCU)的設計專案中,常會把矩陣式鍵盤當作輸入裝置使用。將矩陣鍵盤連接至微控制器的常規做法需使用微控制器的多隻I/O接腳。然後MCU運用掃描演算法來確認按住了哪些鍵。這種辦法的一個弊端就是需要大量MCU的I/O接腳來連接鍵盤。例如,連接一個4×3鍵盤需7隻數位I/O接腳。而當專案計畫採用的是低接腳數MCU,或使用的MCU未具備足夠的可用I/O接腳數時,就會出現問題 。

針對於此一問題,有兩個解決辦法:使用現成的I/O擴展器(I/O expander),或用一個電阻網路(resistor network),為每個鍵設定一個唯一的電壓,然後使用類比接腳來讀取電壓值,判斷按住的是哪個鍵。但每個方案都有其不足之處 。

由於在大多數情況下,I/O擴展器需通過特殊的通信協議(如I2C協定或SPI協定)來讀寫資料,MCU需要有內建的通信模組,或使用者需實現相關的通信協定軟體,而這明顯增加了MCU的負擔。另一方面,當按鍵數量增加時,通過電阻網路來為各按鍵分配獨特的電壓會變得很繁瑣,而這最終將使得電壓容限(voltage margin)變得較小。此外,由於電阻值會隨溫度而變化,使用較小的電壓容限可能會導致讀取錯誤,甚至連開關彈跳都可能成為導致電壓出錯的重要原因。這種方法的另一個弊端是要求MCU中有類比的輸入接腳 。

這裡所描述的設計顯示出它能夠高效解決上述所有問題的辦法,及其具備的幾個優勢:它只需要兩隻I/O接腳,而不論連接的開關數量有多少;不需要特別的通信協定;不需要類比接腳。本實例是以兩個CD4017詹森計數器為基礎,這種計數器很常見而且不貴 。

圖1顯示出4×3鍵盤採用的電路。R1、R4、R5、和R6用於限流,D7、D4、D5和D6構成一個“或(OR)”閘 。

DI3_fig1
圖1 使用只有兩隻I/O接腳的CD4017詹森計數器時,4×3鍵盤的電路結構將變得更為有效。



本文描述的例子顯示出如何採用這種方法來讀取4×3鍵盤。其中一個CD4017被用來控制鍵盤行,另一個控制鍵盤列 。

MCU產生時鐘信號,然後將其提供給控制列的計數器IC。起初,列計數器和行計數器的第0個輸出處於邏輯高位。在收到時鐘脈衝後,列計數器將增加。在收到第四個時鐘脈衝時,列計數器將重置,並同時將行計數器增加1。在列控制器重置後,行控制器增加,並在收到第五個來自列控制器的時鐘脈衝後重置。在產生時鐘脈衝的同時,應增加MCU的計數變數,並且在第五個時鐘脈衝到達行控制器時,將計數變數重置為1。鍵盤的兩個輸出執行“或”的運算,並連接到MCU的一個外部中斷接腳 。

只有當行和列的相關按鈕均處於邏輯高位,一個按鈕被按下時才會發生中斷。如果按鈕的行或列處於邏輯零值,則不會發生中斷 。

中斷發生時,MCU讀取當時的計數值,所讀取的值即對應於剛按下的按鈕 。

當MCU每隔一段時間產生時鐘脈衝時,MCU內的時鐘計數增加;此一計數等於鍵盤上的開關數目,按下這些開關時可造成中斷。圖2中的流程圖描述了此一情況 。

DI3_fig2
圖2當MCU每隔一段時間產生時鐘脈衝時,MCU內的時鐘計數增加,此一計數等於當時的開關數目。



注意:雖然本例僅說明了4×3鍵盤的讀取方法,但可以用兩個4017計數器的剩餘輸出來讀取10×10鍵盤。另外,必要時,還可以級聯更多的4017 IC來擴展鍵盤 。

參考文獻



1 Rubasinghe, Aruna, “Read 10 or more switches using only two I/O pins of a microcontroller,” EDN, Feb 28, 2013, www.edn.com/4408027.




想要免費接收更多的技術設計資訊嗎?

馬上訂閱《電子技術設計》郵件速遞,透過郵箱輕鬆接收最新的設計理念和產品新聞。

為確保您的資訊安全,請輸入右方顯示的代碼.

啟動您的訂閱申請

我們已給您的註冊郵箱發送了確認信,請點擊信中的連結啟動您的訂閱申請。

這將有助於我們很好地保護您的個人隱私同時確保您能成功接收郵件。


添加新評論
遊客 (您目前以遊客身份發表,請 登入 | 註冊)
*驗證碼:

新聞 | 產品 | 設計實例