关于按键检测,我看视频有10遍左右,但是依然不懂,后来在学长,同学的帮助下,总算做成了。给大家分享一下。
建立"bsp_key.h"及"bsp_key.c"文件。
“bsp_key.h”文件用于宏定义等。在其中定义一个引脚用于输入。部分代码如下:
#define KEY1_ON 1
#define KEY1_OFF 0
#define KEY1_GPIO_PIN GPIO_Pin_6
#define KEY1_GPIO_PORT GPIOB
#define KEY1_GPIO_CLK RCC_APB2Periph_GPIOB
void KEY1_GPIO_Config(void);
uint8_t Key1_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);
uint8_t Key1_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin);这个库函数用于扫描按键是否按下。
"bsp_key.c"用于初始化引脚。代码如下:
uint8_t Key1_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY1_ON )
{
//松手检测
while( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY1_ON );
return KEY1_ON;
}
else return KEY1_OFF;
}
初始化引脚的代码就不上传了,模式都一样。
接下来就是"main.c"中的程序,部分代码如下:
LED1_GPIO_Config();
KEY1_GPIO_Config();
while( 1 )
{
if(Key1_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY1_ON)
LED1_G_TOGGLE;
}
TOGGLE是什么意思呢?“翻转”。怎么说呢?就是从低电平(二进制数0)转化为高电平(二进制数1),或者从高电平转化为低电平。代码如下:
//异或 :0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)
#define LED1_G_TOGGLE {LED1_G_GPIO_PORT->ODR ^= LED1_G_GPIO_PIN;}
程序部分大致就是这样。
图中的电阻千万别忘记,否则容易将板子短路。我就是忘记接电阻,将板子短路,来来回回折腾啦好几天。
希望能结识大神!也希望读者能指出错误!
各位看官点个赞可好?
小弟谢谢你了!!