基于MCS-51单片机路口红绿灯控制设计(含源码及Proteus布线图)

本文介绍了一种基于51单片机的十字路口红绿灯控制系统的设计与实现。系统支持绿灯时长和红灯时长的调节,并能动态显示剩余时间。此外,还实现了对路口的双向和单向交通管制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码及Proteus布线图下载地址

(不想花积分的可以在附录里找到完整的Proteus布线图以及源程序)

1、设计要求

设计十字路口红绿灯控制电路,假设东西路和南北路路口,要求:

  1. 控制规律:
    绿灯->绿灯闪烁(最后1秒,闪烁周期0.2s)->黄灯(1s)->红灯->绿灯……
    缺省值:绿灯亮GT=5秒(亮4s+闪1s),黄灯亮1秒,红灯亮RT=4秒
  2. 东西路方向亮绿灯和黄灯时,南北路方向亮红灯,反之亦然。
    扩展:
    可修改绿灯时间GT和红灯RT时间,时间修改范围3~9秒。
    在两路口用1位数码管动态显示绿灯和红灯亮时的剩余时间。

2、设计具体体现

1、系统概述

通过P1口控制六个交通灯的状态,定时器T0实现精确延时,外部中断0、外部中断1实现对红灯和绿灯的时间调整,P0口、P2口接四位数码管实现南北路倒计时、东西路倒计时、绿灯时长,红灯时长的动态显示。

1、交通灯设计

交通灯实际上有六个状态,即东西绿灯亮南北红灯亮、东西绿灯闪南北红灯亮、东西黄灯亮南北红灯亮、东西红灯亮南北绿灯亮、东西红灯亮南北绿灯闪、东西红灯亮南北黄灯亮。通过不断改变P1口的状态来控制六个状态的循环。
在这里插入图片描述

2、绿灯(红灯)时长调节

绿灯时长调节要求范围是3到9秒,思路是利用外部中断0,每来回拨动一次开关,产生一次下降沿,使绿灯时长延长一秒。当绿灯时长为九秒时,再次拨动开关,绿灯时间变为最小值3秒,然后再延长。
红灯时长的调节同理,只是改为利用外部中断1.
在这里插入图片描述

3、两路口倒计时及绿灯时长红灯时长的显示

P0口输出段码,P2口实现片选,完成动态显示。
在这里插入图片描述

4、拓展(实现路口的单向及双向交通管制)

通过P2-5、P2-6、P2-7的状态改变实现对路口的交通管制。P2-5口为低电平时,路口交通正常运行,P2-5口为高电平时,两方向交通灯红灯闪烁,禁止通行。
P2-6南北交通管制,P2-7东西交通管制,同理。

在这里插入图片描述

2、软件设计

主要包括主程序,延时程序,数码管动态显示程序

1、主程序

主程序主要功能是实现交通灯的六个状态的循环,等待绿灯(红灯)时间调节中断,等待路口交通管制中断。

2、 延时程序

延时程序主要功能是通过设置定时器T0延时10ms。调用显示函数。每跑一次,改变P2口的片选,实现四位数码管动态显示。

3、数码管显示程序

数码管显示程序主要是通过查表给P1赋值,点亮数码管。

3、系统的调试及性能分析

通过Proteus和Keil的仿真,该程序可以正常运行,实现设计要求和拓展功能。

4、附录

1、完整电路原理图

在这里插入图片描述

2、源程序

/*
 *程序:十字路口红绿灯控制
 *功能:按要求实现十字路口的红绿灯转换,可以调节红灯时长和绿灯时长,动态显示红灯(绿灯)剩余时间,显示红灯绿灯的时长
 *,实现对路口的双向(单向)交通管制
 *调节说明:每来回拨动SW1一次,绿灯延长一秒,当绿灯时间为九秒时,再拨动一次,绿灯时间变为三秒(红灯调节方式相同,SW2)
            SW3初始状态为接地,当把SW2拨向+5V时,东西向和南北向红灯闪烁,实现双向交通管制,当把SW2拨回初始状态,系统正常运行
            (SW4、SW5调节方式相同)
*/
#include<stdio.h>
#include<reg51.h>
void delay10ms();			  //延时50ms
void display(int a) ;	  //显示函数
unsigned int data a1=0;		  //定时器0中断跳出标志
unsigned int data a2=0;		  //外部中断0跳出标志
unsigned int data a3=0;		  // 外部中断1跳出标志
unsigned int data a4=0;
unsigned int data i=0;
unsigned char chashu[11]={
   
   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}   ;  //数码管段码
signed long p=0;			  //绿灯调整标志
signed long q=0;			  //红灯调整标志
unsigned long b=80;			  //各状态时长初值				 
unsigned long c=20;
unsigned long d=20;
unsigned long e=40;
unsigned long f=20;
unsigned long g=20;
unsigned long s=0;
unsigned 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我阿亮就好了-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值