GD32F4xx按键点灯

独立按键的工作原理基于电平变化检测,按下时电平从高变低。由于机械抖动,需要采取消抖措施,如硬件电容消抖和软件延时消抖。在GPIO配置中,设置输入模式和下拉电阻,通过检测电平状态判断按键是否按下,并在程序中实现消抖功能以确保稳定检测。
摘要由CSDN通过智能技术生成

独立按键原理介绍

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");

   }

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值