按鍵原理圖
按鍵原理
(1)使用獨立按鍵:
(使用跳線帽將2、3連接)
當按鍵S7、S6、S5、S4按下時,分別對應P30、P31、P32、P33引腳的值將變為0。可根據對應引腳的電平來確定相應按鍵是否按下。
(2)使用矩陣鍵盤:
(使用跳線帽將1、2連接)
先將行P30~P33其中某一行輸出電平為0,其余行輸出電平為1。掃描列P34、P35、P42、P44,若其中有一列的電平變為0,則對應行列的按鍵按下。
例如:令P32=0,其余行為1。掃描P34、P35、P42、P44的值,若其中P35=0,則按鍵S13被按下。
使用:
需要實現三個過程:
(1)檢測按鍵是否按下
(2)消抖
按鍵按下時,相應引腳電平不會直接穩定的由0變為1,而是存在一段前沿抖動。在此過程中容易被誤以為有多次按鍵按下,擾亂程序。因此需要消抖操作。
實現:檢測到按鍵第一次按下后,延時一小段時間,使按鍵進入穩定狀態后再檢測。
(3)防止連續掃描
實現:直至按鍵抬起后,再結束按鍵掃描。
代碼實現:
(1)獨立按鍵
sbit S7 = P3^0; sbit S6 = P3^1; sbit S5 = P3^2; sbit S4 = P3^3; void KEYscan_BTN() { if(S7==0) { Delay10ms();//消抖 if(S7==0) { //執行操作 while(!S7);//防止連續觸發 } } }
(2)矩陣鍵盤
sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P3^2; sbit R4 = P3^3; sbit C1 = P4^4; sbit C2 = P4^2; sbit C3 = P3^5; sbit C4 = P3^4; void KEYscan_KBD() {
C1=C2=C3=C4=1;//初始化列
R2=R3=R4=1; R1=0;//令某一行輸出為0if(C4==0)//判斷對應的列輸出是否為0 { Delay10ms();//消抖 if(C4==0) { //執行操作while(!C4);//防止多次觸發 } } }
總結:
1、使用按鍵先,確定其工作模式(獨立按鍵、矩陣鍵盤),並使用跳線帽進行連接;
2、使用按鍵需要進行消抖和防止多次觸發。