51单片机矩阵键盘扫描

矩阵键盘检测之行列扫描法:

对矩阵键盘按1至16的顺序进行编号,通过下面的扫描程序得到返回数值即可确定是哪个键被按下。

51单片机矩阵键盘扫描_第1张图片


矩阵键盘检测原理:
1、查询是否有键按下。
2、键的抖动处理。
3、查询按下键所在行和列位置,得到键值。


先行后列扫描法

#include
    #define uchar unsigned char
    #define uint unsigned int
    #define temp P2           //定义按键I/O口
    uchar keyscan()
    {
       uchar num;
       temp=0xf0;
       if(temp!=0xf0)    //检测是否有键按下
       {
          delay_ms(5);    //延时消抖
          if(temp!=0xf0)   //再次检测是否有键按下
          {
             temp=0xf0;     //对应IO口拉高,以便检测
             switch(temp)   //先确定行
             {
                case 0x70: num=1;  break;   //第一行
                case 0xb0: num=5;  break;   //第二行
                case 0xd0: num=9;  break;   //第三行
                case 0xe0: num=13; break;   //第四行
             }
             temp=0x0f;     //对应IO口拉高,以便检测
             switch(temp)   //再确定列
             {
                case 0x07: num=num+0; break;   //第一列
                case 0x0b: num=num+1; break;   //第二列
                case 0x0d: num=num+2; break;   //第三列
                case 0x0e: num=num+3; break;   //第四列
             }
          }
       }
       return num;   //结合行列扫描的值得出按键对应的数值,并返回
    }


先列后行扫描法

#include
    #define uchar unsigned char
    #define uint unsigned int
    #define temp P2
    uchar keyscan()
    {
       uchar num;
       temp=0x0f;
       if(temp!=0x0f)   
       {
          delay_ms(5);
          if(temp!=0x0f)
          {
             temp=0x0f;    //先确定列
             switch(temp)
             {
                case 0x07: num=1; break;
                case 0x0b: num=2; break;
                case 0x0d: num=3; break;
                case 0x0e: num=4; break;
             }
             temp=0xf0;   //再确定行
             switch(temp)
             {
                case 0x70: num=num+0;  break;
                case 0xb0: num=num+4;  break;
                case 0xd0: num=num+8;  break;
                case 0xe0: num=num+12; break;
             }
          }
       }
       return num;      
    }

注:这里的行列是相对的,看你自己的接线是怎样的,请自己动手体会,希望能对大家有所帮助!

你可能感兴趣的:(51单片机开发,单片机,矩阵键盘,行列扫描)