欢乐家园 发表于 2024-2-24 13:32

分享一下按键扫描和LED切换问题的解决心得

在进行一个项目时,我遇到了一些关于按键扫描和LED切换的问题,但经过一番思考和努力,我终于找到了解决方案。我想在这里分享一下我的心得,同时也希望能够听到大家的建议和经验。

问题描述:

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

// 主程序
while(1)
{         
    if (LEDG_Flag)
    {
      LEDG_PWM(temp);
    }
    else
    {
      LEDR_PWM(temp);
    }                     
}

// 按键扫描
void Key_check()
{
    // ...(按键扫描逻辑)
}
解决方案:

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

我修改了计数器的阈值,并简化了按键松开后的逻辑。修改后的代码如下:
// 按键扫描
void Key_check()
{
    if(KEY1 == 0)
    {
      keydown++;
      if(keydown > 5)// 调整计数器阈值
      {
            keydown = 0;
            if(!LEDG_Flag)
            {
                LEDG_Flag = 1;
            }
            else
            {
                LEDG_Flag = 0;
            }
      }
    }
    else
    {
      keydown = 0;
    }
}
这一小改动解决了我的问题,现在LED切换工作得非常顺畅。希望通过我的分享,也能帮助到遇到类似问题的其他工程师们。

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

页: [1]
查看完整版本: 分享一下按键扫描和LED切换问题的解决心得