03 原子戰艦 按鍵輸入實驗(暫存器)

2021-10-03 03:20:32 字數 1662 閱讀 8884

//pa0 wk_up 即 key_up

#define key0_pres 1

//key0 按下

#define key1_pres 2

//key1 按下

#define key2_pres 3

//key2 按下

#define wkup_pres 4

//key_up 按下(即 wk_up/key_up)

void

key_init

(void);

//io 初始化

u8 key_scan

(u8)

;//按鍵掃瞄函式

#endif

這裡使用的是位帶操作來實現讀取某個 io 口的 1 個位的。

key0_pres / key1_pres/ key2_pres/wkup_press 等 4個巨集定義,分別對應開發板四個按鍵(key0/key1/key2/ key_up)按鍵按下時 key_scan返回的值。

#include

"key.h"

#include

"delay.h"

//按鍵初始化函式

void

key_init

(void

)//按鍵處理函式

//返回按鍵值

//mode:0,不支援連續按;1,支援連續按;

//0,沒有任何按鍵按下

//1, key0 按下

//2, key1 按下

//3, key2 按下

//4, key3 按下 wk_up

//注意此函式有響應優先順序,key0>key1>key2>key3!!

u8 key_scan

(u8 mode)

else

if(key0==

1&&key1==

1&&key2==

1&&wk_up==0)

key_up=1;

return0;

// 無按鍵按下

}

key_scan 函式, 支援兩種掃瞄方式,通過 mode 引數來設定。

#include

"sys.h"

#include

"delay.h"

#include

"led.h"

#include

"beep.h"

#include

"key.h"

intmain

(void)}

else

delay_ms(10

);}}

02 原子戰艦 蜂鳴器實驗(暫存器)

蜂鳴器的驅動訊號連線在 stm32f1 的 pb8 上。我們這裡通過位帶操作來實現某個 io 口的輸出控制,beep 就直接代表了 pb8 的輸出狀態。我們只需要令 beep 1,就可以讓蜂鳴器發聲。ifndef beep h define beep h include sys.h define b...

彙編03 暫存器

乙個cpu由以下幾個部分組成 1 運算器 負責資訊處理 2 暫存器 進行資訊儲存 3 控制器 控制各種器件進行工作 4 內部匯流排 連線各種器件 外部匯流排實現cpu和主機板其他部件的聯絡 8086cpu的所有暫存器都是16位的,可以存放兩個位元組,ax bx cx dx這4個暫存器通常用來存放一般...

crh暫存器 實驗 使用暫存器點亮LED

埠配置高暫存器後面的英文就是暫存器名稱可參考參考手冊,然後x可以為a e也就是適用gpuoa gpioe埠這樣的乙個暫存器。位址偏移,就是本暫存器相對這個外設基位址的偏移 暫存器位表 表示0 31位名稱及許可權,表上方的數字位編號,中間位位名稱,下方位讀寫許可權,w表示寫,r表示讀 位功能,如表所描...