51单片机模拟红绿灯设计项目(程序+仿真+原理图+报告)

51单片机模拟红绿灯设计项目介绍

一、运行环境

  • 仿真软件:Proteus 8.17 SP2
  • 程序软件:KEIL C51 V961

1.设计内容:

设计一十字路口的交通灯控制器,其主要功能如下:

(1)系统运行时,NS方向绿灯亮,倒计时25s;EW方向红灯亮,倒计时30s。当NS方向倒计时为0时,绿灯转为黄灯,并闪烁,启动5s倒计时。

当所有方向的倒计时都为0时,NS方向红灯亮,倒计时25s;EW方向绿灯亮,倒计时30s。 当EW方向倒计时为0时,绿灯转为黄灯,并闪烁,启动5s倒计时。

(2)设置2个按键。按键1为交通管制:按下按键时,红绿灯方向改变(NS-EW);按键2为紧急情况:按下按键时,所有方向红灯亮起。倒计时不受影响。

系统结构框图

本设计采用STC89C51单片机以及单片机、晶振电路、复位电路组成的单片机最小系统和74HC245 驱动电路以及按键的设置和数码管和 LED 显示(参考文献[1] 《单片机原理与应用及C51程序设计(第4版)》),谢维成,杨加国.北京:清华大学出版社,完成一个基于单片机的交通灯模型的设计。本交通灯系统,单片机作为主控可以控制交通信号灯的状态变化,可以完成基本的指挥交通的功能。另外,接入LED数码管就可以显示倒计时以提醒行使者注意通行时间,更具人性化(本设计在基本功能的基础上,设置2个按键。按键1为交通管制:按下按键时,红绿灯方向改变(南北-东西);按键2为紧急情况:按下按键时,所有方向红灯亮起。倒计时不受影响。该设计能在相同的时间里提高通车的数量、效率,并能在上下班高峰期根据道路上的车流量及时调整该路口的下一个时段的通车时间,及时缓解上下班高峰期时交通拥挤堵塞现象。而且该交通控制系统具有紧急处理模块,当有突发情况或者紧急情况发生时,交通路口指示灯均亮红灯,此时普通禁止通行,当紧急车辆通过后,交通灯恢复到正常通行状态。系统的总体框图如如图(图2.3)所示:该交通控制系统具有紧急处理模块,置2个按键。按键1为交通管制:按下按键时,红绿灯方向改变(NS-EW);按键2为紧急情况:按下按键时,所有方向红灯亮起。倒计时不受影响,方便正常通行状态。

系统的总体框图如如图(图2.3)所示

仿真图
仿真使用Proteus,所有Proteus均可打开,资料内有详细操作教程。

程序设计
代码结构清晰,注释详细。工程使用keil5创建,支持所有keil版本使用。

程序流程图
使用visio制作的程序流程图,设计报告中双击可修改。

设计报告
设计报告内容包含软硬件设计、器件选型、单元电路分析等部分,覆盖常见设计报告需求。

系统测试

接下来进行系统整体测试,首先我们要对硬件功能进行测试,首先在 Keil5 中将硬件底 层代码烧录进AT89C51开发板,结果如图所示,成功烧录。

烧录系统测试如图5.1所示

图5.1系统烧录程序

其次就是交通灯的led灯和数码管的显示情况,将底层代码烧录到单片机后,我们可以看到 数码管和led灯的运行情况,

烧录系统测试,成功显示,如图5.2所示

图5.2 系统烧录测试成功

接着就是按键模块的测试,本次按下按键S2(紧急制动),可以实现所有路口都显示红灯,禁止通行。如图5.3所示;

按键S2紧急制动的测试

图5.3 系统紧急制动

还有按键S1(红绿灯状态转换)的测试,当按下按键S1时,此时南北和东西路口的红绿灯状态相互转换。如图5.4,5.5所示。

按键S1(红绿灯状态转换)的测试,按键S1未按下时系统状态

图5.4显示的是交通灯正常的运行状态,南北(NS)方向绿灯亮,倒计时25s;东西(EW)方向红灯亮,倒计时30s。当南北(NS)方向倒计时为0时,绿灯转为黄灯,并闪烁,启动5s倒计时。如图5.4所示

图5.4  交通灯正常的运行状态

按键S1(红绿灯状态转换)的测试,按键S1按下时的系统状态

按下按键S1时,十字路口的红绿灯方向改变(NS-EW),东西南北的红绿灯状态改变,如图5.5所示

图5.5  红绿灯方向改变(NS-EW)

资料概览

点赞收藏私信发送相关资料,祝大家都共同进步!

观察十字路口红绿灯工作流程,设计交通灯。 1、初始时:南北向、东西向直行左转均为红灯 2、南北向直行: ①南北向直行绿灯亮,延时若干秒 ②启动南北向左转数码管显示:倒计时6秒;同时南北向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向直行绿灯灭,南北向直行黄灯亮,延时3秒 ③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 3、南北向左转: ①南北向左转绿灯亮,延时若干秒 ②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后南北向左转绿灯灭,南北向左转黄灯亮,延时3秒 ③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 4、东西向直行: ①东西向直行绿灯亮,延时若干秒 ②启动东西向左转数码管显示:倒计时6秒;同时东西向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向直行绿灯灭,东西向直行黄灯亮,延时3秒 ③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 5、东西向左转: ①东西向左转绿灯亮,延时若干秒 ②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,然后东西向左转绿灯灭,东西向左转黄灯亮,延时3秒 ③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮
C51单片机实现红绿灯功能的设计方案及代码可以参考以下内容。 ### 设计方案 该红绿灯系统的通行规则为:每条车道左侧灯控制左转和直行车辆,绿灯时车辆可直行和左转,黄灯为过渡状态;右侧灯控制右转车辆,绿灯通过,红灯停止,黄灯过渡;人行道有红灯和绿灯,红灯禁行,绿灯通行,且车道控制左直行的灯与右行的灯不能同时为绿灯或同时为黄灯。系统共有八种状态,包括四种正常状态和四种黄灯过渡状态。数码管显示时间优先等级为绿灯时间、黄灯时间、红灯时间,并同时控制两侧红绿灯时间 [^1]。 ### 代码示例 ```c #include <reg51.h> #define uint unsigned int; #define uchar unsigned char; // 东西向红绿灯 sbit RED_A = P0^0; sbit YELLOW_A = P0^1; sbit GREEN_A = P0^2; // 南北向红绿灯 sbit RED_B = P0^3; sbit YELLOW_B = P0^4; sbit GREEN_B = P0^5; uint count = 0, operation = 1, time, i; // 延时函数 void delay(time) { while(time--) { for(i = 0; i <= 12000; i++); } } // 状态切换函数 void method() { switch(operation) { case 1: // 东西绿灯亮,南北红灯亮 RED_A = 1; YELLOW_A = 1; GREEN_A = 0; RED_B = 0; YELLOW_B = 1; GREEN_B = 1; delay(300); operation = 2; break; case 2: // 开始亮黄灯3s GREEN_A = 1; YELLOW_A = !YELLOW_A; // 闪烁 delay(40); if(++count != 3) return; count = 0; operation = 3; break; case 3: // 东西红 , 南北绿 RED_A = 0; YELLOW_A = 1; GREEN_A = 1; RED_B = 1; YELLOW_B = 1; GREEN_B = 0; delay(300); operation = 4; break; case 4: GREEN_B = 1; YELLOW_B = !YELLOW_B; delay(40); if(++count != 3) return; count = 0; operation = 1; break; } } // 主函数 int main() { while(1) method(); } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值