我不明白我的代码有什么问题。这里我要做的是按下按钮时切换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);
}
计算我的按钮点击次数。
如果计数值为偶数LED为高电平,则LED为低电平。但是当我上传这个程序时,LED会一直亮着。只有在按住按钮时关闭。我会很感激任何想法。感谢。
count++
好的,它已经解决了。我在上面添加 if(buttonState==1)
count++;
CREATE TABLE STUDENT(
student_number CHAR(4) NOT NULL,
first_name VARCHAR(50) NULL,
last_name VARCHAR(50) NULL,
date_of_birth DATE NULL,
student_type VARCHAR(20) NULL,
CONSTRAINT student_pkey PRIMARY KEY (student_number),
CONSTRAINT student_check1 CHECK (student_type POSTGRADUDATE_STUDENT OR UNDERGRADUATE_STUDENT));
答案 0 :(得分:1)
您的逻辑存在问题。按下按钮时,您有两处更改。第一个更改是从0到1(按下),第二个更改是从1到0(释放按钮)。
尝试类似:
if(lastButtonState == 0 && buttonState == 1)
答案 1 :(得分:0)
您的按钮是高电平有效还是低电平有效?您的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++;
这很有效。然而,更难理解。尝试写一些更容易阅读的内容。