查看: 3711|回复: 3

[原创] freeRTOS 中写了一个按键扫描任务

[复制链接]
  • TA的每日心情
    开心
    2024-1-16 17:48
  • 签到天数: 592 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2018-10-27 01:24:43 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 robe.zhang 于 2018-10-27 01:33 编辑

    freeRTOS 中写了一个按键扫描任务,很管用,很灵敏:按下可以检测到,松开也可以检测到,不支持按一下不停的触发。按一下触发一次,按住当作一次算。
    1. enum key_status
    2. {
    3.         RELEASE =0,
    4.         PRESS = 1,
    5. };
    6. void key0_press_callback(void)
    7. {
    8.         ; //这里写自己的按键回调代码,按下回调
    9. }
    10. void key0_release_callback(void)
    11. {
    12.         ; //这里写自己的按键回调代码,松开回调,一般使用按下回调,可以不用松开回调
    13. }
    14. void key0_function(void const * argument)
    15. {
    16.         int key0_status=RELEASE;
    17.         for(;;)
    18.   {
    19.                 if(key0_status==RELEASE)
    20.                 {
    21.                         if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==0)
    22.                         {
    23.                                 osDelay(10);
    24.                                 if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==0)
    25.                                 {
    26.                                         key0_status=PRESS;
    27.                                         key0_press_callback();
    28.                                         osDelay(10);
    29.                                 }
    30.                         }
    31.                         osDelay(20);
    32.                 }
    33.                 else
    34.                 {
    35.                         if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==1)
    36.                         {        
    37.                                 osDelay(10);
    38.                                 if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==1)
    39.                                 {
    40.                                         key0_status=RELEASE;
    41.                                         key0_release_callback();
    42.                                         osDelay(10);
    43.                                 }
    44.                         }
    45.                         osDelay(20);
    46.                 }
    47.   }
    48. }
    复制代码



    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 08:07
  • 签到天数: 1053 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2018-10-29 07:59:06 | 显示全部楼层
    学习啦            
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-4-8 15:13
  • 签到天数: 42 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2018-10-29 15:27:06 | 显示全部楼层
    我也学习学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 02:07 , Processed in 0.141742 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.