一羹膳、按鍵檢測原理
開發(fā)板上的按鍵1是接在了GPIOA->IDR寄存器上了梨水,只要通過讀取其寄存器狀態(tài)即可。
二插勤、 代碼分析
首先構(gòu)建
bsp_key.h
和bsp_key.c
兩文件于/USER/KEY文件夾內(nèi)泳挥;在
Keil MDK
工程里導(dǎo)入文件路徑-
bsp_key.h
文件主要寫一些方便以后修改方便的然痊、看起來簡潔的宏定義,以及#incude
一些必要的頭文件屉符、寫在.c
文件里的函數(shù)聲明#ifndef __BSP_KEY_H__ #define __BSP_KEY_H__ #include "stm32f10x.h" #define KEY_ON 1 #define KEY_OFF 0 #define KEY1_GPIO_PIN GPIO_Pin_0 //對應(yīng)的值 #define KEY1_GPIO_PORT GPIOA //外設(shè)GPIOA #define KEY1_GPIO_CLK RCC_APB2Periph_GPIOA //掛載時鐘 uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //函數(shù)聲明 void KEY_GPIO_Config(void); #endif /* __BSP_KEY_H__ */
-
bsp_key.c
位于/USER/KEY
文件夾內(nèi)剧浸。主要就是寫一些關(guān)于初始化和功能的函數(shù),供main主函數(shù)的使用矗钟。#include "bsp_key.h" void KEY_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK,ENABLE); GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空模式 GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStruct); } 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; }
附錄1 C語言異或用法
符號:
^
名稱:異或唆香,C語言的一個二進(jìn)制運(yùn)算符
功能表:相同為零;不同為一吨艇。
13.png
0⊕0=0,0⊕1=1 1⊕0=1,1⊕1=0
#define LED_G_TOGGLE {LED_G_GPIO_PORT->ODR ^= LED_G_GPIO_PIN;}