本文主要是介绍FreeRTOS中耐用的按键长短按识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 长按连续触发
- 根据长按时间执行功能
一个按键如果能有好几种功能,那么能大大节约 GPIO 引脚,在FreeRTOS中使用其计时器可以实现按键的长按和短按识别,并非裸机那般还需要加上定时器或在执行按键长按检测的代码时无法进行其他操作(实时性差)。
所以这里列举了按键长按可以实现的两种功能。
长按连续触发
计算长按时间,并根据长按时间做出不同反馈。也许用软件定时器会精简点,先鸽着
void TaskKey1()
{while(1){vTaskDelay(40);if(!KEY1){uint32_t t1 = xTaskGetTickCount();while(1){if(!KEY1){uint32_t t2 = xTaskGetTickCount(); if(t2 - t1 > 2000){printf("长按\n");while(!KEY1);vTaskDelay(40);t2 = xTaskGetTickCount(); printf("本次长按时间:%dms",t2 - t1);switch((t2 - t1) / 1000){case 0: /* 填你的代码 */;break;}break;}}else{/* 填你的代码 */printf("短按\n");break;}}}}
}
根据长按时间执行功能
短按单次触发,长按连发。
void TaskKey1()
{while(1){vTaskDelay(40);if(!KEY1){uint32_t t1 = xTaskGetTickCount();while(1){if(!KEY1){uint32_t t2 = xTaskGetTickCount(); if(t2 - t1 > 2000){while(!KEY2){if((xTaskGetTickCount() - t1) % 1000 == 0){ /* 填你的代码 */printf("长按\n");}}}}else{/* 填你的代码 */printf("短按\n");break;}}}}
}
这篇关于FreeRTOS中耐用的按键长短按识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!