STM32學習記錄 按鍵輸入

2021-10-10 14:30:55 字數 1810 閱讀 2045

程式設計方式:庫函式

目標:按下key1後led燈狀態反轉;按下key2後蜂鳴器與led狀態反轉;按下key3後蜂鳴器狀態反轉

key1、key2低電平有效

key3高電平有效

可設定乙個靜態區域性變數static(變數值在第一次初始化一次,後面的值會存在靜態儲存區,值不會被釋放)來儲存按鍵狀態,以此來控制是否支援長按(長按會一直傳送鍵值,會反覆反轉狀態,不長按只要不鬆開就不會繼續傳送鍵值相當於只按依次)

#include

"stm32f10x.h"

#include

"key.h"

#include

"delay.h"

#define key1 1

#define key2 2

#define key3 3

#define k1 gpio_readinputdatabit(gpioe, gpio_pin_4)

#define k2 gpio_readinputdatabit(gpioe, gpio_pin_3)

#define k3 gpio_readinputdatabit(gpioa, gpio_pin_0)

void

key_init()

intkey_scan()

else

if(k2==0)

else

if(k3==1)

}else

if(k1==

1&&k2==

1&&k3==0)

return0;

}

長按:

int

key_scan()

else

if(k2==0)

else

if(k3==1)

}}

為什麼低電平有效就用上拉輸入

首先,上拉電阻是為了保證在沒有訊號輸入的時候,io口保持高電平,若按鍵為低電平有效,則沒有訊號的時候,io應呈現高電平,所以,此處應設定為上拉輸入。

同理,下拉電阻是為了保證在沒有訊號輸入的時候,io口保持低電平,若按鍵為高電平有效,則沒有訊號的時候,io應呈現低電平。

#include

"stm32f10x.h"

#include

"beep.h"

void

beep_init

(void

)

#include

"stm32f10x.h"

#include

"led.h"

void

led_init

(void

)

#include

"stm32f10x.h"

#include

"led.h"

#include

"beep.h"

#include

"key.h"

#include

"sys.h"

#include

"delay.h"

#define led pbout(5)

#define beep pbout(8)

intmain()

case2:

case3:

}}else

}}

遇到的坑

1.開始引腳定義錯誤

2.源程式通過引數來控制是否長按,但經過驗證發現並不行

學習記錄 STM32按鍵輸入實驗

使用藍橋杯ct117e板子 使用stm32標準庫檔案 從圖中可以看出在按鍵未按下時,引腳為高電平。當按鍵按下時引腳為低電平。所以在gpio初始化時使用上拉輸入模式。1.初始化相應引腳 gpio inittypedef gpioa init key gpio inittypedef gpiob ini...

stm32按鍵輸入

對於上乙個實驗流水燈來說,這一次的實驗是獲取輸入的乙個小demo。在課堂上,看老師除錯的時候,只要有輸入則輸入暫存器idr的值就會改變,所以想要獲得輸入只需要迴圈去獲取idr的值即可。在stm32的庫中有乙個讀取輸入資訊的函式 uint8 t gpio readinputdatabit gpio t...

STM32按鍵輸入

這一節通過按鍵輸入的實驗,完成對io口配置輸入的學習,同時學習如何通過軟體去抖動。這一節最終可以實現利用wk up按鍵控制led亮滅的效果。與上一節點亮led相類似,這一節也需要在hardware資料夾內新建檔案key.h和key.c。同時將相應的檔案加入到工程中。檢視原理圖,獲取wk up按鍵的相...