程式設計方式:庫函式
目標:按下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按鍵的相...