蓝桥杯嵌入式(基础教程)(二)STM32G431RBT6——按键(上升沿,下降沿检测)

cubemx的配置:

首先要找到原理图中对应的按键引脚

可以通过原理图观察到,按键所对应的引脚是PB0、PB1、PB2、PA0。因此在cubemx中需要将这些对应的引脚配置成输入模式。

之后需要对GPIO进行相应的配置(也可以不用进行配置)

按键程序的编写:

可以编写.c文件便于分类,也可以直接在主函数中进行子函数的编写。

uint8_t key_scan(void)
{
	uint8_t KEY_reavalue;
	KEY_reavalue=0;
		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)
		KEY_reavalue=1;
		else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)
		KEY_reavalue=2;
		else	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)
		KEY_reavalue=3;
		else	if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
		KEY_reavalue=4;
					
		return KEY_reavalue;

}

之后调用该函数对按键进行处理。

if(uwTick-key_slown_value<=150) return;
		key_slown_value=uwTick;
	
	key_value=key_scan();
	key_down=key_value&(key_value^key_old);
	key_up=~key_value&(key_value^key_old);
	key_old=key_value;
	
	
	if(key_down)//开始计时
	{
			key_clock_short_count=key_clock_long_count;
		
	}
	if(key_clock_long_count-key_clock_short_count<800)
	{
	
			switch (key_up)
			{
				case 1:
				{
						
					
					
					}
					
				break;
				case 2:
				{
						
			
			
			}break;
				case 3:
				{
					
					
				}break;
					case 4:
				{
						
						
							
	}
	else{
	if(key_old==3)//快速增加
	{
			
					
						
				}break;
				case 2:
				{
							
				}break;
				case 3:
				{
				}break;
				case 4:
				{
					
						
					
				}break;
			
			}

	
	}
	
	

该段代码是通过内部的滴答定时器计数,来使得实现按键的长短按。

该代码的核心是三段代码将按键的下降沿、上升沿、和长按时保持不变的值。

    key_value=key_scan();
	key_down=key_value&(key_value^key_old);//下降沿
	key_up=~key_value&(key_value^key_old);//上升沿
	key_old=key_value;//上一次的读取值
	

之后是通过内部的滴答定时变量

uwTick

来进行计时

当key_down发生变化时(按下按键,有下降沿)便开始赋值给计时变量。之后在800ms内部属于短按,进行相应的操作,否则的话就是进行长按,长按可以进行上升沿检测。

之后再进行相应的代码操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值