C语言不用死循环实现控制LED 1Hz闪烁
时间: 2024-01-06 14:04:03 浏览: 69
可以使用定时器来控制LED的闪烁,无需使用死循环。假设LED连接在GPIO口的P0上,可以使用以下代码实现LED的1Hz闪烁。
```c
#include <reg52.h>
#define LED P0
void init_timer() {
TMOD |= 0x01; // 设置定时器0为模式1,每隔50ms产生一次中断
TH0 = 0x3C;
TL0 = 0xB0;
ET0 = 1; // 允许定时器0中断
EA = 1; // 打开总中断开关
TR0 = 1; // 启动定时器0
}
void timer0_isr() interrupt 1 {
static unsigned char count = 0;
count++;
if (count == 10) { // 每隔500ms改变LED状态
LED = ~LED;
count = 0;
}
}
void main() {
init_timer();
while(1);
}
```
在上述代码中,我们使用定时器0的模式1,每隔50ms产生一次中断。在定时器中断服务函数中,我们使用一个计数器来计算中断次数,当计数器达到10时(即500ms),改变LED的状态。这样LED就会每隔1秒闪烁一次。最后在main函数中启动定时器并进入死循环等待中断。
阅读全文