利用定时器中断的交通灯
时间: 2023-07-06 12:08:29 浏览: 80
交通灯是城市交通管理中必不可少的一部分,利用定时器中断可以很好地控制交通灯的变化。以下是一个简单的交通灯程序:
```c
#include <reg52.h> // 用于51单片机
sbit red = P1^0; // 红灯
sbit yellow = P1^1; // 黄灯
sbit green = P1^2; // 绿灯
void timer0() interrupt 1 {
static int count = 0;
if (++count == 20) { // 20个中断周期(约1秒)后变换状态
count = 0;
red = !red;
yellow = !yellow;
green = !green;
}
}
int main() {
TMOD = 0x01; // 定时器0,模式1(16位定时器)
TH0 = 0xFC; // 初始值,1ms后计数器为0xFFFF,再过1ms即为0xFFFE,以此类推
TL0 = 0x66;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
while (1);
return 0;
}
```
这个程序中,定时器0被设置为16位定时器,每1ms产生一次中断。在中断服务程序中,使用静态变量`count`记录经过的中断周期数,当`count`累计到20(即1秒)时,交通灯的状态进行一次变换。具体地,红灯、黄灯、绿灯分别依次亮和灭,每种状态持续约333毫秒。程序通过`TR0 = 1`启动定时器0,然后进入一个死循环,保证程序一直运行。
阅读全文