本章節主要在探討按鍵與矩陣式鍵盤的控制原理

 

單一按鍵的控制

功能:當按P3.2時,P2顯示值加1。

圖1. 單一按鍵控制電路圖

範例(ASM)

範例(C)

練習:請嘗試將此範例與一位數七段顯示器控制合併,將按鍵次數以數字型式顯示於七段顯示器上,因為只有一位數,請自行控制顯示範圍為0~9。

 

兩個按鍵的控制

功能:當按P3.2時,P2顯示值加1,當按P3.3時,P2顯示值減1。

因為實驗版上只設計一個按鍵,要做2個按鍵實習時,同學需自行準備一條連接線,一邊接到P3.3(第13腳),另一側與JP9左側接腳(該腳已接地)做碰觸,代替按鍵之動作。

範例(ASM)

範例(C)

練習:請嘗試修改程式,模擬販賣機投幣電路。當按P3.2時,表示投入1元,顯示值加1;當按P3.3時,表示投入5元,顯示值加5;當按P3.4時,表示投入10元,顯示值加10。

參考解答 範例(C)

以上程式需配合七段顯示器執行,顯示值只能到255,如果要超過255,請問該如何修正?

請嘗試將程式修改成可以顯示0~12000,也就是上限只能加到12000。

圖2. 2個按鍵控制電路圖

 

矩陣式鍵盤的控制

如果按鍵較多,已經不太可能每隻腳都接一個按鍵,這樣會很浪費,比較常見的作法,都是採用矩陣型的接法,再利用掃描的方式,逐行掃描,看那一行有按鍵被壓下,再利用程式判斷,解出對應的按鍵值。

 

圖3. 矩陣式鍵盤控制電路圖(未接提升電阻)

 

圖4. 矩陣式鍵盤控制電路圖(外加提升電阻,提供電流)

圖5. 矩陣式鍵盤控制電路圖(外加二極體,由P3.2提供電流)

圖3~圖5為常見的3種矩陣式鍵盤控制電路的接法,其中圖3只適用於82G516,因為此顆晶片內部P0在高電位時有輸出電流,可確保按鍵沒有按下時讀回值為1。由於標準8051的P0內部無提升電阻,如果採用此接法,按鍵沒有按下時讀回值易受干擾,比較容易誤動作,因此必須將按鍵改接到其他IO埠。圖4則為一種改良式接法,不用擔心接錯IO埠,但當IO埠內部有提升電組時,這樣接實在是多此一舉,增加電路成本。圖5則是這張實驗板上的接法,透過P3.2提供按鍵所需之電流,看似複雜,這樣做最大好處是不用隨時做鍵盤掃描,甚至可是先讓CPU進入睡眠省電狀態,等有按鍵再喚醒CPU。其作法是事先設定P0.3~P0.0='0000',P0.7~P0.4='1111',並設定允許INT1(P3.2)中斷,這時只要有任何一個鍵被壓下,都會使P3.2=0產升中斷,這時再透過程式掃瞄一次,看是哪一個鍵被壓下即可。

以下範例為一簡單的鍵盤測試程式,程式中包含掃瞄鍵盤,除彈跳及等按鍵放開三個主要部份,並將按鍵結果顯示於P2的LED,由於LED只顯示最後一次的按鍵結果,所以除彈跳有無成功都看不出來,最好還是搭配LCD或8位數七段顯示器做練習,比較能看出成效。

按鍵測試練習

範例(ASM)

範例(C)

 

按鍵與LCD控制練習

測試範例(ASM),LCD用法請參考LCD那一章節

範例(C)

練習1:範例程式中按鍵與實際顯示的值不同,請修改程式,讓按鍵於LCD上實際顯示值相同。

練習2:由於LCD一行只能顯示16個字,但控制IC內部一行可儲存40個字,造成輸入16個字後,再輸入的資料無法顯示於LCD,直到再輸入24個字後,資料才會在第二行出現。請修改程式讓LCD第一行滿了後,游標能自動移到第二行,第二行滿了以後,游標能自動移到第一行。

 

按鍵與七段顯示器控制練習

測試範例(ASM),七段顯示器用法請參考七段顯示器控制那一章節

測試範例(C)