動動手指(按鍵)

2021-09-26 04:51:15 字數 1909 閱讀 6776

led燈我們接觸了管腳輸出功能,有出就有入,這一章將利用管腳的輸入功能來獲取按鍵的輸入值。進而控制led燈的亮滅。

依然是三步驟:

按鍵採用輪詢方式,也就是在死迴圈不斷檢測引腳電平。再led c語言版本上開發。

這裡先介紹一下看門狗,看門狗的作用:當長時間沒有「餵狗」,系統會重啟,這是為了讓晶元出現宕機時,能夠自己復位,重新執行。如何關閉呢?看晶元手冊。

搜尋dog可以找到關於看門狗的暫存器,bit0表明寫入0可以關閉復位功能

彙編**:

/* 關閉看門狗 */

ldr r0, =0x53000000

ldr r1, =0

str r1, [r0]

可以看出,按鍵按下是低電平

按鍵與soc的接線管腳是gpf0

只需要在bit[1:0]寫入00即可設定為輸入模式

"s3c2440_soc.h"包含了所有暫存器的操作位址

#include "s3c2440_soc.h"

void delay(volatile int d)

int main(void)

else

if (val1 & (1<<2)) /* s3 --> gpf5 */

else

if (val2 & (1<<3)) /* s4 --> gpf4 */

else

} return 0;

}

start.s

這裡為了區分nand啟動還是nor啟動,利用了nor不能直接寫的特性進行判斷。

.text

.global _start

_start:

/* 關閉看門狗 */

ldr r0, =0x53000000

ldr r1, =0

str r1, [r0]

/* 設定記憶體: sp 棧 */

/* 分辨是nor/nand啟動

* 寫0到0位址, 再讀出來

* 如果得到0, 表示0位址上的內容被修改了, 它對應ram, 這就是nand啟動

* 否則就是nor啟動

*/mov r1, #0

ldr r0, [r1] /* 讀出原來的值備份 */

str r1, [r1] /* 0->[0] */

ldr r2, [r1] /* r2=[0] */

cmp r1, r2 /* r1==r2? 如果相等表示是nand啟動 */

ldr sp, =0x40000000+4096 /* 先假設是nor啟動 */

moveq sp, #4096 /* nand啟動 */

streq r0, [r1] /* 恢復原來的值 */

bl main

halt:

b halt

將**編譯燒錄進arm開發板,可以看到按下s2鍵led3亮,按下s3鍵led2亮,按下s4鍵led1亮

動動手指 輕鬆執行每一天

當我們修改 後未進行編譯就直接除錯或執行時,visual c 會提示我們是否編譯新的 如圖 正常情況下就是這樣。只要我們編譯一次,就可以順利執行了。但有些時候,即便我們重新生成整個專案,專案過期提示依然會不請自來。當然,你可以將上面那個 不再顯示此對話方塊 勾上,再點選 是 執行程式,然後就 萬事大...

動動手指,助力你喜愛的蘇寧廣場舞團隊C位出道

雙十一臨近,全國的舞蹈愛好者都在忙乎同一件事兒,並不是剁手,而是報名參加蘇寧發起的 舞出www.cppcns.com我世界 全國廣場舞大賽。這場不限年齡的廣場舞比賽一經推出即成為目前關注度最高的活動之一,讓今年的雙十一提前熱鬧了起來。截至 10 月 23 日,已經收到了來自全國 50 個城市的 50...