C代码:慢下来每次迭代后循环?

时间:2017-10-04 00:59:15

标签: c for-loop while-loop iteration msp430

我目前正在使用MSP430G2553,用C.编码 出于某种原因,我似乎很难编写基本的ForWhile循环,我无法弄清楚如何在每次迭代后使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;
        }
    }
}

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;
    }
}