独立按键原理介绍
1.独立按键基础知识
如上拉模式是 按下之后有原先的电压3.3变成了0
①独立按键结构组成
通过检测按键按下前后的高低电平变化来判断按键是否按下
机械式按键在按下或者释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。
②独立按键原理
③消抖措施
在触点抖动期间检测按键的按下与否可能会导致判断错误,为了克服机械抖动所产生的影响,必须采取消抖措施,可分为硬件消抖和软件消抖。
硬件消抖:硬件消抖一般会在按键两端并联电容,通过电容的充放电作用将按键按下时的高频振荡吸收掉。
软件消抖:软件消抖一般是通过延时。当检测到按键按下时,不会立即去检测当前引脚的电平状态,而是经过短暂的延时之后,再去检测当前引脚的电平
2.独立按键原理图
屏幕剪辑的捕获时间: 2023/5/13 19:35
3.独立按键驱动流程
由图可知这个是低电平的时候是按键没有按下的,如果是高电平则说明按下按键了
按键点灯
1.配置GPIO流程
要检测电平引脚的状态,就需要将按键配置为输入模式。
开发板上的按键默认接的是低电平,也就按键松开的状态需要是低电平,在默认状态下需要将按键的状态保持为低电平。开发板上已经做了下拉处理,代码中可以配置为无上下拉也可以配置为下拉
①配置GPIO的端口时钟
/*定义key的引脚**/
#define BSP_KEY_RCU RCU_GPIOA
#define BSP_KEY_PORT GPIOA
#define BSP_KEY_PIN GPIO_PIN_0
//开启时钟
Rcu_periph_clock_enable(BSP_KEY_RCU)
②配置GPIO的模式
gpio_mode_set(BSP_KEY_PORT,GPIO_MODE_INPUT,GPIO_PUPD_PULLDOWN,BSP_KEY_PIN);
③配置GPIO的输出
gpio_output_options_set(BSP_KEY_PORT,GPIO_OTYPE_OD,GPIO_OSPEED_50MHZ,BSP_KEY_PIN);
2.检测按键状态
判断按键是否按下只需要判断检测的引脚电平是高电平即可
1.获取引脚状态
FlagStatus gpio_input_bit_get(uit32_t gpio_periph,uint32_t pin);
②获取PA0引脚的电平状态
Gpio_input_bit_get(BSP_KEY_PORT,BSP_KEY_PIN)
3按键实验效果
void key_scan(void) //按键状态
{
/*获取按键引脚的电平状态*/
if(gpio_input_bit_get(BSP_KEY_PORT,BSP_KEY_PIN)==SET)
{
delay_1ms(20);//消抖
if(gpio_input_bit_get(BSP_KEY_PORT,BSP_KEY_PIN)==SET)//再次确认从而确认按键按下
{
/*执行对应的功能*/
//PDout(7)=1;
gpio_bit_toggle(PORT_LED1,PIN_LED1);//这里是调用灯的引脚和参数
printf("key press!\r\n");
while(gpio_input_bit_get(BSP_KEY_PORT,BSP_KEY_PIN)==SET);//检测按键松开
printf("key release!\r\n");
}
}
}