key.h

来自「温度传感器」· C头文件 代码 · 共 65 行

H
65
字号
/**************************************************
4x4键盘库说明:
扫描得到的键值为nkeynumber,如果键值与实物的数字要排列不相符合,
只需改变SWItCH的跳转值即可。
扫描过程说明:先送一个行号0,其它为1,然后判断一次列号。如此将
四个行号都送一次0后,即可判断键值。
**************************************************/
#ifndef _key_h_
#define _key_h_


/***************延时程序***************/
void delay10ms()
{unsigned int k;
for(k=50;k>0;k--)
;
}
/***************键盘扫描***************/
unsigned char kbscan()
 {unsigned char i,j,nkeynumber=16;
  unsigned char pin1;
  
 for(i=0;i<4;i++)
 for(j=0;j<4;j++)
      {      P1=0xff&(~(0x01<<(3-i)));
             delay10ms();
             pin1=P1;
             if(((pin1>>(4+j))&0x01)==0)
             {nkeynumber=i+j*4;}
      }
      return (nkeynumber);

}
/***************************防抖动处理**********************************************/
unsigned char kbscan1()
{   unsigned char u;
    u=kbscan();
    while ((u==kbscan())&&(u!=16)) //在没有按键时返回值是16,在有按键时返回值与前一次一样就循环,
    { ;
    }
    
switch(u)
    
 {  case 0x00: return(15);  break;
    case 0x01: return(14);  break;
    case 0x02: return(13);  break;
    case 0x03: return(12);  break;  
    case 0x04: return(11);  break;
    case 0x05: return(10);  break;
    case 0x06: return(9);  break;
    case 0x07: return(8);  break;
    case 0x08: return(7);  break;
    case 0x09: return(6);  break;
    case 0x0a: return(5); break;
    case 0x0b: return(4); break;
    case 0x0c: return(3); break;
    case 0x0d: return(2); break;
    case 0x0e: return(1); break; 
    case 0x0f: return(0); break;
  }
    return (16);
    
}

#endif

⌨️ 快捷键说明

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