Tiny4412裸机程序,按键检测

1、控制原理说明

先看一下原理图:服务器

首先把按键对应的GPIO设置为输入模式,修改GPX3CON寄存器(板子不一样,可能对应的GPIO管脚不一样),经过上图可知当没有按下按键时,对应的GPIO状态为高电平,当有按键被按下时,对应的GPIO变为低,咱们在程序一直检测这几个GPIO状态便可。工具

2、程序说明

其中Start.s文件同上一个实验彻底相同;连接脚本key.lds的内容和led.lds彻底相同,只把名字改了改;Makefile的内容也大部分同样,也只是改了改里边文件的名字,key.c的文件须要从新编写,代码以下:spa

/*
* 程序说明
* 一上电,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;
}

其中注释也比较详细,控制原理上边也说得很清楚了,这里就很少说了,有问题能够留言。code

3、程序编译及烧写

1.编译图片

经过FTP或者其余工具将Start.s、Makefile、key.lds 、key.c四个文件上传到服务器上去,输入make命令进行编译将获得key.bin文件。文件上传

2.烧写编译

将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,而后执行以下命令:class

./sd_fusing.sh /dev/sdb ../../hardware_code/key/led.bin

以下图所示:原理

4、上电实验

这里就不贴图片了,有兴趣的能够本身试验。file

相关文章
相关标签/搜索