历史上的今天
今天是:2024年12月16日(星期一)
2021年12月16日 | TINY4412裸机程序,按键检测
2021-12-16 来源:eefocus
一、控制原理说明
先看一下原理图:

首先把按键对应的GPIO设置为输入模式,修改GPX3CON寄存器(板子不同,可能对应的GPIO管脚不同),通过上图可知当没有按下按键时,对应的GPIO状态为高电平,当有按键被按下时,对应的GPIO变为低,我们在程序一直检测这几个GPIO状态即可。
二、程序说明
其中Start.s文件同上一个实验完全相同;链接脚本key.lds的内容和led.lds完全相同,只把名字改了改;Makefile的内容也大部分一样,也只是改了改里边文件的名字,key.c的文件需要重新编写,代码如下:
/*
* 程序说明
* 一上电,4个LED全亮,当某个按键被按下,则对应的LED熄灭(可同时按下多个键)
* 对应关系:KEY1-LED1,KEY2-LED2,KEY3-LED3,KEY4-LED4
*/
//按键对应的GPIO
#define GPX3CON (*(volatile unsigned int *)0x11000C60)
#define GPX3DAT (*(volatile unsigned int *)0x11000C64)
//LED对应的GPIO
#define GPM4CON (*(volatile unsigned int *)0x110002E0)
#define GPM4DAT (*(volatile unsigned int *)0x110002E4)
void delay(volatile int time)
{
for(; time > 0; time-- );
}
int main(void)
{
unsigned long tmp = 0;
unsigned char keyValue = 0;
/*
* GPX3_2-GPX3_5 设置为输入功能,用于检测按键引脚的状态
*/
tmp = GPX3CON;
tmp &= ~(0xffff << 8);
GPX3CON = tmp;
/*
* GPM4_0-GPM4_3 设置为输出功能,用于控制LED的亮灭
*/
tmp = GPM4CON;
tmp &= ~0xffff;
tmp |= 0x1111;
GPM4CON = tmp;
while(1)
{
//读按键引脚状态
keyValue = GPX3DAT;
keyValue = (keyValue & (0xf << 2)) >> 2;
if(keyValue != 0xf) //说明有按键被按下,再详细判断是哪个按键被按下
{
delay(1000); //防抖
keyValue = GPX3DAT;
keyValue = (keyValue & (0xf << 2)) >> 2;
GPM4DAT = ~keyValue; //设置LED亮、灭
}
else
{
GPM4DAT = 0x00;
}
}
return 0;
}
其中注释也比较详细,控制原理上边也说得很清楚了,这里就不多说了,有问题可以留言。
三、程序编译及烧写
1.编译
通过FTP或者其他工具将Start.s、Makefile、key.lds 、key.c四个文件上传到服务器上去,输入make命令进行编译将得到key.bin文件。
2.烧写
将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:
./sd_fusing.sh /dev/sdb ../../hardware_code/key/led.bin
如下图所示:

四、上电实验
这里就不贴图片了,有兴趣的可以自己试验。
上一篇:TINY4412 裸机程序之点灯
史海拾趣
|
3、“平安城市”的概念成为新时期的监控行业的热点。除了网络化、无线有线结合、高倍数镜头的趋势外,专门开发的高性能的摄像机和光学镜头引起了参观者的兴趣。高分辨率、超宽动态、超低照度。… 查看全部问答> |
|
第一讲 WEBENCH的简介和登陆 1.1 WEBENCH的简介 WEBENCH是美国国家半导体推出的一款功能非常强大的在线设计和仿真工具,可以对电源、LED、放大器、滤波器、音频、接口、无线以及信号路径进行设计与仿真。 1.2 WEBENCH的登陆 要想利 ...… 查看全部问答> |
|
代码如下: static OMAP3430_MCBSP_REGS_t *pMcbsp1Regs; pMcbsp1Regs = OALPAtoUA(OMAP_MCBSP1_REGS_PA); RETAILMSG(1,(TEXT(\"InitMcbsp1_32bit:pMcbsp1Regs = 0x%x\\r\\n\"),pMcbsp1Regs)); RETAILMSG(1,(TEXT(\ ...… 查看全部问答> |
|
[#TK1117] 4x4 4x4键盘问题,有四个键值始终不对,请大家帮帮忙 用89c2051做了一个键盘,P1.0-P1.3接上拉电阻,程序如下: uchar getkey() { uchar recode,key;   ...… 查看全部问答> |
|
我现在有个led流水灯的程序,大于 4K,S3C2440从nandflash启动时,前面有个引导码start.s,它负责硬件初始化并把之后的main函数COPY到SDRAM,资料上写2440会把前4K代码自动复制到SRAM上运行,现在有个疑问:之前这个start.s如果小于4K,那么这个4K就会 ...… 查看全部问答> |
|
已有文件abc.inf和abc.sys,如何用wise打包驱动? reference manual已阅,但是依然没有找到方法。 基本的使用我已经明白,设计到inf如何使用的部分不是很清楚,目前已经完成的操作就是: 1.拷贝文件。 abc.sys -> $(WINNT)\\System32\\DRIVERS abc.inf -> $(WINNT)\\inf 2.写注册表 [HKEY_LOC ...… 查看全部问答> |




