注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
q2113435929的个人空间 https://home.eeworld.com.cn/space-uid-650223.html [收藏] [复制] [分享] [RSS]
日志

Linux平台下UT4412BV03裸机开发指南(十二)

已有 1341 次阅读2015-10-19 16:02 |个人分类:Linux平台下UT4412BV03裸机开发指南系列| Linux, 开发, 4412, 开发板, arm

Linux平台下UT4412BV03裸机开发指南(十二)

 

第一章 查询方式检测按键第一节 查看原理图

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卡插入PCUbuntu终端执行如下命令:

#cd 12.key_query

#make

#sudo ./sd_fusing.sh /dev/sdb bl2.bin

第四节 实验现象

sd卡插入UT4412BV03中,选择sd卡启动,然后上电。然后按下K2按键4LED全亮再按下K3按键4LED全灭。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章