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

📄 keypad.c

📁 < 嵌入式C语言程序设计>>一书的源代码
💻 C
字号:
/*
标题:小键盘的输入函数
版本:1.0
Target:89S51
函数描述:   char gotkey(void)
             从4ⅹ4小键盘输入数据,返回0 15
小键盘的连接方式:

   
  1 P20 -----0----1----2----3
             |    |    |    |
  2 P21 -----4----5----6----7
             |    |    |    | 
  3 P22 -----8----9----10---11
             |    |    |    |  
  4 P23 -----12---13---14---15
             |    |    |    |
  5 P24 ---- |    |    |    |
             |    |    |    |
  6 P25 ----------     |    |
                       |    |
  7 P26 ---------------     |   
                            |
  8 P27 --------------------    
*/
#include <REGX51.H>
code char key_code[]={0x7E,0XBE,0XBD,0XBB,0XDE,0XDD,0XDB,0XEE,
                      0XED,0XEB,0X7D,0X7B,0XE7,0XD7,0XB7,0X77};
code ksp[4]={0x7F,0xBF,0xDF,0xEF};
void delay (void)  {                   /* 时间延迟函数 */
  unsigned char i,j;                  
     for (i=0;i<5;i++)
          for(j=0;j<255;j++)
          ;
}
char keyscan();
/*char keypad_scan()
{
    char key,i;
    P1=0xF0;
    while (P1!=0xF0);
      do{
       for(i=0;i<=3;i++)
       {         
           P1=ksp[i];
           if(P1!=ksp[i])
           {
              delay();
              key=P1;
              if(key!=ksp[i])
              {
                  return(key);
              }
           }
       }
    } while(1);
}  
// 检查是否有按键按下
char gotkey()
{
     char temp,i;
     temp=keyscan();
     for (i=0;i<=15;i++) {
          if(temp==key_code[i]) return(i);
     }
     return(16);
}
  */

char keyscan()
{
   char keytemp;
   P1=0xf0;
   keytemp=P1&0x0f;
   if(keytemp!=0)
   {
     delay();
	 if(keytemp!=0)
	 {
	   P1|=0x80;
	   keytemp=P1&0x0f;
	   switch(keytemp)
	   {
	     case 0x01: return(0); break;
		 case 0x02: return(1); break;
		 case 0x04: return(2); break;
		 case 0x08: return(3); break;
		 default :  break;
	   }
	   P1|=0x40;
	   keytemp=P1&0x0f;
	   switch(keytemp)
	   {
	     case 0x01: return(4); break;
		 case 0x02: return(5); break;
		 case 0x04: return(6); break;
		 case 0x08: return(7); break;
		 default :  break;
	   }
	   P1|=0x20;
	   keytemp=P1&0x0f;
	   switch(keytemp)
	   {
	     case 0x01: return(8); break;
		 case 0x02: return(9); break;
		 case 0x04: return(10); break;
		 case 0x08: return(11); break;
		 default :  break;
	   }
	   P1|=0x10;
	   keytemp=P1&0x0f;
	   switch(keytemp)
	   {
	     case 0x01: return(12); break;
		 case 0x02: return(13); break;
		 case 0x04: return(14); break;
		 case 0x08: return(15); break;
		 default :  break;
	   }
	   return (0xff);
	 }
	 else return (0xff);
   }  
   else return (0xff); 
}












⌨️ 快捷键说明

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