1. 程式人生 > >藍橋杯單片機02——按鍵檢測

藍橋杯單片機02——按鍵檢測

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——按鍵檢測