藍橋杯單片機02——按鍵檢測
阿新 • • 發佈:2019-01-24
spa 硬件 ase key 獨立 () 是否 其中 單片機
1、原理
註:其中S4、S5、S6、S7可做獨立按鍵使用。
獨立按鍵與矩陣按鍵的切換條件: ? 獨立按鍵——將CON3中2、3段短接 。
? 獨立按鍵——將CON3中1、2段短接 。
(1)獨立按鍵使用條件下,給定P30、P31、P32、P33端高電位,按鍵另一側接地,按鍵按下時電路接通,會檢測到P30、P31、P32、P33端電位為低,通過檢測P3口前四位的電位高低,可以檢測到S4、S5、S6、S7按鍵是否按下,這就是獨立按鍵使用的原理。
(2)矩陣按鍵使用條件下,由P30、P31、P32、P33確定行,P34、P35、P36、P37確定列。舉例:按下按鍵S10,給定P3=0x0f,檢測行,P31變為低電位,由此確定為第二行;再給定P3=0xf0,檢測列,P36變為低電位,由此確定為第二列,這樣搞清楚了行和列,就可以成功確定按下的是哪一個按鍵。
? 但是要註意,由於板子的底層硬件原理,再這裏P36、P37要使用P42、P44代替。而在頭文件"regx52.h"中並沒有定義P4端口,因此我們要預先定義P4端口,以便使用。
sfr P4 = 0XC0; sbit P4_2 = P4^2; sbit P4_4 = P4^4;
2、代碼實現
? 獨立按鍵
1 uchar Key_Scan_Alone() //獨立鍵盤 2 { 3 uchar key = 0xff; 4 if(!(P3_0&&P3_1&&P3_2&&P3_3))5 { 6 delaykey(5); 7 if(!(P3_0&&P3_1&&P3_2&&P3_3)) 8 { 9 if(P3_3==0) key=4; 10 else if(P3_2==0) key=5; 11 else if(P3_1==0) key=6; 12 else if(P3_0==0) key=7; 13 while(!(P3_0&&P3_1&&P3_2&&P3_3)) 14 { 15 delaykey(5); 16 } 17 } 18 } 19 return key; 20 }
? 矩陣按鍵
1 uchar Key_Scan() //矩陣鍵盤 2 { 3 uchar key = 0XFF-4; 4 P3=0x0f;P4_2=0;P4_4=0; 5 if(P3!=0X0f) 6 { 7 delaykey(5); 8 if(P3!=0X0f) 9 { 10 P3=0x0f;P4_2=0;P4_4=0; 11 switch(P3) 12 { 13 case 0x07 : key=0; break; 14 case 0x0b : key=1; break; 15 case 0x0d : key=2; break; 16 case 0x0e : key=3; break; 17 } 18 P3=0xf0;P4_2=1;P4_4=1; 19 20 if(P4_4==0) key+=0; 21 else if(P4_2==0) key+=4; 22 else if(P3_5==0) key+=8; 23 else if(P3_4==0) key+=12; 24 25 while(P3_4==0||P3_5==0||P4_2==0||P4_4==0) 26 { 27 delaykey(5); 28 } 29 } 30 } 31 return key+4; 32 }
藍橋杯單片機02——按鍵檢測