C51单片机红绿灯仿真代码
时间: 2024-10-29 13:17:27 浏览: 59
C51单片机是一种常用的8位微控制器,用于控制红绿灯这种简单的模拟实验可以使用定时器配合中断来实现。这里提供一个基本的示例代码,假设我们有三个LED分别代表红、黄、绿灯:
```c
#include <reg52.h>
sbit red = P1^0; // 红灯接P1.0口
sbit yellow = P1^1; // 黄灯接P1.1口
sbit green = P1^2; // 绿灯接P1.2口
void delay(unsigned int time) {
for (unsigned int i = time; i > 0; --i);
}
int main(void) {
TMOD = 0x01; // 设置TMOD为模式1定时器
TH1 = 0xFD; // 设置定时初值,让定时器大约每隔1秒计数一次
TL1 = 0xFD;
ET1 = 1; // 开启外部中断
EA = 1; // 开启全局中断
TR1 = 1; // 启动定时器1
while(1) { // 无限循环
if(TF1 == 0) { // 判断定时溢出标志TF1是否为0
TF1 = 0; // 清除溢出标志
if(red == 1) { // 如果当前为红色闪烁
red = 0; // 关闭红灯
yellow = 1; // 开启黄灯
delay(500); // 黄灯闪500ms
yellow = 0; // 关闭黄灯
green = 1; // 开启绿灯
delay(500); // 绿灯闪500ms
green = 0; // 关闭绿灯
red = 1; // 开启红灯
}
else { // 非红灯状态,轮流切换
yellow = 0;
green = 0;
red ^= 1; // 红绿灯交替
}
}
}
return 0;
}
```
阅读全文