OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1455|回复: 4

按键驱动(单击,长按,连续长按,组合键(单击和长按))

[复制链接]

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2014-8-14
在线时间
129 小时
发表于 2024-9-11 10:43:14 | 显示全部楼层 |阅读模式
本帖最后由 Cindre鞡 于 2024-9-11 14:23 编辑

硬件平台:原子ESP32开发板(因为这个即有IO按键也有ic扩展按键)
-----------------------------------------------------------------------------
按键功能:1.单个按键单击,返回CLICK事件
                 2.单个按键长按,返回HOLD事件
                 3.单个按键连续长按,连续返回HOLD事件
                 4.组合按键单击,返回CK_CLICK事件
                 5.组合按键长按,返回CK_HOLD事件
                 7.组合按键连续长按,连续返回CK_HOLD事件
                 8.连续时间采集判断消抖
                 9.允许一定抖动次数
                 注:长按和连续长按功能只能二选一
-----------------------------------------------------------------------------
按键类型支持:IO按键,AD按键,电容按键,ic扩展按键
-----------------------------------------------------------------------------
驱动代码有大量注释,方便理解其逻辑
主程序调用示例:
  1. void KEY_Task(void *pvParameters)
  2. {

  3.         uint8_t key_value = 0;

  4.         for(;;)
  5.         {

  6.                 vTaskDelay(1);
  7.                
  8.                 key_value = KEY_Read();
  9.                
  10.                 switch(key_value)
  11.                 {
  12.                         case KEY_BOOT_CLICK:
  13.                         {
  14.                                 
  15.                         }
  16.                         break;
  17.                         
  18.                         case KEY_BOOT_HOLD:
  19.                         {
  20.                         
  21.                         }
  22.                         break;

  23.                         case KEY_0_CLICK:
  24.                         {
  25.                         
  26.                         }
  27.                         break;
  28.                         
  29.                         case KEY_0_HOLD:
  30.                         {
  31.                         
  32.                         }
  33.                         break;

  34.                         case KEY_CK1_CLICK:
  35.                         {
  36.                                 DebugPrintf("Key CK1 Click\r\n");
  37.                         }
  38.                         break;
  39.                         
  40.                         case KEY_CK1_HOLD:
  41.                         {
  42.                                 DebugPrintf("Key CK1 Hold\r\n");
  43.                         }
  44.                         break;
  45.                 }
  46.         
  47.         }

  48. }
复制代码


按键驱动源码:
key.zip (2.65 KB, 下载次数: 19)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10540
金钱
10540
注册时间
2017-2-18
在线时间
1908 小时
发表于 2024-9-12 16:25:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2014-8-14
在线时间
129 小时
 楼主| 发表于 2024-9-13 16:44:47 | 显示全部楼层

感谢阅读
回复 支持 反对

使用道具 举报

5

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2021-11-22
在线时间
141 小时
发表于 2024-9-13 17:27:44 | 显示全部楼层
请问vtaskdelay(1) 是1ms吗? 为啥要用这个延迟啊.. 谢谢
回复 支持 反对

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2014-8-14
在线时间
129 小时
 楼主| 发表于 2024-9-18 08:41:10 | 显示全部楼层
1759817440 发表于 2024-9-13 17:27
请问vtaskdelay(1) 是1ms吗? 为啥要用这个延迟啊.. 谢谢

是1ms,每个任务我都是相同优先级,这里要让出cpu给其他任务运行一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 06:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表