⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4ⅹ4矩阵键盘-查表法(c语言.txt

📁 单片机中 4ⅹ4矩阵键盘-查表法(C语言)
💻 TXT
字号:
标题:小键盘的输入函数
版本:1.0
Target:89S51
函数描述:   char gotkey(void)
从4ⅹ4小键盘输入数据,返回0至15

小键盘的连接方式:(可以修改为自己的连接方式)
  1 P2.7(7) -----15---14---13---12
 十六进制:    77   7B   7D 7E
                     |      |        |     |
  2 P2.6(B) -----11---10---9----8
 十六进制:    B7   BB BD BE
                    |       |        |    | 
  3 P2.5(D) -----7----6----5----4
 十六进制:    D7   DB   DD DE
                    |       |         |     |  
  4 P2.4(E) -----3----2----1----0
    十六进制: E7   EB   ED EE
                       |       |      |    |
  5 P2.3(7) ------     |       |    |
                              |       |    |
  6 P2.2(B) -----------      |    |
                                      |    |
  7 P2.1(D) ----------------     |   
                                           |
  8 P2.0(E) ---------------------    
**********************************************************/
#include <REGX51.H>
/*组合键值码,每个值对应一个键按下*/
unsigned char code  key_code[16]={
 0xEE,0xED,0xEB,0xE7,
 0xDE,0xDD,0xDB,0xD7,
    0xBE,0xBD,0xBB,0xB7,
 0x7E,0x7D,0x7B,0x77};
/*P2_4-P2_7扫描码*/
unsigned char code ksp[4]={0xEF,0xDF,0xBF,0x7F};
/* 时间延迟函数 */
void delay (void)  
{                   
  unsigned char i,j;                  
     for (i=0;i<5;i++)
          for(j=0;j<255;j++);
}
/**********************************************************
*键盘扫描函数
**********************************************************/
unsigned char keypad_scan()
{
   unsigned char key,i;
    P2=0xF0;  //P2赋值11110000
    while (P2!=0xF0); //如果P2不等于11110000,就说明有键按下.(等待按键按下)
    do
 {
       for(i=0;i<=3;i++) //循环扫描4次
       {         
           P2=ksp[i]; //依次赋值扫描码11101111,11011111,10111111,01111111
           if(P2!=ksp[i]) //P2不等于以上4种状态就说明有键按下
           {
              delay(); //延时去抖动
              key=P2;  //读入P2的状态
              if(key!=ksp[i]) //确定键是否真的按下
              {
                  return(key); //返回扫描码
              }
           }
       }
    } while(1);
}
/**********************************************************
* 检查是否有按键按下
**********************************************************/
unsigned char gotkey()
{
    unsigned char temp,i;
     temp=keypad_scan();
     for (i=0;i<=15;i++) //与键值码逐一比较直到相等就返回键的ID号(i),
  {      //不相等就说明没有键按下,返回16.
       if(temp==key_code[i]) 
      return(i);
     }
     return(16);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -