k60 矩阵键盘程序-可用-仅供参考

#include  "key.h"

unsigned char KeyScan(void)  //键盘扫描函数,使用行列反转扫描法
{
unsigned char cord_h,cord_l;//行列值中间变量
                      
             //行线输出全为0
             gpio_init (PORTB, 0, GPO, LOW);
             gpio_init (PORTB, 2, GPO, LOW);
             gpio_init (PORTB, 9, GPO, LOW);
             gpio_init (PORTB, 11, GPO, LOW);
             
             gpio_init (PORTB, 17, GPI_UP, HIGH);
             gpio_init (PORTB, 19, GPI_UP, HIGH);
             gpio_init (PORTB, 21, GPI_UP, HIGH);
             gpio_init (PORTB, 23, GPI_UP, HIGH); 

if( gpio_get (PORTB,  17)==0 || gpio_get (PORTB,  19)==0 || gpio_get (PORTB,  21)==0 || gpio_get (PORTB,  23)==0 )    //先检测有无按键按下
{
    KEY_DELAY_MS(5);        //去抖
    if( gpio_get (PORTB,  17)==0 || gpio_get (PORTB,  19)==0 || gpio_get (PORTB,  21)==0 || gpio_get (PORTB,  23)==0 )
    {
           if(gpio_get (PORTB,  17)==0 && gpio_get (PORTB,  19)!=0 && gpio_get (PORTB,  21)!=0 && gpio_get (PORTB,  23)!=0)
          cord_h=10;
      else if(gpio_get (PORTB,  17)!=0 && gpio_get (PORTB,  19)==0 && gpio_get (PORTB,  21)!=0 && gpio_get (PORTB,  23)!=0)
          cord_h=20;
      else if(gpio_get (PORTB,  17)!=0 && gpio_get (PORTB,  19)!=0 && gpio_get (PORTB,  21)==0 && gpio_get (PORTB,  23)!=0)
          cord_h=30;
      else if(gpio_get (PORTB,  17)!=0 && gpio_get (PORTB,  19)!=0 && gpio_get (PORTB,  21)!=0 && gpio_get (PORTB,  23)==0)
          cord_h=40;
      
             //列线输出全为0
             gpio_init (PORTB, 0, GPI_UP, HIGH);
             gpio_init (PORTB, 2, GPI_UP, HIGH);
             gpio_init (PORTB, 9, GPI_UP, HIGH);
             gpio_init (PORTB, 11, GPI_UP, HIGH);
             
             gpio_init (PORTB, 17,  GPO, LOW);
             gpio_init (PORTB, 19, GPO, LOW);
             gpio_init (PORTB, 21, GPO, LOW);
             gpio_init (PORTB, 23, GPO, LOW); 
     
           if(gpio_get (PORTB,  0)==0 && gpio_get (PORTB,  2)!=0 && gpio_get (PORTB,  9)!=0 && gpio_get (PORTB,  11)!=0)
          cord_l=1;
      else if(gpio_get (PORTB,  0)!=0 && gpio_get (PORTB,  2)==0 && gpio_get (PORTB,  9)!=0 && gpio_get (PORTB,  11)!=0)
          cord_l=2;
      else if(gpio_get (PORTB,  0)!=0 && gpio_get (PORTB,  2)!=0 && gpio_get (PORTB,  9)==0 && gpio_get (PORTB,  11)!=0)
          cord_l=3;
      else if(gpio_get (PORTB,  0)!=0 && gpio_get (PORTB,  2)!=0 && gpio_get (PORTB,  9)!=0 && gpio_get (PORTB,  11)==0)
          cord_l=4;
  
      while(gpio_get (PORTB,  0)==0 || gpio_get (PORTB,  2)==0 || gpio_get (PORTB,  9)==0 || gpio_get (PORTB,  11)==0);//等待松开并输出
  
      return(cord_h+cord_l);//键盘最后组合码值
     }
  }
  return(0xff); 
}

unsigned char KeyPro(void)
{
switch(KeyScan())
{
  case 11:return 0;break;
  case 16:return 1;break;
  case 13:return 2;break;
  case 18:return 3;break;
  case 21:return 4;break;
  case 22:return 5;break;
  case 23:return 6;break;
  case 24:return 7;break;
  case 31:return 8;break;
  case 32:return 9;break;
  case 33:return 10;break;
  case 34:return 11;break;
  case 41:return 16;break;
  case 42:return 13;break;
  case 43:return 18;break;
  case 44:return 15;break;
  default:return 0xff;break;
}
}

永不止步步 发表于11-12 11:20 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:345841个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号