使用带按钮的 CCS 切换 LED

Using CCS Toggle LED With Button

我不明白我的代码有什么问题。在这里,我要做的是在按下按钮时切换 LED。我用 int count; 来计算我的按钮点击次数。 如果计数为偶数,则 LED 为高电平,否则 LED 为低电平。但是当我上传这个程序时,LED 一直亮着。只有在我按住按钮时才会关闭。

while(1){
int buttonState=input_state(pin_a0);

   if(buttonState != lastButtonState){
   count++;
   lastButtonState=buttonState;
     
      if(count%2==0){
      output_high(pin_b0);
      }
      else
      output_low(pin_b0);
}
delay_ms(50);
}

你的逻辑有问题。按下按钮时有两个变化。第一个变化是从 0 到 1(按下),第二个变化是从 1 到 0(释放按钮)。

试试这样的:

if(lastButtonState == 0 && buttonState == 1)

你的按钮是高电平有效还是低电平有效?您的 LED 是高电平有效还是低电平有效?您需要提供该信息。 假设当输出低时 LED 通电,我将给出一个解释。接下来是,假设按钮处于低电平状态,当您的按钮未按下时,

buttonState = 1;

所以,自从

lastButtonState = 0;

(我假设在程序开始时)

您将输入 if 子句:

if(buttonState != lastButtonState){
...
}

这将使你的计数器加一,使 lastButtonState = buttonState;

由于 count%2 将是 1,您的引脚将是 output_low(pin_b0);...因此,在您的程序开始时,您的 LED 将亮起。

如果您随后按下按钮,

buttonState=0;

将会发生,您将再次输入 if() 子句。这将使您的计数器增加一个。然后:

count%2 = 0;

会发生的。所以,你将拥有

output_high(pin_b0);

如您所见,当您按下按钮时,您的 LED 灯会熄灭。当您松开按钮时,您的 LED 灯会亮起试试这个:

while(1){
   int buttonState=input_state(pin_a0);

   if(buttonState != lastButtonState){
   lastButtonState=buttonState;

      if(buttonState == 1){
          output_high(pin_b0); // LED is off
      }
      else
          output_low(pin_b0); // LED is on
   }
delay_ms(50);
}

你不需要计数器。

编辑:

我看到您在代码中添加了以下内容:

if(buttonState==1) 
   count++;

这行得通。然而更难理解。尝试写一些更容易阅读的东西。