stm32按鍵輸入

2021-08-18 06:31:32 字數 2189 閱讀 7332

對於上乙個實驗流水燈來說,這一次的實驗是獲取輸入的乙個小demo。

在課堂上,看老師除錯的時候,只要有輸入則輸入暫存器idr的值就會改變,所以想要獲得輸入只需要迴圈去獲取idr的值即可。在stm32的庫中有乙個讀取輸入資訊的函式:

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin)  引數一是埠,引數二是針腳。返回值是十六進製制的值(0x00或0x01),這個值可以直接與十進位制的0或1比較。

有了這個之後就可以像上次的實驗一樣,先開啟裝置時鐘,然後再設定引腳模式,最後呼叫這個函式讀取資訊即可。

1.按鍵電路原理圖

由圖中可以知道a埠的0號引腳為k1,c埠的13號引腳為k2。所以下一步要做的是讀取a埠的0號引腳先試試能不能讀取到資訊。

2.源**

#include "stm32f10x.h"

gpio_inittypedef gpio_initstructure;

int k1=0,k2=0;

void delay(__io uint32_t ncount) //ñó³ù£¬²îêýêäèë16½øöæêý£¬è磺0x0fffff

void init()

//red light

#define led1(on) if(on)else

//green light

#define led2(on) if(on)else

//blue light

#define led3(on) if(on)else

//white light

#define led(on) if(on)else

void readstatus()

if(gpio_readinputdatabit(gpioc, gpio_pin_13)) }

int main(void)

else

}}

上面的**就是不停的檢測k1鍵是否被按下,如果被按下就選擇開啟led燈1(紅燈)。通過觀察上面的**可以發現,我們只能檢測一次k1鍵是否被按下,被按下之後就無法檢測狀態了,或者說上面的**認為只要k1鍵被按過,就認為k1鍵一直被按著。所以我需要把**改一改。

修改後的**:

#include "stm32f10x.h"

gpio_inittypedef gpio_initstructure;

int k1_press=0,k2_press=0;

int k1_up=0,k2_up=0;

int k1_press_up=0,k2_press_up=0;

void delay(__io uint32_t ncount) //ñó³ù£¬²îêýêäèë16½øöæêý£¬è磺0x0fffff

void init()

//red light

#define led1(on) if(on)else

//green light

#define led2(on) if(on)else

//blue light

#define led3(on) if(on)else

//white light

#define led(on) if(on)else

void readstatus()else

} if(gpio_readinputdatabit(gpioc, gpio_pin_13))else

} }int main(void)

else if(k1_press_up%4==1)else if(k1_press_up%4==2)else

}}

主要就是加多了乙個k1_press_up變數用來記錄按下按鍵並鬆開了多少次,因為我們把按下並且鬆開這一整個動作視為按下了k1,所以在引腳電平為低的時候判斷是否之前有按下過就可以判斷是否有過一次按壓。

這一次實驗主要得到k1的資訊,並沒有用到k2,而我根據按壓了多少次來選擇led是否該亮,或者該亮什麼顏色。所以呢,如果再擴充套件一下,可以通過k2來控制燈亮的模式。

基本上輸入就是這樣的乙個操作,下一次實驗不知道可不可以開始涉及wifi模組了,關鍵是現在看不懂wifi模組的電路原理圖,所以現在還不敢去弄wifi模組 。。。

STM32按鍵輸入

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

Stm32學習之按鍵輸入

一 首先清楚硬體連線 不同stm32版本存在一定的區別,一下都是根據正點原子的stm32f1為例。二 按鍵輸入實驗的程式步驟 1.使能按鍵對應io口始終,呼叫函式 rcc apb2periphclockcmd 2.初始化io模式 上拉 下拉輸入。呼叫函式 gpio init 3.掃瞄io口電平 庫函...

STM32學習記錄 按鍵輸入

程式設計方式 庫函式 目標 按下key1後led燈狀態反轉 按下key2後蜂鳴器與led狀態反轉 按下key3後蜂鳴器狀態反轉 key1 key2低電平有效 key3高電平有效 可設定乙個靜態區域性變數static 變數值在第一次初始化一次,後面的值會存在靜態儲存區,值不會被釋放 來儲存按鍵狀態,以...