TA的每日心情 | 开心 2024-1-16 17:48 |
---|
签到天数: 592 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 robe.zhang 于 2018-10-27 01:33 编辑
freeRTOS 中写了一个按键扫描任务,很管用,很灵敏:按下可以检测到,松开也可以检测到,不支持按一下不停的触发。按一下触发一次,按住当作一次算。
- enum key_status
- {
- RELEASE =0,
- PRESS = 1,
- };
- void key0_press_callback(void)
- {
- ; //这里写自己的按键回调代码,按下回调
- }
- void key0_release_callback(void)
- {
- ; //这里写自己的按键回调代码,松开回调,一般使用按下回调,可以不用松开回调
- }
- void key0_function(void const * argument)
- {
- int key0_status=RELEASE;
- for(;;)
- {
- if(key0_status==RELEASE)
- {
- if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==0)
- {
- osDelay(10);
- if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==0)
- {
- key0_status=PRESS;
- key0_press_callback();
- osDelay(10);
- }
- }
- osDelay(20);
- }
- else
- {
- if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==1)
- {
- osDelay(10);
- if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==1)
- {
- key0_status=RELEASE;
- key0_release_callback();
- osDelay(10);
- }
- }
- osDelay(20);
- }
- }
- }
复制代码
|
|