for循环没有读取我的if语句

时间:2015-09-03 09:36:45

标签: c for-loop

我试图通过光传感器打开LED。但每次我尝试运行它时,光传感器都可以工作,但它不会越过“printf(电压......)。它没有到达if循环。为什么会这样?我在每个if语句中添加了printf所以我知道我可以到达那条线。

int doADCConversion()
{
ADC0->SC1[0] = ADC_SC1_ADCH(19);


while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) == 0)
{
    printf("Conversion in progress..\n");
}


return ADC0->R[0];
 }


    for(;;)
    {
    temp = doADCConversion();
    printf("Voltage = %d\n", temp);

    if(temp < 50){
        printf("Turn on LED 1/n");
        setLED(0);
        delay();
    }
    else if (temp < 100){
        printf("Turn on LED 2/n");
        setLED(1);
        delay();
    }
    else if (temp < 150){
        printf("Turn on LED 3/n");
        setLED(2);
        delay();
    }
    else if (temp < 200){
        printf("Turn on LED 4/n");
        setLED(3);
        delay();
    }
    else if (temp < 250){
        printf("Turn on LED 5/n");
        setLED(4);
        delay();
    }
    else {
        setLED(5);
        printf("Turn on LED 6/n");
        delay();
    }
 }

3 个答案:

答案 0 :(得分:2)

我怀疑当您使用"/n"而不是换行符"\n"终止字符串时,printf输出会保持缓冲状态。

答案 1 :(得分:2)

为什么不简化它

#define min(a, b) (a < b ? a : b)

while (1) {
    temp = doADCConversion();
    printf("Voltage = %d\n", temp);
    temp = min(5, temp / 50);
    printf("Turn on LED %d\n", temp + 1);    // newline is `\n`
    setLED(temp);
    delay();
}

注意:转义序列使用反斜杠(\)。

答案 2 :(得分:0)

将您的for部分放在主循环或函数中。 否则它会被优化,因为它从未被使用过,尽管它是有效的C.

使用识别也很好,所以更容易看到。