按键.c

来自「cpu采用扫描方式进行按键查询」· C语言 代码 · 共 93 行

C
93
字号
void Init_Port(void)
{
  //将P6端口所有的管脚在初始化的时候设置为输入方式
  P6DIR=0;
  //将P6端口所有的管脚设置为一般I/O端口
  P6SEL=0;
  //将P6.3 P6.4设置为输出方向
  P6DIR|=BIT3;
  P6DIR|=BIT4;
  //先输出低电平
  P6OUT=0x00;
  return;
} 

int KeyScan(void)  
{
  int np65,np66,np67;
  int keyvalue=0;
  for(;;)
  { 
    //读取各个管脚的状态
    np65=P6IN&BIT5;
    np66=(P6IN&BIT6)>>1;
    np67=(P6IN&BIT7)>>2;
    //是否有键按下
    if(np65==0||np66==0||np67==0)
    {
      //有键按下
      break;
    }
  }
    delay();  //延迟
    //读取各个管脚的状态
    np65=P6IN&BIT5;
    np66=(P6IN&BIT6)>>1;
    np67=(P6IN&BIT7)>>2;
    //是否有键按下
    if(np65==0||np66==0||np67==0)
    {
      //有键按下
      keyvalue=keyprocess();
    }
    else return -1;
    return keyvalue;
}

///延时程序
void delay(void)
{
 int i;
 for(i=100;i--;i>0); 
}

//按键分析程序
int keyprocess(void)
{
 int np65,np66,np67;
 int keyvalue=0;
 //P6.3输出低电平
 P6OUT&=~(BIT3); 
 np65=P6IN&BIT5;
 if(np65==0) keyvalue=1;
 np66=(P6IN&BIT6)>>1;
 if(np66==0) keyvalue=3;
 np67=(P6IN&BIT7)>>2;
 if(np67==0) keyvalue=5;
 //P6.4输出低电平
 P6OUT&=~(BIT4); 
 np65=P6IN&BIT5;
 if(np65==0) keyvalue=2;
 np66=(P6IN&BIT6)>>1;
 if(np66==0) keyvalue=4;
 np67=(P6IN&BIT7)>>2;
 if(np67==0) keyvalue=6;
 
 P6OUT=0x00;
 //读取各个管脚的状态
 np65=P6IN&BIT5;
 np66=(P6IN&BIT6)>>1;
 np67=(P6IN&BIT7)>>2;
 for(;;)
 { 
  if(np65==1&&np66==1&&np67==1)
   {
    //等待松开按键
    break;
   }
  }
  return keyvalue;
} 
 
   
   

⌨️ 快捷键说明

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