蓝桥杯单片机02——按键检测

 

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 }

 

转载于:https://www.cnblogs.com/happy2019/p/10314021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值