GD32F4xx按键点灯

独立按键原理介绍

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

   }

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值