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

相關文章
相關標籤/搜索