GPIO輸入—按鍵檢測(開關控制小燈)


本次的代碼全是在上次代碼之上添加的.

1.user下新建文件夾key,新建bsp_key.h bsp_key.c文件.

2.keil項目添加bsp_key.c,魔術棒C/C++中include path添加key文件夾.

3.相應的源碼為:

bsp_key.h中內容

//條件編譯,防止重復定義頭文件(stm32f10x.h在這里引入,但是在主函數中仍然引入,會被加載兩次,若沒有添加編譯會報錯.)
#ifndef BSP_KEY_H_
#define BSP_KEY_H_

#include "stm32f10x.h"

#define  KEY_ON 1
#define  KEY_OFF 0

#define KEY_LED_GPIO_PIN     GPIO_Pin_13
#define KEY_LED_GPIO_PORT    GPIOC
#define KEY_LED_GPIOC_CLOCK  RCC_APB2Periph_GPIOC

void KEY_LED_Config(void);
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

#endif

bsp_key.c中內容

//只需要包含自身的頭文件即可
#include "bsp_key.h"
//配置按鍵的GPIOC,配置完成后通過檢測GPIOC的pin13引腳(對應的寄存器為GPIOC-IDR-PIN13)的高低電平 判斷鍵是否被按下,高--按下,低--未按下 void KEY_LED_Config(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(KEY_LED_GPIOC_CLOCK, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Pin=KEY_LED_GPIO_PIN; GPIO_Init(KEY_LED_GPIO_PORT, &GPIO_InitStruct); }
//檢測案件是否按下函數 GPIO_ReadInputDataBit 庫函數中函數,含義為 檢測某個GPIOX的某個pin的電平
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin){ /*檢測是否有按鍵按下 */ if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin)==KEY_ON){ /*等待按鍵釋放 */ while(GPIO_ReadInputDataBit( GPIOx, GPIO_Pin)==KEY_ON) ; return KEY_ON ; }else return KEY_OFF; }

 

main函數中內容

#include "stm32f10x.h"   // 相當於51單片機中的  #include <reg51.h>
#include "bsp_led.h"
#include "bsp_key.h"

#define SOFT_DELAY    Delay(0x0FFFFF);
//void Delay(__IO u32 nCount);
void Delay( uint32_t count){
 for( ;count!=0;count--);

}


int main(void)
{
	// 來到這里的時候,系統的時鍾已經被配置成72M。
	LED_GPIO_Config();
//默認情況,燈為滅的.(LED電路圖為低電平點亮,配置完成后默認為低電平,即便是不賦值也會亮起來) LED_OFF; KEY_LED_Config(); while(1){ if(Key_Scan(KEY_LED_GPIO_PORT,KEY_LED_GPIO_PIN)==KEY_ON){ LED_TOGGLE; //有按鍵按下,燈的亮滅翻轉一次 } } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM