使用CCS切换带按钮的LED

时间:2018-04-18 05:44:47

标签: c button toggle pic electronics

我不明白我的代码有什么问题。这里我要做的是按下按钮时切换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));

2 个答案:

答案 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%21,您的图钉将为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++;

这很有效。然而,更难理解。尝试写一些更容易阅读的内容。