可以用while 写吗
时间: 2024-09-27 18:09:52 浏览: 14
当然可以使用`while`循环来控制LED灯的顺序点亮。以下是使用`while`循环的一个简单示例,同样基于定时器溢出:
```c
#include <reg52.h>
#define LED_COUNT 8
unsigned char led_index = 0; // 当前LED索引,初始化为第一个
void toggle_led() {
P0 |= (1 << led_index); // 点亮当前LED
}
void delay_ms(unsigned int milliseconds) {
unsigned char i;
for(i = 0; i < milliseconds * 10; i++);
}
int main(void) {
TR0 = 1; // 启动定时器0
TH0 = 0xFD; // 定时器初值,约每1ms溢出一次
ET0 = 1; // 开启外部中断
EA = 1; // 开启全局中断
while(1) { // 无限循环
toggle_led(); // 点亮LED
delay_ms(1); // 等待1毫秒
led_index = (led_index + 1) % LED_COUNT; // LED索引递增并取模,防止超出范围
}
return 0;
}
```
在这个例子中,`while`循环内首先通过`toggle_led()`点亮LED,然后调用`delay_ms()`稍作延时,接着更新`led_index`以便下一轮循环点亮下一个LED。
阅读全文