我试图通过光传感器打开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();
}
}
答案 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.
使用识别也很好,所以更容易看到。