按键检测

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、代码实现

               •  独立按键

uchar Key_Scan_Alone()    //独立键盘
{
      uchar key = 0xff;
      if(!(P3_0&&P3_1&&P3_2&&P3_3))
      {
          delaykey(5);
          if(!(P3_0&&P3_1&&P3_2&&P3_3))
          {
              if(P3_3==0)   key=4;
              else if(P3_2==0)   key=5;
              else if(P3_1==0)   key=6;
              else if(P3_0==0)   key=7;
              while(!(P3_0&&P3_1&&P3_2&&P3_3))
             {
              delaykey(5);
              }
          }
      }
       return key;
}

    •  矩阵按键

uchar Key_Scan()      //矩阵键盘
{
    uchar key = 0XFF-4;
    P3=0x0f;P4_2=0;P4_4=0;
    if(P3!=0X0f)
    {
        delaykey(5);
        if(P3!=0X0f)
        {
           P3=0x0f;P4_2=0;P4_4=0;
           switch(P3)
           {
               case 0x07 : key=0; break;
               case 0x0b : key=1; break;
               case 0x0d : key=2; break;
               case 0x0e : key=3; break;
           }
         P3=0xf0;P4_2=1;P4_4=1;

         if(P4_4==0)   key+=0;
         else if(P4_2==0)   key+=4;
         else if(P3_5==0)   key+=8;
         else if(P3_4==0)   key+=12;

         while(P3_4==0||P3_5==0||P4_2==0||P4_4==0)
             {
                delaykey(5);
             }
        }
    }
    return key+4;
}

 

上一篇:银行家算法


下一篇:Tesla P4测试