基于c51单片机的十字路口红绿灯c语言程序
时间: 2023-09-22 15:08:04 浏览: 300
以下是一个基于C51单片机的十字路口红绿灯C语言程序,它使用了定时器和外部中断来控制红绿灯的亮灭,模拟了十字路口的交通信号控制。
```
#include <reg52.h>
// 定义端口地址
#define PORT_LIGHT P0
#define PORT_BTN P3
// 定义端口位掩码
#define RED 0x01
#define YELLOW 0x02
#define GREEN 0x04
// 定义定时器初值和重载值
#define TIMER_INIT 65536-10000 // 10ms
#define TIMER_RELOAD 65536-10000 // 10ms
// 定义中断向量
#define INT_VECTOR_T0 1
// 定义延时函数
void delay(int time) {
int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 50; j++);
}
}
// 定义定时器中断处理函数
void timer0_isr(void) interrupt INT_VECTOR_T0 {
static unsigned char cnt = 0;
cnt++;
if (cnt == 50) { // 500ms
cnt = 0;
// 红绿灯状态切换
if (PORT_LIGHT == RED) {
PORT_LIGHT = GREEN;
} else if (PORT_LIGHT == GREEN) {
PORT_LIGHT = YELLOW;
} else if (PORT_LIGHT == YELLOW) {
PORT_LIGHT = RED;
}
}
TH0 = TIMER_INIT / 256;
TL0 = TIMER_INIT % 256;
}
// 定义外部中断处理函数
void int0_isr(void) interrupt 0 {
// 检测按钮是否按下
if (PORT_BTN == 0) {
// 切换红绿灯状态
if (PORT_LIGHT == RED) {
PORT_LIGHT = GREEN;
} else if (PORT_LIGHT == GREEN) {
PORT_LIGHT = YELLOW;
} else if (PORT_LIGHT == YELLOW) {
PORT_LIGHT = RED;
}
}
delay(20);
// 消除按键抖动
while (PORT_BTN == 0);
}
// 程序入口
void main() {
// 初始化定时器
TMOD = 0x01; // 定时器0,模式1
TH0 = TIMER_INIT / 256;
TL0 = TIMER_INIT % 256;
TR0 = 1; // 启动定时器
ET0 = 1; // 允许定时器中断
// 初始化外部中断
IT0 = 1; // 下降沿触发
EX0 = 1; // 允许外部中断
// 初始化端口
PORT_LIGHT = RED;
PORT_BTN = 0xff; // 上拉
// 无限循环
while (1);
}
```
上述程序使用了定时器和外部中断来控制红绿灯的亮灭,模拟了十字路口的交通信号控制。定时器中断处理函数timer0_isr每500ms切换一次红绿灯状态,外部中断处理函数int0_isr检测到按钮按下后切换红绿灯状态,并使用延时函数消除按键抖动。程序入口是main函数,初始化定时器、外部中断和端口后,进入无限循环等待中断事件的发生。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)