Tiny4412裸机程序,按键检测(轮询方式)
由于前幾天出差,博客沒有更新,今天看了看Tiny4412的原理圖,把按鍵掃描程序?qū)懥艘幌?#xff0c;用的是輪詢方式,后面會(huì)有中斷方式的實(shí)現(xiàn),閑話少說,進(jìn)入正題,程序由前一個(gè)實(shí)驗(yàn)Tiny4412之C語言實(shí)現(xiàn)流水燈更改而來:
一、控制原理說明
先看一下原理圖:
按鍵原理圖
首先把按鍵對(duì)應(yīng)的GPIO設(shè)置為輸入模式,修改GPX3CON寄存器(板子不同,可能對(duì)應(yīng)的GPIO管腳不同),通過上圖可知當(dāng)沒有按下按鍵時(shí),對(duì)應(yīng)的GPIO狀態(tài)為高電平,當(dāng)有按鍵被按下時(shí),對(duì)應(yīng)的GPIO變?yōu)榈?#xff0c;我們?cè)诔绦蛞恢睓z測(cè)這幾個(gè)GPIO狀態(tài)即可;
二、程序說明
其中Start.s文件同上一個(gè)實(shí)驗(yàn)完全相同;鏈接腳本key.lds的內(nèi)容和led.lds完全相同,只把名字改了改;Makefile的內(nèi)容也大部分一樣,也只是改了改里邊文件的名字,key.c的文件需要重新編寫,代碼如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | /* * 程序說明 * 一上電,4個(gè)LED全亮,當(dāng)某個(gè)按鍵被按下,則對(duì)應(yīng)的LED熄滅(可同時(shí)按下多個(gè)鍵) * 對(duì)應(yīng)關(guān)系:KEY1-LED1,KEY2-LED2,KEY3-LED3,KEY4-LED4 */ //按鍵對(duì)應(yīng)的GPIO #define GPX3CON (*(volatile unsigned int *)0x11000C60) #define GPX3DAT (*(volatile unsigned int *)0x11000C64) //LED對(duì)應(yīng)的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 設(shè)置為輸入功能,用于檢測(cè)按鍵引腳的狀態(tài) */ tmp = GPX3CON; tmp &= ~(0xffff << 8); GPX3CON = tmp; /* * GPM4_0-GPM4_3 設(shè)置為輸出功能,用于控制LED的亮滅 */ tmp = GPM4CON; tmp &= ~0xffff; tmp |= 0x1111; GPM4CON = tmp; while(1) { //讀按鍵引腳狀態(tài) keyValue = GPX3DAT; keyValue = (keyValue & (0xf << 2)) >> 2; if(keyValue != 0xf) //說明有按鍵被按下,再詳細(xì)判斷是哪個(gè)按鍵被按下 { delay(1000); //防抖 keyValue = GPX3DAT; keyValue = (keyValue & (0xf << 2)) >> 2; GPM4DAT = ~keyValue; //設(shè)置LED亮、滅 } else { GPM4DAT = 0x00; } } return 0; } |
其中注釋也比較詳細(xì),控制原理上邊也說得很清楚了,這里就不多說了,有問題可以留言。
三、程序編譯及燒寫
1.編譯
通過FTP或者其他工具將Start.s、Makefile、key.lds 、key.c四個(gè)文件上傳到服務(wù)器上去,輸入make命令進(jìn)行編譯將得到key.bin文件。
2.燒寫
將SD卡插入電腦,并讓VmWare里的Ubuntu識(shí)別出來,然后執(zhí)行如下命令:
| 1 | sudo ./sd_fusing.sh /dev/sdb ../3_key_scan/key.bin |
如下圖所示:
將程序燒到SD卡
四、上電實(shí)驗(yàn)
程序運(yùn)行圖一
程序運(yùn)行圖二
上圖所示,圖一是沒有按鍵被按下,四個(gè)LED全都被點(diǎn)亮,圖二是有兩個(gè)鍵被我同時(shí)按下
?
總結(jié)
以上是生活随笔為你收集整理的Tiny4412裸机程序,按键检测(轮询方式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 裸机篇 -- S5PV210的中断体系
- 下一篇: 一起学mini2440裸机开发(十)--