while (1) { // OLED_ShowSignedNum(1,7,Speed/20,3); if(DHT11_Read_Data(&temperature,&temp,&humidity,&humi)==0) { OLED_ShowNum(2,6,temperature,2); OLED_ShowNum(2,9,temp,1); OLED_ShowNum(3,6,humidity,2); OLED_ShowNum(3,9,humi,1); Delay_ms(20); } for (Angle = 115; Angle >= 25; Angle--) { Duoji_SetAngle(Angle); Delay_ms(20); Speed = 60; Motor_SetSpeed(Speed); if (KeyNum == 3) break; }if (KeyNum == 3) break; for (Angle = 25; Angle <= 175; Angle++) { Duoji_SetAngle(Angle); Delay_ms(20); Motor_SetSpeed(Speed); if (KeyNum == 3) break; }if (KeyNum == 3) break; for (Angle = 175; Angle >= 115; Angle--) { Duoji_SetAngle(Angle); Delay_ms(20); Motor_SetSpeed(Speed); if (KeyNum == 3) break; } } if (KeyNum == 3) break ; } Angle = 115; Duoji_SetAngle(Angle); OLED_Clear(); OLED_ShowString(2, 1, "exit"); Delay_s(1); OLED_Clear(); Speed = 0; break; }这个while循环里面嵌套3个for循环但是当KeyNum等于3的时候还是退出不了循环,是怎么回事
时间: 2024-03-19 13:42:49 浏览: 74
STM32F1C8T6_DHT11_OLED显示_12864oled_DHT11_STM32f103c8t6DHT11_stm3
5星 · 资源好评率100%
在给出回答之前,需要了解一下 `KeyNum` 是如何被更新的,因为这个变量的值是决定退出循环的关键。
在这段代码中,我们可以看到 `KeyNum` 没有在循环体内被更新,这意味着循环内部不能改变 `KeyNum` 的值,只能通过外部的其他代码来修改它。
如果你在循环内部修改了 `KeyNum` 的值,那么循环内部的 `if (KeyNum == 3) break;` 条件判断就会失效,因为它只会检查循环开始时的 `KeyNum` 值。
如果你想要在循环内部修改 `KeyNum` 的值,你可以使用一个标志变量来代替 `KeyNum`,并在循环内部检查这个标志变量的值来控制循环的退出。
除了上述可能的原因外,还有可能是其他问题导致无法退出循环,比如某些硬件问题或者其他的逻辑错误。在这种情况下,你需要仔细检查代码中的每一个细节,找到问题所在并进行修复。
阅读全文