上講介紹並應用了單片機的串口通信,並給出了實例。從這一講開始將介紹單片機的外圍電路。這講向大家介紹單片機外接鍵盤電路,通過該講,讀者可以掌握單片機外接鍵盤的工作原理從而實現電路與程序設計。
一、原理簡介
鍵盤接口電路是單片機系統設計非常重要的一環,作為人機互動界面裡最常用的輸入設備。我們可以通過鍵盤輸入數據或命令來實現簡單的人機通信。在設計鍵盤電路與程序前,我們需要了解鍵盤和組成鍵盤的按鍵的一些知識。
1. 按鍵的分類
一般來說,按鍵按照結構原理可分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關等;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵(如本學習板上所採用按鍵)。
按鍵按照接口原理又可分為編碼鍵盤與非編碼鍵盤兩類,這兩類鍵盤的主要區別是識別鍵符及給出相應鍵碼的方法。編碼鍵盤主要是用硬體來實現對鍵的識別,非編碼鍵盤主要是由軟體來實現鍵盤的識別。
全編碼鍵盤由專門的晶片實現識鍵及輸出相應的編碼,一般還具有去抖動和多鍵、竄鍵等保護電路,這種鍵盤使用方便,硬體開銷大,一般的小型嵌入式應用系統較少採用。非編碼鍵盤按連接方式可分為獨立式和矩陣式兩種,其它工作都主要由軟體完成。由於其經濟實用,較多地應用於單片機系統中(本學習板也採用非編碼鍵盤)。
2. 按鍵的輸入原理
在單片機應用系統中,通常使用機械觸點式按鍵開關,其主要功能是把機械上的通斷轉換成為電氣上的邏輯關係。也就是說,它能提供標準的TTL 邏輯電平,以便與通用數字系統的邏輯電平相容。此外,除了復位按鍵有專門的復位電路及專一的復位功能外,其它按鍵都是以開關狀態來設置控制功能或輸入數據。當所設置的功能鍵或數字鍵按下時,計算機應用系統應完成該按鍵所設定的功能。因此,鍵信息輸入是與軟體結構密切相關的過程。 對於一組鍵或一個鍵盤,通過接口電路與單片機相連。單片機可以採用查詢或中斷方式了解有無按鍵輸入並檢查是哪一個按鍵按下,若有鍵按下則跳至相應的鍵盤處理程序處去執行,若無鍵按下則繼續執行其他程序。
3. 按鍵的特點與去抖
機械式按鍵再按下或釋放時,由於機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然後其觸點才穩定下來。其抖動過程如圖1(a) 所示,抖動時間的長短與開關的機械特性有關,一般為5 ~ 10 ms。從圖中可以看出,在觸點抖動期間檢測按鍵的通與斷狀態,可能導致判斷出錯。即按鍵一次按下或釋放被錯誤地認為是多次操作,這種情況是不允許出現的。為了克服按鍵觸點機械抖動所致的檢測誤判,必須採取去抖動措施,可從硬體、軟體兩方面予以考慮。一般來說,在鍵數較少時,可採用硬體去抖,而當鍵數較多時,採用軟體去抖。( 本學習板採用軟體去抖方式)。軟體去抖的流程圖如圖1(b) 所示。
圖1
從按鍵的去抖流程圖我們可以知道,檢測到有鍵按下時,應延時等待一段時間(可調用一個5ms~10ms的延遲子程序),然後再次判斷按鍵是否被按下,若此時判斷按鍵仍被按下,則認為按鍵有效,若此時判斷按鍵沒有被按下,說明為按鍵抖動或幹擾,應返回重新判斷。鍵盤真正被按下才可進行相應的處理程序,此時基本就算實現了按鍵輸入,進一步的話可以判斷按鍵是否釋放。
二、電路詳解
電路圖如圖2 所示。
圖2
從圖2 中可知獨立式按鍵採用每個按鍵單獨佔用一根I/O 口線結構。當按下和釋放按鍵時,輸入到單片機I/O 埠的電平是不一樣的,因此可以根據不同埠電平的變化判斷是否有按鍵按下以及是哪一個按鍵按下。從圖2(a) 中可以看出,按鍵和單片機引腳連接並加了上拉電阻,這樣當沒有按鍵按下的時候,I/O 輸入的電平是高電平,當有按鍵按下的時候,I/O 輸入的電平是低電平。
雖然獨立式按鍵電路配置靈活,軟體結構簡單,但每個按鍵必須佔用一根I/O 口線,因此,在按鍵較多時,I/O 口線浪費較大。對於比較複雜的系統或按鍵比較多的場合,可以用到矩陣鍵盤,圖2(b) 中所示的為4×4的矩陣式鍵盤,其他矩陣式鍵盤的設計方法類似。
4×4 的矩陣式鍵盤由4 根行線和4 根列線交叉構成,按鍵位於行列的交叉點上,這樣就構成了16 個按鍵。其中交叉點的行列線是不連接的,當按鍵按下的時候,此交叉點處的行線和列線導通。圖2(b) 行線通過上拉電阻接到VCC 上。當無鍵按下時,行線處於高電平狀態;當有鍵按下時,行、列線在交點導通,此時,行線電平將由與此行線相連的列線電平決定。這是識別按鍵是否按下的關鍵。然而,矩陣鍵盤中的每條行線與4 條列線相交,交點的按鍵按下與否均影響該鍵所在行線和列線的電平,各按鍵間將相互影響,鍵分析時必須將行線、列線信號配合起來作適當處理,才能確定閉合鍵的位置。
值得注意的是本文介紹的矩陣鍵盤,在傳統的矩陣鍵盤的輸出端加了一個四輸入與門晶片74HC21。當四路輸入有一個為低電平的時候,輸出為低電平。將74HC21 的輸出端接到單片機的外部中斷0(P32 管腳)上,這樣在實時性要求較高的情況下,設P00~P03 為全低等待按鍵觸發,當任何一個按鍵按下的情況下,系統都會進入中斷服務程序,提高了鍵盤響應時間,在系統實時性要求較高的情況下非常實用。