【按键你不知道的那些事】简单几句话实现按键按下下、长按、抬起、单击、双击动作

本文介绍了三种按键检测方式:阻塞式、外部中断式和定时器扫描加按键操作检测。阻塞式占用资源较多,中断式不占用时间但可能受限于硬件,定时器扫描方式则不占资源且能实现多种按键事件。推荐使用定时器扫描法进行按键检测。
摘要由CSDN通过智能技术生成

  闲来没事整理一下文档。这一篇我们来讲一讲按键的各种触发事件。
  下面我给大家简单介绍一下有哪些按键检测的方式。

方式1 阻塞式检测按键

void  KeyScan(void)
{
	if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_13) == 0)
	{
		HAL_Delay(20);
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_13) == 0)
		{
			//按键按下执行按键按下操作
			while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_13) == 0);//锁死按键
		}
	}
}

这里我们使用阻塞式按键检测,他大大的占用了系统的资源,使用了死等延时浪费系统的时间资源。并且在while循环中,如果按键按下那么没法执行其他的操作,这是最简单的按键检测,对我们操作实际项目不适用。

方式2 外部中断方式检测按键

这里方式二就是采用外部中断的方式来检测判断按键按下。相比较方式1,中断的方式检测按键不占用的系统时间资源,比第一种方法要好,缺点是要使用系统的外部中断。万一硬件的配置IO口紧缺,无法使用外部中断就不能执行该操作了。

方式3 使用定时器扫描加按键方式操作检测按键

话不多说我们先来一段代码

#define  LONGKEEP_TICK   200 //这里是长按时间设置根据你的定时器来说如果放在1ms定时器这里设置时间是 5*200  = 1000ms
uint16_t  Count;
uint16_t  TempKeyData,KeyData ;
uint16_t  KeyReadData ,;
uint16_t  Trg , Release ,Cont ,LongPress_
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值