源码及Proteus布线图下载地址

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

文章目录

  • 1、设计要求
  • 2、设计具体体现
    • 1、系统概述
      • 1、交通灯设计
      • 2、绿灯(红灯)时长调节
      • 3、两路口倒计时及绿灯时长红灯时长的显示
      • 4、拓展(实现路口的单向及双向交通管制)
    • 2、软件设计
      • 1、主程序
      • 2、 延时程序
      • 3、数码管显示程序
  • 3、系统的调试及性能分析
  • 4、附录
    • 1、完整电路原理图
    • 2、源程序

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 long t=0;unsigned long x=0;unsigned long y=0;
sbit P1_2=P1^2;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_0=P1^0;
sbit P1_3=P1^3;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
timer0()interrupt 1 {a1=1; }
int0()interrupt 0 {if(p>=-200&&p<=300)    //绿灯调整3-9sp=p+100;else if(p==400){p=p-600;}a2=1;}
int1()interrupt 2 {if(q>=-100&&q<=400)    //红灯调整3-9sq=q+100;else if(q==500)q=q-600;a3=1;}
void main(){EA=1;               //开中断总开关EX0=1;                 //允许外部中断0中断IT0=1;              EX1=1;                 //启动中断IT1=1;PX1=1;PX0=1;p=0;q=0;while(1){   while(P2_5==1)          //(拓展)实现双向交通管制{P0=0x3f;P1=0xf6;for(i=10;i>0;i--){delay10ms();}P1_0=!P1_0;P1_3=!P1_3;for(i=10;i>0;i--){delay10ms();}}while(P2_6==1)        //(拓展)实现南北方向交通管制{P0=0x3f;P1=0x33;                         } while(P2_7==1)       //(拓展)实现东西方向交通管制{P0=0x3f;P1=0x1e;                          } a2=0;a3=0;P1=0x33;for(b=400+p;b>0;b--)    //东西路绿灯亮四秒{s=b/100+3;t=b/100+2;x=(200+q)/100+2;y=(400+p)/100+1;       delay10ms();       }if(a2==0&&a3==0&&P2_5==0&&P2_6==0&&P2_7==0){for(c=100;c>0;c=c-10)  //东西路绿灯闪一秒{                               s=2;t=1;P1_2=!P1_2;     //0.1秒闪一次for(i=10;i>0;i--){delay10ms();       }}if(a2==0&&a3==0&&P2_5==0&&P2_6==0&&P2_7==0)             //东西路黄灯亮一秒{       P1=0x35;for(d=100;d>0;d--){                                      s=1;t=0;delay10ms();} if(a2==0&&a3==0&&P2_5==0&&P2_6==0&&P2_7==0)          //  南北路绿灯亮两秒{P1=0x1e;for(e=200+q;e>0;e--){                                    s=e/100+2;t=e/100+3;delay10ms();}if(a2==0&&a3==0&&P2_5==0&&P2_6==0&&P2_7==0){for(f=100;f>0;f=f-10)   //南北路绿灯闪一秒{                                s=1;t=2;                                   P1_5=!P1_5;for(i=10;i>0;i--){delay10ms();       }}if(a2==0&&a3==0&&P2_5==0&&P2_6==0&&P2_7==0)              //南北路黄灯亮一秒{P1=0x2e;for(g=100;g>0;g--){                                   s=0;t=1;delay10ms();}}}}}}}
}void delay10ms()  //延时10ms函数{if(a4==0&&P2_5==0&&P2_6==0&&P2_7==0)           //显示南北路倒计时{P2=0xfd;display(s);a4=1;   }else if(a4==1&&P2_5==0&&P2_6==0&&P2_7==0)    //显示东西路倒计时{P2=0xfb;display(t)   ;a4=2;}else if(a4==2&&P2_5==0&&P2_6==0&&P2_7==0)      //显示东西路红灯时长{P2=0xf7;display(x);a4=3;}else if(a4==3&&P2_5==0&&P2_6==0&&P2_7==0)   //显示东西路绿灯时长{P2=0xef;display(y);a4=0;}TMOD=0x01;TH0=-10000/256;TL0=-10000%256;EA=1;ET0=1;TR0=1;     while(a1==0);a1=0;}
void display(int a) //显示函数{a=chashu[a];P0=a;}

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

  1. 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享

    设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...

  2. c语言 修改密码源码,基于51单片机串口密码修改设计-(源码+电路图)

    名称:多功能电子密码锁(使用STM32平台 使用 keiluvision软件,用C语言写代码) 系统由STM32单片机核心板电路.7位按键电路.串口电路.电源电路.液晶1602电路.继电器模块电路和L ...

  3. 基于51单片机的公交车安全智能检测系统、基于51单片机的金属探测仪控制设计、基于单片机的智能电子密码锁系统设计、基于51单片机酒精浓度检测仪设计【资料转发分享】

    630基于51单片机的公交车安全智能检测系统-设计资料 本资料是基于单片机的公交车安全监测系统 具有如下功能: 1.监测环境的温度,超标报警.可以设置上下限 2.监测是否有火灾以及有毒气体,超标报警, ...

  4. 基于51单片机的智能门禁控制系统(仿真+源码+全套资料)

    资料编号:119  功能讲解: 采用51单片机作为CPU控制,继电器驱动门锁的打开与关闭,采用按键模拟指纹开锁,以及内部开锁相关信号,当指纹正确门锁可以正常打开,指示灯亮绿灯,如果指纹错误,门锁无法打 ...

  5. 基于51单片机的智能窗帘项目,源码+原理图+pro仿真。

    基于51单片机的智能窗帘项目,源码+原理图+pro仿真. 介绍 :此作品有四种模式,通过四个独立按键调控,模式1:三个光感范围,使得电机驱动窗帘自动开,半开,关;模式2:15-25度的温度阈值,低于或 ...

  6. Eatting外卖基于瑞吉外卖代码全功能优化含源码

    Eatting外卖基于瑞吉外卖代码全功能优化含源码 文章目录 项目的最终部署 源码地址 github:[源码地址](https://github.com/yangxingyue0623/Eating_ ...

  7. Python基于OpenCV的交通路口红绿灯控制系统设计

    开发环境: PyCharm + Python3.7 + Sqlite + OpenCV 功能介绍:   基于python和opencv库实现一个交通路口红绿灯控制系统,主要可以自动和手动控制红绿灯,还 ...

  8. 51单片机模拟电梯控制(含完整代码)

    51单片机模拟电梯控制 前言 一.普中51-单核-A2开发板 二.系统功能 三 .预定义 四.电梯内按有报警按键,该功能由外部中断功能和蜂鸣器实现 五.延时函数-----电梯每上升,下降一层和开门关门 ...

  9. at89c52串口通信c语言程序,AT89C52DEMO 基于51单片机的(89C51/52)C语言源码例程 - 下载 - 搜珍网...

    例程与源码/12864带字库测试程序/12864 例程与源码/12864带字库测试程序/12864.hex 例程与源码/12864带字库测试程序/12864.lnp 例程与源码/12864带字库测试程 ...

最新文章

  1. 算法证明:女生遇到心动的男人一定要追!
  2. 字符串匹配的KMP算法——Python实现
  3. 关于重装系统后或打补丁后不能上网的问题的解决
  4. 十五、类与封装的概念
  5. Spring AOP方法分析
  6. python request 库传送formdata_Python Requests库 form-data 上传文件操作
  7. PHP+MySQL 网站 SQL 注入攻击测试用例
  8. iOS 四种延时的方法
  9. oracle聚合字符串,Oracle 聚合字符串
  10. vi打开GBK编码文件乱码问题
  11. ARKit玩起来 - AR预览唱片-史小川-专题视频课程
  12. GoDot引擎打包安卓
  13. love2d 乒乓球游戏
  14. VisualC++6.0如何打开之前的程序
  15. 新版Google工具栏(For Firefox)发布
  16. Matplotlib绘制春节休假表
  17. 怎么在服务器里修改分机的ip,Avaya1608IP话机设置步骤、分机号重设、电话机重置_Avaya1608IP电话机设置步骤、分机号重设、电话机重置_软件教程_了忧科技...
  18. when I want to have a rest
  19. 3、基于注解的IoC装配与依赖注入
  20. C语言红楼梦人物分析系统

热门文章

  1. 欧盟委员会开源计划办公室启动漏洞赏金
  2. 软银集团任命新董事 ARM与Sprint CEO正式进入董事会
  3. 区块链革命:我命由我不由天,是魔是仙, 我自己说了算
  4. 二手手机回收领域新趋势
  5. 【沃顿商学院学习笔记】管理学——09行业对腐败的控制 Corruption Control By Industries
  6. conda环境名称消失问题
  7. idea的java类图标C不见,取而代之是J标识,且写代码无提示。
  8. 搭建VNC远程桌面服务
  9. Java超级工具_Java 16个超级实用的工具类
  10. php写的一个超短线选股程序(选股效果还是不错的)