【藍橋杯單片機05】獨立按鍵的基本操作
廣東職業技術學院 歐浩源
按鍵設計一般分為兩種:獨立按鍵和矩陣鍵盤。按鍵數量較少的用前者,按鍵數量較多的用后者。雖然兩種設計都是操作按鍵,但是其鍵盤掃描方式和程序的設計思路是截然不同的。獨立按鍵簡單很多,矩陣鍵盤雖然復雜,只要掌握了本質思路,也沒有什么困難之處。
1、獨立按鍵的處理思路
一般情況下,獨立按鍵有兩個引腳,其中一個通過上拉電阻接到單片機的I/O端口,另外一端接地。也就是說,平時按鍵沒有動作的時候,輸出的是高電平,如果有按下動作發生,則輸出的是低電平。那么,我們在程序設計的時候,只要掃描跟按鍵引腳相連的I/O端口,如果發現有低電平產生,則判定該按鍵處於按下狀態。有些時候,電路或者外圍有電磁干擾,也會使單片機的I/O端口產生低電平,這種干擾信號會讓單片機誤認為是按鍵動作。所以,在掃描按鍵的時候應該做去抖動處理,把干擾信號過濾掉,從而獲得准確的按鍵狀態信號。
2、單元實訓題目
3、實現源碼參考
#include "reg52.h" sbit HC138_A = P2^5; sbit HC138_B = P2^6; sbit HC138_C = P2^7; sbit S7 = P3^0; sbit S6 = P3^1; sbit S5 = P3^2; sbit S4 = P3^3; unsigned char code SMG_NoDot[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e, 0xbf,0x7f}; void Delay(unsigned char t) { while(t--); } void Init74HC138(unsigned char n) { switch(n) { case 4: HC138_A = 0; HC138_B = 0; HC138_C = 1; break; case 5: HC138_A = 1; HC138_B = 0; HC138_C = 1; break; case 6: HC138_A = 0; HC138_B = 1; HC138_C = 1; break; case 7: HC138_A = 1; HC138_B = 1; HC138_C = 1; break; case 8: HC138_A = 0; HC138_B = 0; HC138_C = 0; break; } } void ShowKeyNum(unsigned char value) { Init74HC138(6); P0 = 0x01; Init74HC138(7); P0 = value; } void ScanKeys() { if(S7 == 0) { Delay(200); if(S7 == 0) { while(S7 == 0); ShowKeyNum(SMG_NoDot[1]); } } if(S6 == 0) { Delay(200); if(S6 == 0) { while(S6 == 0); ShowKeyNum(SMG_NoDot[2]); } } if(S5 == 0) { Delay(200); if(S5 == 0) { while(S5 == 0); ShowKeyNum(SMG_NoDot[3]); } } if(S4 == 0) { Delay(200); if(S4 == 0) { while(S4 == 0); ShowKeyNum(SMG_NoDot[4]); } } } void main() { while(1) { ScanKeys(); } }