||
第一章 查询方式检测按键第一节 查看原理图
UT4412BV03中共有9个用户按键,原理图如下:
相关引脚:
第二节 程序相关讲解完整代码见目录12.key_query,代码和上章的区别也就是main.c文件了,下面就讲解下:
1. main.c
检测按键函数:
unsigned int key_map[9] = {2, 5, 8, 3, 6, 9, 4, 7, 10};
unsigned int check_key (void)
{
unsigned int row,col,tmp1,tmp2,val;
unsigned int key_val;
tmp1 = 0x01; // tmp2用于检测出哪一列
for(col=0; col<3; col++)
{
GPX1DAT = 0x07; //先将列全置高
GPX1DAT = ~tmp1 ;//使第一列全置低
tmp1 *=2; // tmp1左移一位
val = GPX2DAT;
if((!(val & (1 << 0))) | (!(val & (1 << 1))) | (!(val & (1 << 2)))) //检测是否有哪行为0
{
tmp2 = 0x01; // tmp2用于检测出哪一行为0
for(row =0;row<3;row++) // 行检测
{
if((!(val & tmp2)))
{
delay(140000);
if((!(val & tmp2)))
{
key_val = key_map[col*3+row];
return key_val;
}
}
tmp2 *=2; // tmp2左移一位
}
}
}
return 0;
}
查找哪个按键被按下的方法为:一个一个地查找。
先第一列输出0,检查行线是否非全高;
否则第二列输出0,检查行线是否非全高;
否则第三列输出0,检查行线是否非全高;
如果某列输出0时,查到行线非全高,则该列有按键按下;
根据第几列线输出0与第几行线读入为0,即可判断在具体什么位置的按键按下。
第三节 编译程序和烧写运行将sd卡插入PC,在Ubuntu终端执行如下命令:
#cd 12.key_query
#make
#sudo ./sd_fusing.sh /dev/sdb bl2.bin
第四节 实验现象将sd卡插入UT4412BV03中,选择sd卡启动,然后上电。然后按下K2按键,4个LED全亮;再按下K3按键,4个LED全灭。