我目前正在使用MSP430G2553,用C.编码
出于某种原因,我似乎很难编写基本的For
和While
循环,我无法弄清楚如何在每次迭代后使While
循环花费更长的时间来完成。 / p>
基本上,启动时我的LED闪烁100毫秒。
当我按住按钮时,我想让按住按钮的时间越来越慢,LED指示灯越来越慢。
当我松开时,LED应保持缓慢的闪烁速率。
然后,第二个按钮会将LED闪烁速率重置为100ms。
现在,当我按住按钮时,我能够减慢LED闪烁,但它不会继续变慢。老实说,我不知道如何去做,所以我在这里开了一个帐户并发布了。
for(;;) //loop forever
{
if((P1IN & BIT3)==BIT3) //if button is not pressed
{
i = 0;
a = 4000; //At 10000, 4 cycles per second, or 250ms delay. 4000 cycles = 100ms or 10Hz delay.
P1OUT ^= BIT0 + BIT6; //two LEDs
while(i < a) //delays LED blinking until while-loop is complete.
{
i = i + 1;
}
}
else if((P1IN & BIT3)!=BIT3) //if button is pressed
{
i = 0;
a = 10000;
P1OUT ^= BIT0 + BIT6;
while(i < a) //delays LED blinking until while-loop is complete.
{
a = a + 2;
i = i + 1;
}
}
}
答案 0 :(得分:1)
您需要保留&#34; 全球&#34; (在for
范围之外)延迟计数器以跟踪最后一次按下按钮,或延迟
int button1Pressed = 0; // "global" flag
for(;;)
{
if((P1IN & BIT3) != BIT3) // if button pressed
{
button1Pressed = 1;
}
if((P1IN & BIT4) != BIT4) // hypothetical button 2 press
{
button1Pressed = 0;
}
int delay = 4000;
if(button1Pressed)
{
delay = 10000;
}
while(delay>0) {
delay = delay - 1;
}
}