使用带按钮的 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++;
这行得通。然而更难理解。尝试写一些更容易阅读的东西。
我不明白我的代码有什么问题。在这里,我要做的是在按下按钮时切换 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++;
这行得通。然而更难理解。尝试写一些更容易阅读的东西。