金牌会员
- 积分
- 1589
- 威望
- 778
- 贡献
- 511
- 兑换币
- 449
- 注册时间
- 2012-11-29
- 在线时间
- 150 小时
|
#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;
}
} |
|