#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;
}
}