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