硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1815|回复: 2
收起左侧

[技术讨论] 按键 FIFO 的bug 问题请教

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2021-9-1 20:27:27 | 显示全部楼层 |阅读模式
         教程提供的按键fifo 程序,不使用组合键。

按下key1,不松手,再去按Key2 按键,出现key2 不响应,出现了相当于按下 key1功能的操作。



回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2021-9-2 08:29:58 | 显示全部楼层
修改一下嘛,版主的教程是检查单个IO,然后组合在一起;你组合键就直接检测两个IO是不是同时满足;如版主的是01 && 02;然后你直接改成 03;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2021-9-2 08:38:17 | 显示全部楼层

回帖奖励 +5 个金币

我们的程序不支持依次按下处理,帮你做了一个,修改这里即可。

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: IsKeyDownFunc
  4. *        功能说明: 判断按键是否按下。单键和组合键区分。单键事件不允许有其他键按下。
  5. *        形    参: 无
  6. *        返 回 值: 返回值1 表示按下(导通),0表示未按下(释放)
  7. *********************************************************************************************************
  8. */
  9. static uint8_t IsKeyDownFunc(uint8_t _id)
  10. {
  11. #if 0 /* 使用组合键 */
  12.         /* 实体单键 */
  13.         if (_id < HARD_KEY_NUM)
  14.         {
  15.                 uint8_t i;
  16.                 uint8_t count = 0;
  17.                 uint8_t save = 255;
  18.                
  19.                 /* 判断有几个键按下 */
  20.                 for (i = 0; i < HARD_KEY_NUM; i++)
  21.                 {
  22.                         if (KeyPinActive(i))
  23.                         {
  24.                                 count++;
  25.                                 save = i;
  26.                         }
  27.                 }
  28.                
  29.                 if (count == 1 && save == _id)
  30.                 {
  31.                         return 1;        /* 只有1个键按下时才有效 */
  32.                 }               

  33.                 return 0;
  34.         }
  35.        
  36.         /* 组合键 K1K2 */
  37.         if (_id == HARD_KEY_NUM + 0)
  38.         {
  39.                 if (KeyPinActive(KID_K1) && KeyPinActive(KID_K2))
  40.                 {
  41.                         return 1;
  42.                 }
  43.                 else
  44.                 {
  45.                         return 0;
  46.                 }
  47.         }

  48.         /* 组合键 K2K3 */
  49.         if (_id == HARD_KEY_NUM + 1)
  50.         {
  51.                 if (KeyPinActive(KID_K2) && KeyPinActive(KID_K3))
  52.                 {
  53.                         return 1;
  54.                 }
  55.                 else
  56.                 {
  57.                         return 0;
  58.                 }
  59.         }

  60.         return 0;
  61.        
  62. #else  /* 不是组合键 */
  63.         /* 实体单键 */
  64.         if (_id < HARD_KEY_NUM)
  65.         {
  66.                
  67.                 if (KeyPinActive(_id))
  68.                 {
  69.                         return 1;
  70.                 }
  71.                
  72.                 return 0;
  73.         }

  74.         return 0;

  75. #endif
  76. }
复制代码


效果:
QQ截图20210902083814.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 03:48 , Processed in 0.226428 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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