[应用方案] 分享一下按键扫描和LED切换问题的解决心得

[复制链接]
1894|0
 楼主| 欢乐家园 发表于 2024-2-24 13:32 | 显示全部楼层 |阅读模式
在进行一个项目时,我遇到了一些关于按键扫描和LED切换的问题,但经过一番思考和努力,我终于找到了解决方案。我想在这里分享一下我的心得,同时也希望能够听到大家的建议和经验。

问题描述:

我的主程序中包含了一个while(1)循环,不断检测按键状态并根据状态切换LED的颜色。按键扫描和LED切换的逻辑看起来应该没有问题,但实际运行时LED切换并不如预期。

  1. // 主程序
  2. while(1)
  3. {         
  4.     if (LEDG_Flag)
  5.     {
  6.         LEDG_PWM(temp);
  7.     }
  8.     else
  9.     {
  10.         LEDR_PWM(temp);
  11.     }                       
  12. }

  13. // 按键扫描
  14. void Key_check()
  15. {
  16.     // ...(按键扫描逻辑)
  17. }
解决方案:

通过仔细检查我的代码和逻辑,我发现在按键松开后,我设置了一个keydown计数器,但是在计数达到一定值后才能进行LED的切换。这可能导致了按键松开后切换的延迟,影响了LED的正常工作。

我修改了计数器的阈值,并简化了按键松开后的逻辑。修改后的代码如下:
  1. // 按键扫描
  2. void Key_check()
  3. {
  4.     if(KEY1 == 0)
  5.     {
  6.         keydown++;
  7.         if(keydown > 5)  // 调整计数器阈值
  8.         {
  9.             keydown = 0;
  10.             if(!LEDG_Flag)
  11.             {
  12.                 LEDG_Flag = 1;
  13.             }
  14.             else
  15.             {
  16.                 LEDG_Flag = 0;
  17.             }
  18.         }
  19.     }
  20.     else
  21.     {
  22.         keydown = 0;
  23.     }
  24. }
这一小改动解决了我的问题,现在LED切换工作得非常顺畅。希望通过我的分享,也能帮助到遇到类似问题的其他工程师们。

欢迎大家分享你们在按键扫描和LED控制方面的经验和技巧!

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

本版积分规则

114

主题

1067

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部