精华内容
下载资源
问答
  • 分析交通信号灯的技术要求和LED交通灯的实现方法,深入研究LED光源几种连接方式的优缺点,确定以串并混联方式作为LED信号灯的连接方式,完成LED信号灯灯头的设计,采用RS 485总线实现中心控制器与四个方向单元控制器...
  • 摘要 利用计数器和必要的门电路设计简易交通...交通信号灯的出现,使交通得以有效地管制,对于疏导交通、减少交通事故有明显的效果。为确保车辆安全、迅速的通行,在交叉路口的每条道上设置一组交通灯,交通灯由红、绿2

    摘要

    利用计数器和必要的门电路设计简易交通灯控制电路,红绿灯交替点亮90秒。使用74LS90为计数器件,利用T触发器的翻转功能,(本实验将不采用译码器而采用T触发器进行实验),查阅器件参数手册,设计功能电路实现红绿灯交替转换点亮90S。

    关键词:红绿灯控制 定时器 T触发器
    引言
    城市十字交叉路口为确保车辆、行人安全有序地通过,都设有指挥信号灯。交通信号灯的出现,使交通得以有效地管制,对于疏导交通、减少交通事故有明显的效果。为确保车辆安全、迅速的通行,在交叉路口的每条道上设置一组交通灯,交通灯由红、绿2色组成。红灯亮表示此通道禁止车辆通过路口;绿灯亮表示该通道车辆可以通行。设计一交通灯控制电路以控制两组交通灯的状态转换,指挥车辆安全通行。

    第一章 设计任务及方案
    1、任务说明
    利用计数器和必要的门电路设计简易交通灯控制电路,要求红绿灯交替点亮90秒。(要求使用授课中未提及的计数器件,查阅器件参数手册,设计功能电路)
    2、任务方案
    根据设计要求,道路绿、红灯亮的时间分别为90s、90s。设计的系统可以由计数器、脉冲信号发生器、信号灯、控制部分等组成。脉冲信号发生器产生定时器和控制器所需要的标准信号,输出两路信号灯的控制信号号。在这里插入图片描述
    第三章 设计原理及电路
    1 、总体设计
    根据设计要求主道路绿、红灯亮的时间分别为90秒、90秒。根据要求中交通指示灯定时亮灭,时间指示采用累加计时显示,则需要由脉冲发生器,计数器,状态转换器等来满足,状态控制器主要用于记录十字路口交通灯的工作状态,通过T触发器分别点亮相应状态的信号灯。脉冲发生器产生整个定时系统的时基脉冲,通过加法计数器对秒脉冲计数,达到控制每一种工作状态的持续时间。
    2 、单元电路的设计和元器件的选择在这里插入图片描述
    R01,R02为清零端,两者同时为高电平时实现清零功能。
    R91,R92为置数端,两者同时为高电平时实现置数功能。
    QA、QB、QC、QD、为数据输出端 。
    CP1、CP2为脉冲输入端,其中:
    脉冲从 CP1进去 ,输出从QA输出时为二进制记数
    脉冲从 CP2进去,输出从QD、QC、QB输出时为五进制记数
    脉冲从 CP1进去,输出从QA接CP2,输出从 QD、QC、QB、
    QA输出时为十进制记数。具体逻辑功能如下图2;在这里插入图片描述
    在这里插入图片描述
    由上图可知T触发器具有翻转功能,故每当计数90S后可用其改变输出端状态从而实现控制。具体实现如下图在这里插入图片描述
    在这里插入图片描述
    第五章 设计总结
    在城镇街道的十字叉路口,为了保证交通秩序和行人安全,会在每条路上各有一组绿、红交通灯,指挥各种车辆和行人的安全有序通行,实现十字路口交通管理的自动化。
    得知设计的题目是十字路口交通管理系统后,我们先是去图书馆查阅了很多相关的资料,对其构造有了基本的了解,在大脑中形成我们自己的大体思路,并上网搜了很多关于这方面的论文实例,让自己头脑中的思路更明晰,想法更完整,之后便开始在Multisim仿真软件中开始设计我们的电路图,并与查询到的电路图进行运行比较,查出需要改进的地方,我们自己的电路图终于在曲折中有了胜利里的曙光,在同学的帮助和指导下,终于大功告成,完成了电路图的设计仿真最关键环节。在制作过程中我们遇到了许多的问题,但是因为得到了同学热心的帮助,总算是按时完成任务,基本达到老师预期的要求和这次课程设计实习的目的意义。我们俩都收获很大。

    参考文献
    [1]童诗白、华成英主编。模拟电子技术基础。第四版。北京:高等教育出版社,2006。
    [2]阎石主编。数字电子技术基础。第五版。 北京:高等教育出版社,2006。
    [3]武汉理工大学。十字路口交通管理控制器.2008。
    [4]哈尔滨工业大学。十字路口交通管理控制器的设计-数字电路大作业。2006
    [5] 74系列中文资料。在这里插入图片描述

    展开全文
  • 因此,作为交通监管系统的重要组成部分,交通信号灯在协调人、车、路的关系时发挥着巨大的作用。EDA(Electronic Design Automaon,电子设计自动化)是依靠功能强大的计算机,对以硬件描述语言HDL(Hardware Descripon ...
  • 交通信号灯是城市交通有序、安全、快速运行的重要保障,而保障交通信号灯正常工作就成了保障交通有序、安全、快速运行的关键。为此,采用MCS-51系列单片机AT89C51为中心器件来设计交通灯控制电路,配以七段共阴极...
  • 可以比较合理高效的完成交通灯设计。软件上基于C语言进行开发,整体的设计思路选择模块化的设计思路。把时间控制、数码管控制和案件检测等几个功能分别实现,再统一整合到一个工程中去。可以较为高效和提高程序的...
  • 交通灯控制逻辑电路设计 这是一个数电实验,交通灯,如果使用FPGA...为了确保十字路口的车辆顺利、畅通地通过,往往都采用自动控制的交通信号灯来进行指挥。其中红灯(R)亮表示该条道路禁止通行;黄灯(Y)亮表示停

    交通灯控制逻辑电路设计

    这是一个数电实验,交通灯,如果使用FPGA或者单片机来完成的话,会简单很多,这里采用的是使用常规的计数器,触发器,门电路等基本器件搭建,扩展部分可以完成总通行时间在100s内任意设置,红、黄、绿灯亮的时间长短之和在100s内任意设置,其实想要超过100s只需要扩展相应的计数器,以及门电路即可,限制功能的往往是资源;

    一、选题背景

    1.1、应用背景

    为了确保十字路口的车辆顺利、畅通地通过,往往都采用自动控制的交通信号灯来进行指挥。其中红灯(R)亮表示该条道路禁止通行;黄灯(Y)亮表示停车;绿灯(G)亮表示允许通行。

    1.2、设计任务和要求

    1.2.1、 要求东西方向的红、黄、绿灯和南北方向的红、黄、绿灯按照上面的工作时序进行工作,黄灯亮时应为闪烁状态;
    (1)南北和东西车辆交替进行,各通行时间24秒
    (2)每次绿灯变红灯时,黄灯先闪烁4秒,才可以变换运行方向 。
    (3)十字路口要有数字显示作为时间提示,以倒计时按照时序要求进行显示;具体为:当某方向绿灯亮时,置显示器为某值,然后以每秒减1计数方式工作,直至减到数为“0”,十字路口红、绿等交换,一次工作循环结束,而进入下一步某方向的工作循环。
    (4)可以手动调整和自动控制,夜间为黄灯闪耀状态。
    1.2.2、 在完成上述任务后,可以对电路进行电路改进或扩展。(选作:通行时间和黄灯闪亮时间可以在0-99秒内任意设定)。

    二、方案论证(设计理念)

    交通灯控制系统原理框图
    交通灯控制系统的原理框图如上图所示。主要由秒脉冲发生器、计数器模块、译码显示模块、状态转换模块、译码模块等部分组成。秒脉冲发生器是该系统中计数器模块、状态转换的标准时钟信号源,计数器模块主要为状态转换模块提供两个转换信号,译码显示模块将计数器的计数状态译码并通过数码管进行显示,状态转换模块是系统的主要部分,由它控制红绿灯四个状态之间的转换,译码模块将状态转换模块所处状态进行译码,并驱动红绿灯进行状态显示;
    TL:表示东西方向或南北方向绿灯亮的时间间隔为20秒,定时时间到,TL=1,否则,TL=0。
    TR:表示东西方向或南北方向红灯亮的时间间隔为24秒。定时时间到,TR=1,否则,TR=0。
    两方向车道的交通灯的运行状态共有4种,如下图所示:
    交通灯时序工作流程图
    交通灯以上4种工作状态的转换是由状态转换模块进行控制的。设四种状态编码为00、01、11、10,并分别用S0、S1、S2、S3表示,则状态转换模块工作状态及其功能如下表所示:

    状态转换模块状态 信号灯状态 车道运行状态
    S0(00) 南北绿灯亮,东西红灯亮 南北车道通行,东西车道禁止通行
    S1(01) 南北黄灯亮,东西红灯亮 南北车道停车,东西车道禁止通行
    S2(11) 南北红灯亮,东西绿灯亮 南北车道禁止通行,东西车道通行
    S3(10) 南北红灯亮,东西黄灯亮 南北车道禁止通行,东西车道停车

    译码模块将状态转换模块当前状态进行译码,驱动相应车道的红、黄、绿灯;为简便起见,把灯的代号和灯的驱动信号合二为一,并作如下规定:
    AG=1:南北绿灯亮;
    AY=1:南北黄灯亮;
    AR=1:南北红灯亮;
    BG=1:东西绿灯亮;
    BY=1:东西黄灯亮;
    BR=1:东西红灯亮;
    由此得到交通灯状态转换模块的ASM图,如图下所示。设状态转换模块的初始状态为S0,当S0的持续时间小于20秒时,TL=0,其状态保持不变。只有当S0的持续时间等于20秒时,TL=1,跳转到S1,此时当S1持续时间小于4秒时,TR=0,其状态保持不变,只有当持续时间等于4秒,TR=1时,状态跳转到S2,持续20秒之后满足条件又转换到S3;持续4秒后跳转到S0;
    状态转换模块的ASM图

    三、过程论述

    为了方便后面叙述,先把总体基本电路图放出来;
    交通灯基本电路总体布局

    3.1秒脉冲发生器

    秒脉冲发生器由555定时器构成的多谐振荡器产生,振荡频率为f=1.43(R1+2R2)C=1.43106(1000+21000)470)=1.014HZ f=\frac{1.43}{(R_1+2*R_2)C} =\frac{1.43*10^6}{(1000+2*1000)*470)} =1.014HZ
    秒脉冲发生器

    3.2 计数器模块及译码显示模块

    因这译码显示模块依赖计数器模块较大,故将两个模块合并在一起叙述,模块如下图计数器模块及译码显示模块所示:
    计数器模块及译码显示模块

    3.2.1计数器的构成

    由两片74LS192构成24进制异步计数器,74LS192为异步置数计数器,要求采用倒计时计数,所以预置数设置为24,用低位74LS192芯片的借位端BO驱动高位 74LS192的减计数时钟端DOWN,完成芯片之间的级联。当两片74LS192芯片的借位端BO都有效时,对两片74LS192芯片进行置数,即LOAD=(BO0BO1)=((BO0)(BO1)) LOAD'=(BO_0*BO_1)'=((BO_0')'*(BO_1')')',减计数端DOWN接秒脉冲模块输出信号,加计数端UP接高电平,置零端CLR置零;

    3.2.1控制信号TL、TR的引出

    引出TL和TR信号,按照题意应该在计数器倒计时到4(从24开始的倒计时,故此时为20秒)时引出TL信号,计数器倒计时到0(24秒)时引出TR信号,但是由图3总电路图知,红、黄、绿信号灯模块与计数器模块之间有两级D触发器模块,故红、黄、绿信号灯模块比计数器模块输出信号延后两个时钟周期,为了让计数器计数到4(20秒)或者0(24秒)时,相应的红、黄、绿信号灯实现状态转换,就需要把产生TL信号和TR信号的时间提前两个时钟周期,故图中在计数器计数到6(18秒)时引出TL信号,计数到2(22秒)时引出TR信号;

    3.2.3 D触发器消除尖峰信号(竞争冒险)

    此处加一级D触发器是为了消除前面组合逻辑电路因竞争冒险产生的尖峰信号对后面状态转换所引起的干扰;例如由于产生TL信号的与非门之前电路的差异,时间延迟也不同;Q0经过一级反相器和一级与门,而Q1经过一级与门,Q2没有经过门电路;当计数器低位74LS192芯片输出信号由1000变为0111时,Q2与Q1必然先变为高电平,而此时Q0还处于低电平,出现0110使TL产生尖峰脉冲,而这个脉冲是错误的,因为此时计数器计数状态处于8到7之间,并没有计数到6,所以我们要避免这种类似的错误;故加一级触发器去消除这个尖峰,由于边沿触发器只有在时钟边沿时才有效,即使前面组合电路产生尖峰信号,这个尖峰信号由于组合电路存在时间延迟,必然晚于时钟边沿到达,早于下一个时钟边沿到达(因为此电路时钟周期为1秒,而一级门电路的延迟时间在纳秒到微秒级别),此时触发器输出不受输入信号的影响,达到消除尖峰信号的目的;

    3.2.4译码显示模块

    译码显示模块功能是将计数器的计数状态进行显示,由两片74LS48显示译码器,两个共阴极七段数码管,14个限流电阻组成;译码器输入端与计数器输出端对应连接即可,本设计不使用译码器的控制端,故均接高电平;

    3.3状态转换模块

    状态转换模块是交通管理的核心,它能够按照交通管理规则控制信号灯工作状态的转换。从ASM图可以列出状态转换模块的状态转换表,如下表所示。选用两个D触发器作为时序寄存器产生4种状态,状态转换模块状态转换的条件为TL和TR,当状态转换模块处于Q1nQ0n= 00状态时,如果TL= 0,则状态转换模块保持在00状态;如果TL=1,则状态转换模块的状态转换到Q1n+1Q0n+1= 01状态。这两种情况与条件TR无关,所以用无关项"X"表示。其余情况依次类推。

    现态 现态 状态转换条件 状态转换条件 次态 次态
    Q1n Q0n TL TR Q1n+1 Q0n+1
    0 0 0 X 0 0
    0 0 1 X 0 1
    0 1 X 0 0 1
    0 1 X 1 1 1
    1 1 0 X 1 1
    1 1 1 X 1 0
    1 0 X 0 1 0
    1 0 X 1 0 0

    根据上表可以推出状态方程,其方法是:将Q1n+1、Q0n+1为1的项所对应的输人和状态转换条件变量相与,其中"1"用原变量表示,"0"用反变量表示,然后将各与项相或,即可得到下面的方程:
    在这里插入图片描述
    在这里插入图片描述
    根据以上方程,选用数据选择器74LS153 来实现每个D触发器的输入函数,将触发器的现态值加到74LS153 的数据选择输入端作为控制信号。即可实现状态转换模块的功能。状态转换模块原理图如下图所示。由一片双四选一数据选择器74LS153和两个D触发器74LS74组成状态转换模块。触发器记录4种状态,数据选择器与触发器配合实现4种状态的相互交换。电路逻辑图如下:
    在这里插入图片描述
    其原理为:两个D触发器的置零以及置一端无效,故CLR和IPR均接高电平。时钟信号端CLK接秒脉冲发生器的输出端,数据选择器的输出端分别接D触发器的输入端,Y1接输出为信号的触发器的输入端,Y2接输出为的触发器的输入端。因为在这里插入图片描述
    在这里插入图片描述
    所以数据选择器的地址端B接Q1n,地址端A接Q0n。输出为Y1的D触发器的数据端C0接地,C1接TR,C2接TR反,C3接高电平VCC。输出为Y2的D触发器的数据端C0接TL,C1接高电平VCC,C2接地,C3接TL反。数据选择器的使能端均有效,故1G,2G接低。如上图所示:74LS74两个D触发器作为时序寄存器产生4种状态。选用数据选择器74LS153来实现每个D触发器的输入函数,将触发器的的现态值加到74LS153的数据选择端作为控制信号,即可实现状态转换模块的功能。

    3.4译码模块

    3.4.1状态译码

    译码器的主要任务是将控制器的输出Q1、Q0 的4种工作状态,翻译成南北、东西车道上红、黄、绿三种信号灯的工作状态。状态转换模块的状态编码与信号灯控制信号之间的关系如下表所示。

    现态 现态 南北绿灯 南北黄灯 南北红灯 东西绿灯 东西黄灯 东西红灯
    Q1n Q0n AG AY AR BG BY BR
    0 0 1 0 0 0 0 1
    0 1 0 1 0 0 0 1
    1 1 0 0 1 1 0 0
    1 0 0 0 1 0 1 0

    根据上表可以得到各路信号灯的控制信号表达式如下:
    南北方向车道绿灯:
    在这里插入图片描述
    南北方向车道黄灯:
    在这里插入图片描述
    南北方向车道红灯:
    在这里插入图片描述
    东西方向车道绿灯:
    在这里插入图片描述
    南北方向车道黄灯:
    在这里插入图片描述
    南北方向车道红灯:
    在这里插入图片描述
    将(Q1n反)和(Q0n反)通过与门连接在南北方向的绿灯上,Q1n和(Q0n反)通过与门连接在南北方向的黄灯上,Q0n直接连接在南北方向的红灯上,Q1n和Q0n通过与门连接在东西方向的绿灯上,(Q1n反)和(Q0n反)通过与门连接在东西方向的黄灯上,(Q0n反)直接连接在东西方向的红灯上;即可完成对状态的译码;译码模块如下图所示。
    译码模块

    3.4.2 黄灯闪烁

    自动控制黄灯闪烁:单刀双掷开关S1向上闭合连接时钟信号时,通过时钟信号的高低电平和
    在这里插入图片描述
    相与得到南北方向黄灯的闪烁状态,通过时钟信号的高低电平和
    在这里插入图片描述
    相与得到东西方向黄灯的闪烁状态;
    黄灯不闪烁:只需要将S1向下闭合,S2断开即可;如下图所示:
    通过开关S1、S2控制黄灯闪烁

    3.5整个交通灯布局图

    交通灯布局图

    四、扩展功能

    要求:通行时间和黄灯闪亮时间可以在0-99秒内任意设定;

    4.1红灯亮的时间设计

    通行时间即绿灯时间和黄灯闪亮时间可以调节,说明红灯的时间可以调节,可以利用已知的绿灯以及黄灯的时间推出红灯亮的时间;红灯亮的时间等于绿灯亮的时间加上黄灯闪亮的时间;在计数器的置数端用开关控制输入,即可对红灯亮的时间长短进行调节,如果红灯亮的时间为60秒,则从左到右开关的状态应为关、开、开、关,关、关、关、关。如下图所示;
    计数器开关输入设置红灯亮的时间

    4.2黄灯闪亮时间以及绿灯亮的时间设计

    红灯亮的时间(黄灯亮的时间加绿灯亮的时间)已经由上图装置设定,要分别设置绿灯和黄灯亮的时间,只需要一个点把红灯亮的时间分成两段时间就行了,因为TR信号都是在计数器计数到2时产生的,所以控制绿灯以及黄灯亮的时间只需要控制TL信号即可,要想让TL能够在0到99之间变化,就必须通过八个非门对计数器输出的八个信号进行取反,通过单刀双掷开关对计数器八位输出的原变量和反变量进行选择,之后八个信号每两个通过一个与门,即需要四个与门,最后再将这四个与门用一个四输入的与非门连接,在通过反相器后,输出便是TL;如下图所示。例如绿灯亮50秒,黄灯闪亮10秒,由图11设置红灯亮60秒,计数器从60秒开始倒计时,那么当倒计时到10秒时,黄灯就应该开始闪亮,似乎TL就设置为10(50秒)时有效,但是由于后面两级触发器的延时,此处设置应为12(48秒);延迟两秒后,数码管显示10时,黄灯才能正常闪烁;假设此处单刀双掷开关向上掷为开,向下为关;那么设置TL在12时有效时,从上至下开关状态为关、关、关、开,关、关、开、关,便可以实现绿灯亮50秒,数码管显示10时,黄灯开始闪亮,直到数码管示数0;
    通过控制TL有效控制绿灯、黄灯时间

    4.3整个交通灯控制系统的布局

    在这里插入图片描述

    五、结果分析

    基本电路默认把通行时间设为24秒,南北方向车道方向绿灯亮,东西方向车道的红灯亮。数码管从预置的24秒,以每秒减1,减到数码管示数为4时,南北方向的绿灯转换为黄灯,其余灯都不变。数码管示数减到0后时南北方向的黄灯转换为红灯;东西方向的红灯转换为绿灯。如此循环下去。并且在数码管示数由8变为7的时候,TL反相器后的指示灯会闪亮一下,说明组合电路产生的尖峰脉冲确实存在,而第一级触发器后面TL的指示灯并不会闪亮,这也说明D触发器能够消除前面组合电路产生的尖峰脉冲对后面电路的影响;
    扩展电路将红灯亮的时间设置为74;上图从左到右开关状态依次设置为关、开、开、开,关、开、关、关完成74的设置,绿灯亮51秒,黄灯亮23秒,则TL有效信号为25,所以上图的开关从上至下依次设置为上、上、下、上,上、下、上、下;开始仿真后;数码管从预置的74秒,以每秒减1,减数码管示数为23时,南北方向的绿灯转换为黄灯,其余灯都不变。数码管示数减到0后时南北方向的黄灯转换为红灯;东西方向的红灯转换为绿灯。如此循环下去。

    六、参考文献

    阎石,王红.数字电子技术基础.5版.北京:清华大学出版社,2005.

    展开全文
  • 从网上找了一份资料,满足了基本的需要,但没有实现远程控制的功能,于是我将代码和电路图进行了修改,使其能进行远程通信 代码 #include <reg52.h> //头文件 #define uchar unsigned char #...

    从网上找了一份资料,满足了基本的需要,但没有实现远程控制的功能,于是我将代码和电路图进行了修改,使其能进行远程通信

    代码

    #include <reg52.h> //头文件
    #define uchar unsigned char
    #define uint unsigned int //宏定义
    sfr T2MOD = 0xC9;
    
    uchar data buf[4];			//秒显示的变量
    uchar data sec_dx = 20;		//东西数默认
    uchar data sec_nb = 30;		//南北默认值
    uchar data set_timedx = 20; //设置东西方向的时间
    uchar data set_timenb = 30; //设置南北方向的时间
    
    uchar data num_che_dx = 0; //设置变量用于记录东西通行车量的个数
    uchar data num_che_nb = 0; //设置变量用于记录南北通行车辆的个数
    
    uchar data xianshi_fx = 0; //显示方式
    int n;
    uchar data countt0, countt1; //定时器0中断次数
    //定义6组开关
    sbit k1 = P1 ^ 5;	//夜间模式
    sbit k2 = P1 ^ 4;	//禁止
    sbit k3 = P3 ^ 4;	//确认
    sbit k4 = P1 ^ 6;	//东西通行
    sbit k5 = P1 ^ 7;	//南北通行
    sbit hw_dx = P3 ^ 5; //使用此引脚接红外探头检测"东西"方向通过的车辆当检测到南北有车辆通行时,该引脚会呈现低电平
    sbit hw_nb = P3 ^ 6; //使用此引脚接红外探头检测"南北"方向通过的车辆当检测到南北有车辆通行时,该引脚会呈现低电平
    sbit k6 = P3 ^ 7;	//切换方向
    
    sbit Red_nb = P2 ^ 6;	//南北红灯标志
    sbit Yellow_nb = P2 ^ 5; //南北黄灯标志
    sbit Green_nb = P2 ^ 4;  //南北绿灯标志
    
    sbit Red_dx = P2 ^ 3;	//东西红灯标志
    sbit Yellow_dx = P2 ^ 2; //东西黄灯标志
    sbit Green_dx = P2 ^ 1;  //东西绿灯标志
    
    sbit Buzz = P3 ^ 3;
    bit set = 0;	 //调时方向切换键标志 =1时,南北,=0时,东西
    bit dx_nb = 0;   //东西南北控制位
    bit shanruo = 0; //闪烁标志位
    bit yejian = 0;  //夜间黄灯闪烁标志位
    
    uchar code table[11] = {
    	//共阴极字型码
    	0x3f, //--0
    	0x06, //--1
    	0x5b, //--2
    	0x4f, //--3
    	0x66, //--4
    	0x6d, //--5
    	0x7d, //--6
    	0x07, //--7
    	0x7f, //--8
    	0x6f, //--9
    	0x00  //--NULL
    };
    
    //函数的声明部分
    void delay(int ms); //延时子程序
    void key();			//按键扫描子程序
    void key_to1();		//键处理子程序
    void key_to2();
    void key_to3();
    void key_to4();
    void key_to5();
    void display(); //显示子程序
    void logo();	//开机LOGO
    void Buzzer();
    //主程序
    void main()
    {
    	TMOD = 0X11; //定时器设置
    	TH1 = 0X3C;
    	TL1 = 0XB0;
    	TH0 = 0X3C; //定时器0置初值 0.05S
    	TL0 = 0XB0;
    
    	T2MOD = 0x01; //自动重载
    	T2CON = 0x30; //T2用做发送接收时钟
    	TH2 = 0xFF;   //9600波特率,11.0592Mhz晶振
    	TL2 = 0xDC;
    	RCAP2H = 0xFF;
    	RCAP2L = 0xDC;
    	SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据,可变波特率
    	PCON = 0X00; //波特率不加倍
    	TR2 = 1;	 //启动T2
    
    	ES = 1;				 //开串口中断
    	EA = 1;				 //开总中断
    	ET0 = 1;			 //定时器0中断开启
    	ET1 = 1;			 //定时器1中断开启
    	TR0 = 1;			 //启动定时0
    	TR1 = 0;			 //关闭定时1
    	EX0 = 1;			 //开外部中断0
    	EX1 = 1;			 //开外部中断1
    	logo();				 //开机初始化
    	P2 = 0Xc3;			 // 开始默认状态,东西绿灯,南北黄灯
    	sec_nb = sec_dx + 5; //默认南北通行时间比东西多5秒
    	while (1)			 //主循环
    	{
    		key();	 //调用按键扫描程序
    		display(); //调用显示程序
    	}
    }
    
    void key_to1() //夜间模式设置函数
    {
    	TR0 = 0; //关定时器
    	P2 = 0x00;
    	TR1 = 1;
    	sec_dx = 00; //四个方向的时间都为00
    	sec_nb = 00;
    }
    
    void key_to2() //禁止通行模式设置函数
    {
    	TR0 = 0;   //关定时器
    	P2 = 0x00; //灭显示
    	Red_dx = 1;
    	Red_nb = 1; //全部置红灯
    	TR1 = 0;
    	sec_dx = 00; //四个方向的时间都为00
    	sec_nb = 00;
    }
    
    void key_to3() //确认设置函数
    {
    	TR0 = 1;			 //启动定时器0
    	xianshi_fx = 0;		 //设置重新显示
    	sec_nb = set_timenb; //从中断回复,仍显示设置过的数值
    	sec_dx = set_timedx; //显示设置过的时间
    	TR1 = 0;			 //关定时器1
    	if (set == 0)		 //时间倒时到0时
    	{
    		P2 = 0X00;			 //灭显示
    		Green_dx = 1;		 //东西绿灯亮
    		Red_nb = 1;			 //南北红灯亮
    		sec_nb = sec_dx + 5; //回到初值
    	}
    	else
    	{
    		P2 = 0x00; //南北绿灯,东西红灯
    		Green_nb = 1;
    		Red_dx = 1;
    		sec_dx = sec_nb + 5;
    	}
    }
    
    void key_to4() //东西通行设置函数
    {
    	TR0 = 0;	  //关定时器0
    	TR1 = 0;	  //关定时器1
    	P2 = 0x00;	//灭显示
    	Green_dx = 1; //东西方向置绿灯
    	Red_nb = 1;   //南北方向为红灯
    	sec_dx = 00;  //四个方向的时间都为00
    	sec_nb = 00;
    }
    
    void key_to5() //南北通行设置函数
    {
    	TR0 = 0;	  //关定时器0
    	TR1 = 0;	  //关定时器1
    	P2 = 0x00;	//灭显示
    	Green_nb = 1; //置南北方向为绿灯
    	Red_dx = 1;   //东西方向为红灯
    	sec_nb = 00;  //四个方向的时间都为00
    	sec_dx = 00;
    }
    
    //函数的定义部分
    void key(void) //按键扫描子程序
    {
    	if (k1 != 1) //当K1(夜间模式)按下
    	{
    		display();   //调用显示,用于延时消抖
    		if (k1 != 1) //如果确定按下
    		{
    			key_to1(); //夜间模式设置函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k1 != 1); //等待按键释放
    		}
    	}
    	if (k2 != 1) //当K2(禁止)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k2 != 1) //如果确定按下
    		{
    			key_to2(); //停止通行设置函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k2 != 1); //等待按键释放
    		}
    	}
    	if (k3 != 1) //当K3(确认)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k3 != 1) //如果确定按下
    		{
    			key_to3();
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k3 != 1); //等待按键释放
    		}
    	}
    
    	if (k4 != 1) //当K4(东西通行)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k4 != 1) //如果确定按下
    		{
    			key_to4(); //东西通行函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k4 != 1); //等待按键释放
    		}
    	}
    
    	if (k5 != 1) //当K5(南北通行)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k5 != 1) //如果确定按下
    		{
    			key_to5(); //南北通行函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k5 != 1); //等待按键释放
    		}
    	}
    
    	if (hw_dx != 1) //东西红外探头
    	{
    		display();		//调用显示,用于延时消抖和按键检测方法基本相同
    		if (hw_dx != 1) //如果确定有车辆经过
    		{
    			if (dx_nb == 0) //东西通行的时间
    			{
    				num_che_dx++; //用于记录东西绿灯时经过的车辆数
    			}
    			else
    			{
    				Buzz = 0; //蜂鸣器开
    			}
    			while (hw_dx != 1)
    				; //等待释放
    			{
    				display(); //调用显示,用于延时
    			}
    			Buzz = 1; //蜂鸣器关
    		}
    	}
    
    	if (hw_nb != 1) //南北红外探头
    	{
    		display();		//调用显示,用于延时消抖和按键检测方法基本相同
    		if (hw_nb != 1) //如果确定有车辆经过
    		{
    			if (dx_nb == 1) //东西通行的时间
    			{
    				num_che_nb++; //用于记录南北绿灯时经过的车辆数
    			}
    			else
    			{
    				Buzz = 0; //蜂鸣器开
    			}
    			while (hw_nb != 1)
    				; //等待释放
    			{
    				display(); //调用显示,用于延时
    			}
    			Buzz = 1; //蜂鸣器关
    		}
    	}
    	if (k6 != 1) //(查看)键按下
    	{
    		display();   //调用显示,用于延时消抖
    		if (k6 != 1) //如果确定按下
    		{
    			xianshi_fx++;
    			if (xianshi_fx >= 3)
    				xianshi_fx = 2;
    			while (k6 != 1)
    				; //等待按键释放
    			{
    				display(); //调用显示,用于延时
    			}
    		}
    	}
    }
    void display(void) //显示子程序
    {
    
    	if (xianshi_fx == 0) //正常显示
    	{
    		buf[1] = sec_nb / 10; //第1位 东西显示秒十位
    		buf[2] = sec_nb % 10; //第2位 东西显示秒个位
    		buf[3] = sec_dx / 10; //第3位 南北显示秒十位
    		buf[0] = sec_dx % 10; //第4位 南北显示秒个位
    	}
    	if (xianshi_fx == 1) //查看通行时间
    	{
    		buf[1] = set_timenb / 10; //第1位 东西通行秒十位
    		buf[2] = set_timenb % 10; //第2位 东西通行秒个位
    		buf[3] = set_timedx / 10; //第3位 南北通行秒十位
    		buf[0] = set_timedx % 10; //第4位 南北通行秒个位
    	}
    
    	if (xianshi_fx == 2) //查看红外计数值
    	{
    		buf[1] = num_che_nb / 10; //第1位 东西红外计数值十位
    		buf[2] = num_che_nb % 10; //第2位 东西红外计数值个位
    		buf[3] = num_che_dx / 10; //第3位 南北红外计数值十位
    		buf[0] = num_che_dx % 10; //第4位 南北红外计数值个位
    	}
    
    	P1 = 0xff;			// 初始灯为灭的
    	P0 = 0x00;			灭显示
    	P1 = 0xfe;			//片选LED1
    	P0 = table[buf[1]]; //送东西时间十位的数码管编码
    	delay(1);			//延时
    	P1 = 0xff;			//关显示
    	P0 = 0x00;			//灭显示
    
    	P1 = 0xfd;			//片选LED2
    	P0 = table[buf[2]]; //送东西时间个位的数码管编码
    	delay(1);			//延时
    	P1 = 0xff;			//关显示
    	P0 = 0x00;			//关显示
    	P1 = 0Xfb;			//片选LED3
    
    	P0 = table[buf[3]]; //送南北时间十位的数码管编码
    	delay(1);			//延时
    	P1 = 0xff;			//关显示
    	P0 = 0x00;			//关显示
    	P1 = 0Xf7;			//片选LED4
    	P0 = table[buf[0]]; //送南北时间个位的数码管编码
    	delay(1);			//延时
    }
    
    void time0(void) interrupt 1 using 1 //定时中断子程序
    {
    	TH0 = 0X3C;		   //重赋初值
    	TL0 = 0XB0;		   //12m晶振50ms//重赋初值
    	TR0 = 1;		   //重新启动定时器
    	countt0++;		   //软件计数加1
    	if (countt0 == 10) //加到10也就是半秒
    	{
    		if ((sec_nb <= 5) && (dx_nb == 0) && (shanruo == 1)) //东西黄灯闪
    		{
    			Green_dx = 0;
    			Yellow_dx = 0;
    			Buzz = 0; //蜂鸣器关
    		}
    		if ((sec_dx <= 5) && (dx_nb == 1) && (shanruo == 1)) //南北黄灯闪
    		{
    			Green_nb = 0;
    			Yellow_nb = 0;
    			Buzz = 0; //蜂鸣器关
    		}
    	}
    
    	if (countt0 == 20) // 定时器中断次数=20时(即1秒时)
    	{
    		countt0 = 0; //清零计数器
    		sec_dx--;	//东西时间减1
    		sec_nb--;	//南北时间减1
    
    		if ((sec_nb <= 5) && (dx_nb == 0) && (shanruo == 1)) //东西黄灯闪
    		{
    			Green_dx = 0;
    			Yellow_dx = 1;
    			Buzz = 1; //蜂鸣器关
    		}
    		if ((sec_dx <= 5) && (dx_nb == 1) && (shanruo == 1)) //南北黄灯闪
    		{
    			Green_nb = 0;
    			Yellow_nb = 1;
    			Buzz = 1; //蜂鸣器关
    		}
    		if (sec_dx == 0 && sec_nb == 5) //当东西倒计时到0时,重置5秒,用于黄灯闪烁时间
    		{
    			sec_dx = 5;
    			shanruo = 1;
    		}
    		if (sec_nb == 0 && sec_dx == 5) //当南北倒计时到0时,重置5秒,用于黄灯闪烁时间
    		{
    			sec_nb = 5;
    			shanruo = 1;
    		}
    		if (dx_nb == 0 && sec_nb == 0) //当黄灯闪烁时间倒计时到0时,
    		{
    			Buzz = 1;  //蜂鸣器开
    			P2 = 0x00; //重置东西南背方向的红绿灯
    			Green_nb = 1;
    			Red_dx = 1;
    			dx_nb = !dx_nb;
    			shanruo = 0;
    			if (num_che_nb > set_timenb / 2) //如果此时南北通行的车辆数大于预设通行量
    				set_timenb = set_timenb + 5;
    			if (num_che_nb == 0) //如果南北方向无车辆通行,每次递减5秒
    				set_timenb = set_timenb - 5;
    			if (set_timenb <= 15)
    				set_timenb = 15;
    			sec_nb = set_timenb;	 //重赋南北方向的起始值
    			sec_dx = set_timenb + 5; //重赋东西方向的起始值
    			num_che_nb = 0;			 //清零
    		}
    
    		if (dx_nb == 1 && sec_dx == 0) //当黄灯闪烁时间到
    		{
    			P2 = 0X00;						 //重置东西南北的红绿灯状态
    			Green_dx = 1;					 //东西绿灯亮
    			Red_nb = 1;						 //南北红灯亮
    			dx_nb = !dx_nb;					 //取反
    			shanruo = 0;					 //闪烁
    			if (num_che_dx > set_timedx / 2) //如果此时南北通行的车辆数大于预设通行量
    				set_timedx = set_timedx + 5;
    			if (num_che_dx == 0) //如果东西方向无车辆通行,每次递减5秒
    				set_timedx = set_timedx - 5;
    			if (set_timedx <= 15)
    				set_timedx = 15;
    			sec_dx = set_timedx;	 //重赋东西方向的起始值
    			sec_nb = set_timedx + 5; //重赋南北方向的起始值
    			num_che_dx = 0;			 //清零
    		}
    	}
    }
    void time1(void) interrupt 3 //定时中断子程序
    {
    	TH1 = 0X3C;		   //重赋初值
    	TL1 = 0XB0;		   //12m晶振50ms//重赋初值
    	countt1++;		   //软件计数加1
    	if (countt1 == 10) // 定时器中断次数=10时(即0.5秒)
    	{
    		Yellow_nb = 0; //南北黄灯灭
    		Yellow_dx = 0; //东西黄灯灭
    	}
    	if (countt1 == 20) // 定时器中断次数=20时(即1秒时)
    	{
    		countt1 = 0;   //清零计数器
    		Yellow_nb = 1; //南北黄灯亮
    		Yellow_dx = 1; //东西黄灯亮
    	}
    }
    
    //外部中断0
    void int0(void) interrupt 0 using 1
    {
    }
    
    //外部中断1
    void int1(void) interrupt 2 using 1
    {
    }
    
    void Com_Int(void) interrupt 4 //串口中断子函数
    {
    	uchar i;
    	uchar receive_data, ruturn_data[8];
    
    	EA = 0;
    
    	if (RI == 1) //当硬件接收到一个数据时,RI会置位
    	{
    		RI = 0;
    		receive_data = SBUF; //接收到的数据
    
    		if (receive_data == '1') //夜间模式
    		{
    			key_to1();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '1';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '2') //停止模式
    		{
    			key_to2();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '2';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '3') //确认(重现)模式
    		{
    			key_to3();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '3';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '4') //东西通行模式
    		{
    			key_to4();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '4';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '5') //南北通行模式
    		{
    			key_to5();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '5';
    			ruturn_data[4] = '\0';
    		}
    		else
    		{
    			ruturn_data[0] = 'e';
    			ruturn_data[1] = 'r';
    			ruturn_data[2] = 'r';
    			ruturn_data[3] = '0';
    			ruturn_data[4] = 'r';
    			ruturn_data[5] = '\0'; //错误命令
    		}
    	}
    	for (i = 0; i < 8; i++)
    	{
    		SBUF = ruturn_data[i]; //将要发送的数据放入到发送寄存器
    		while (!TI)
    			;   //等待发送数据完成
    		TI = 0; //清除发送完成标志位
    	}
    	EA = 1;
    }
    void logo() //开机的Logo  "- - - -"
    {
    	for (n = 0; n < 50; n++) //循环显示----50次
    	{
    		P0 = 0x40; //送形“-”
    		P1 = 0xfe; //第一位显示
    		delay(1);  //延时
    		P1 = 0xfd; //第二位显示
    		delay(1);  //延时
    		P1 = 0Xfb; //第三位显示
    		delay(1);  //延时
    		P1 = 0Xf7; //第四位显示
    		delay(1);  //延时
    		P1 = 0xff; //灭显示
    	}
    }
    
    void delay(int ms) //延时子程序
    {
    	uint j, k;
    	for (j = 0; j < ms; j++) //延时ms
    		for (k = 0; k < 124; k++)
    			; //大约1毫秒的延时
    }
    

    仿真图

    在这里插入图片描述

    功能效果

    正常运行
    在这里插入图片描述
    停止模式(红灯全亮)
    在这里插入图片描述
    深夜模式(黄灯全亮)
    在这里插入图片描述
    东西通行模式

    在这里插入图片描述
    南北通行模式
    在这里插入图片描述
    查看预设的时间
    在这里插入图片描述
    查看车流量在这里插入图片描述

    原理图

    在这里插入图片描述

    展开全文
  • 控制器、计数器的功能功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。通过编译,仿真和综合,并下载到相应芯片中实现,最后在学习机上验证设计课题的正确性。在学习机上验证结果。
  • 根据“绿冲突矩阵”的检测原理,本文提出一种道路交通信号控制机的信号冲突检测方案,采用自顶向下的设计方法,通过FPGA实现系统的各个功能模块。该系统可以独立地检测绿灯信号冲突这种道路交通的异常情况,并能立即...
  • 目录 一、设计内容 2 1.信号灯白天工作方式 2 ...三、功能模块电路设计 3 1秒脉冲产生电路 3 2十二进制计数器: 5 3分频器: 7 4控制电路 8 5直流稳压电源 9 6整体电路 15 四、总结 15 五、 参考文献 16
  • 交通信号灯的51仿真

    2020-10-08 23:33:27
    交通信号灯的51单片机仿真一、实验目的二、实验仪器三、实验内容四、实验过程及原始记录五、实验结果及分析六、源代码七、总结 一、实验目的 安装并熟悉Proteus 电路仿真软件 二、实验仪器 PC机、keil软件、proteus...

    一、实验目的

    安装并熟悉Proteus 电路仿真软件
    

    二、实验仪器

    PC机、keil软件、proteus软件
    

    三、实验内容

    十字路口的交通灯控制系统,四组灯(红黄绿)对应十字路口的四个方向,用两位的数码管显示剩余的时间。其它功能自行完善,根据设计方案的完善程度给定成绩。

    四、实验过程及原始记录

    在这里插入图片描述

    五、实验结果及分析

    在这里插入图片描述

    六、源代码

    #include<reg51.h>
    #define unit unsigned int
    #define uchar unsigned char
    
    sbit p10=P1^0;	   //东西红灯
    sbit p11=P1^1;	   //东西绿灯
    sbit dh=P1^2;	   //东西黄灯
    sbit p13=P1^3;	   //南北红灯
    sbit p14=P1^4;	   //南北绿灯
    sbit nh=P1^5;	   //南北黄灯
    sbit p16=P1^6;	   //始终置位1
    sbit p17=P1^7;	   //始终置位1
    
    uchar num1,num2,num3d;num3n;tt,zc;gf;key;a;b;c;    //东西时间num1;南北时间num2;时间中断次数tt;
    uchar led0,led1,led2,led3;   //数码管显示缓冲区域
    unsigned char code led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
    
    void delay(int z);
    void display(uchar led0,led1,led2,led3);
    uchar keyscan(void);
    
    void main()
    {
    	num1=30;
    	num2=25;
    	tt=0;
    	TMOD=0x11;	  //设置定时器0为工作方式1
    	TH0=(65536-50000)/256;   //定时器0设50毫秒
    	TL0=(65536-50000)%256;
    	EA=1;   //开总中断
    	ET0=1;   //定时器0中断
    	TR0=1;   //启动定时器0
    
    	zc=1;   //正常情况初始化
    	key=0x7e;
    	P1=0xf5;
    	num1=25;
    	num2=30;
    
    	gf=1;   //高峰期初始化
    	c=1;
    	num3d=35;
    	num3n=40;
    	display(led0,led1,led2,led3);
    
    	while(1)
    	{
    		display(led0,led1,led2,led3);
    		key=keyscan();   //调用键盘扫描
    		switch(key)
    		{
    			/*正常情况通行*/
    			case 0x7e:switch(zc)   //用于对灯的初始状态复原,因为紧急状况改变灯的状态
    			{
    				case 1:p10=1;   //东西红灯
    				p11=1;   //东西绿灯
    				p13=0;   //南北红灯
    				p14=1;   //南北绿灯
    				nh=1;   //南北黄灯
    				p16=1;   //始终置为1
    				p17=1;   //始终置为1
    				break;
    				case 2:P1=0xee;break;
    				case 3:p10=0;   //东西红灯
    				p11=1;   //东西绿灯
    				dh=1;   //东西黄灯
    				p13=1;   //南北红灯
    				p14=1;   //南北绿灯
    				p16=1;   //始终置为1
    				p17=1;   //始终置为1
    				break;
    				case 4:P1=0xf5;break;
    			};
    			display(led0,led1,led2,led3);
    			if(num1==0||num2==0)
    			{
    				zc++;   //时间到0后
    				switch(zc)
    				{
    					case 1:num1=5;P1=0xf3;break;
    					case 2:num1=30,num2=25;P1=0xee;break;
    					case 3:num2=5;P1=0xde;break;
    					case 4:zc=1;num1=25;num2=30;P1=0xf5;break;
    				}
    			}
    			else if(a==1)
    			{
    				a=0;
    				num1--;
    				num2--;
    				led0=num1/10;
    				led1=num1%10;
    				led2=num2/10;
    				led3=num2%10;
    				if(zc==2)
    					dh=~dh;
    				if(zc==4)
    					nh=~nh;
    			};
    			b=0;
    			c=1;
    			break;
    			case 0x7d:if(a==1)
    			{
    				b++;
    				if(b<6)
    				{
    					p10=1;	 //东西红灯
    					p11=1;   //东西绿灯
    					dh=~dh;   //东西黄灯
    					p13=1;   //南北红灯
    					p14=1;   //南北绿灯
    					nh=~nh;   //南北黄灯
    					p16=1;   //始终置为1
    					p17=1;   //始终置为1
    					
    				}
    				else
    				{
    					p10=1;	 //东西红灯
    					p11=1;   //东西绿灯
    					dh=1;   //东西黄灯
    					p13=0;   //南北红灯
    					p14=1;   //南北绿灯
    					nh=1;   //南北黄灯
    					p16=1;   //始终置为1
    					p17=1;   //始终置为1
    				}
    				a=0;
    			};
    			break;
    			case 0x7b:if(c==1)
    			{
    				c=0;
    				num3d=35;
    				num3n=40;
    			}
    			display(led0,led1,led2,led3);
    			if(num3d==0||num3n==0)
    			{
    				gf++;
    				switch(gf)
    				{
    					case 1:num3d=5;P1=0xf3;break;
    					case 2:num3d=20,num3n=15;P1=0xee;break;
    					case 3:num3n=5;P1=0xde;break;
    					case 4:gf=1;num3d=35;num3n=40;P1=0xf5;break;
    				}
    			}
    			else if(a==1)
    			{
    				a=0;
    				num3d--;
    				num3n--;
    				led0=num3d/10;
    				led1=num3d%10;
    				led2=num3n/10;
    				led3=num3n%10;
    				if(gf==2)
    					dh=~dh;
    				if(gf==4)
    					nh=~nh;
    			}
    			b=0;
    			break;
    		}
    		display(led0,led1,led2,led3);
    	}
    }
    
    void delay(int z)
    {
    	int x;
    	int y;
    	for(x=z;x>0;x--)
    	for(y=110;y>0;y--);
    }
    
    void time0() interrupt 1   ///定时器中断为1,0是外部中断
    {
    	EA=0;
    	TH0=(65536-50000)/256;
    	TL0=(65536-50000)%256;
    	tt++;
    	if(tt==20)
    	{
    		a=1;
    		tt=0;
    	}
    	EA=1;
    }
    
    void display(uchar led0,led1,led2,led3)
    {
    	P3=0xfe;P0=led_code[led0];delay(5);
        P3=0xfd;P0=led_code[led1];delay(5);
    	P3=0xfb;P0=led_code[led2];delay(5);
    	P3=0xf7;P0=led_code[led3];delay(5);
    }
    
    uchar keyscan(void)   //键盘扫描函数
    {
    	P2=0xff;   //行数输出全为0
    	if(P2!=0xff)
    	{
    		if(P2^7==0)return(0x7d);
    		if(P2^6==0)return(0x7b);
    		display(led0,led1,led2,led3);   /*调显示*/
    	}
    	return(0x7e);   //无键按下返回值
    }
    

    七、总结

    本次实验是对单片机学习的一个综合考量,主要任务便是设计一个交通灯控制系统。在查阅大量文献之后终于将程序代码完成。但在最后做proteus仿真图的时候遇到了困难,画图画到一半我的proteus直接闪退关闭了,里面的东西全没了,导致做了很多次,浪费了很多时间。但最后把仿真图画出来以后,仿真的时候我的红绿灯倒计时无法正常显示,但红绿灯能够正常跳动,到最后也没能找到原因和解决办法。所以这是一次失败的仿真实验。

    展开全文
  • 自从交通灯诞生以来,其内部的电路控制系统就不断的被改进。设计方法也开始多种多样,从而使交通灯显得更加智能化。 可编程控制器(PLC)以微处理器为核心,普遍采用依据继电接触器控制系统电气原理图编制的梯形图语言...
  • 而由电子器件、电路元件及相关装置构成的能实现某种特定功能的电子电路称之为电子系统。按所处理的信号分,有模拟电子系统、数字电子系统、模拟数字混合的电子系统。模拟电子系统如:多路输出高精度直流稳压电源;...
  • 基于51单片机交通灯程序设计与仿真

    千次阅读 多人点赞 2020-05-10 17:57:15
    本文提出一种基于单片机的交通信号灯控制系统的设计方案。该系统模拟现实中十字路口的通行指示,倒计时、紧急车辆通行、强制东西/南北通行、夜间模式灯、转向等功能。并结合交通灯,设计了人行道灯。采用STC89C51...
  • 可以根据实际情况对灯亮时间进行自由调整,整个设计系统通过Max+PlusⅡ软件进行了模拟仿真,并到FPGA器件中进行硬件的调试,验证了设计交通信号灯控制电路完全可以实现预定的功能,具有一定的实用性。
  • 0 引言随着自动化控制技术和微电子技术的迅猛发展,PLC作为前沿的工业控制器,具有体积小、可靠性高、易操作、灵活性强、抗干扰能力强等一系列...交通灯控制工艺:南北、东西向的十字路口,均设有红、黄、绿三只信号
  •   当前,大量的信号灯电路正向着数字化、小功率、多样化、方便人、车、路三者关系的协调,多值化方向发展随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门...
  • 利用数字集成芯片设计交通灯控制器 新控制器由时钟信号发生器 主控制器 置数 器 计数器 译码驱动电路和数字显示电路等组成,它除了实现基本交通灯功能外,还具有倒计时显示 时间设置功能 相比于采用单片机或 FPGA ...
  • 十字路口的红绿黄灯的控制1、实现一个十字路口的信号灯控制电路 2、信号灯分别由红、黄、绿三种颜色组成,运行时,绿灯亮40秒,然后闪5秒,绿灯灭,黄灯亮2秒,黄灯灭,红灯亮,同时另一方向绿灯亮,红灯亮的时间为...
  • 十字路口交通灯.zip

    2020-08-06 14:02:02
    采用单片机AT89C52为中心器件来设计交通信号灯控制器,系统实用性强,操作简单、扩展性强。本设计系统就是由...系统除具有基本的交通信号灯功能外,还具有紧急情况处理功能,较好的模拟实现了十字路口可能出现的状况
  • ­­­­­­­­­­­­­­­一、设计内容 利用8253定时器、8255等接口,设计电路,模拟十字路口交通灯控制。二、设计原理及方案2.1 8255A的内部结构及引脚功能8255A的内部结构8255A的内部结构如图1所示,它由...
  • 主要内容有交通灯模拟系统设计方案,主要功能,各功能模块的介绍,电路设计,硬件部分设计,软件部分设计,模拟系统的仿真调试,设计方法以及课程设计的心得体会等等。 该设计中用光二极管来模拟信号灯,紧急车的...
  • 第五次按“设置键”时,系统退出设置状态,回到交通信号灯状态,并且东西向先通行,南北向后通行 软件设计:采用Keil C开发环境与语言 1)软件模块:根据上述工作流程和设计要求,软件设计可以分为以下几个功能...
  • 51单片机交通灯(十字路口演示)

    千次阅读 多人点赞 2020-06-28 18:20:31
    系统除具有基本的交通信号灯功能外,还具有倒计时、时间调整和紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。软件上采用 KEIL C 编程,主要编写了主程序, LED数码管显示程序,中断程序,延时程序等...
  • 数电实验报告-交通灯

    2010-12-29 20:44:56
    给定四个信号灯和A、B两个信号源以及相关芯片,设计电路完成以下功能:当A、B输入信号为0、0时,四个信号灯全部熄灭,输入信号为0、1时信号灯从左向右逐个亮起和熄灭,输入信号为1、0时,信号灯从右向左逐个亮起和...
  • 1. 红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号,实验电路用逻辑开关代替 2. 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯...
  • 为确保车辆安全,迅速地通行,在交叉道口的每个入口处设置了红,绿,黄3色信号灯。 (二)要求: (1)主干道绿灯亮时,支干道红灯亮,反之亦然,两者交替允许通行,主干道每次放行55s,支干道每次放行25s。每次由...
  • Proteus是英国Labcenter公司开发的电路分析与实物仿真及印制电路设计软件,它可以仿真、分析各种模拟电路和集成电路,其提供了大量模拟与数字元器件及外部设备,以及各种虚拟仪器(如电压表、电流表、示波器、逻辑...
  • 交通信号灯用于道路平面交叉路口,通过对车辆、行人发出行进或停止的指令,使人与人、车与车之间尽可能减少相互干扰,从而提高路口的通行能力,保障路口畅通和安全。本文介绍了一种城市十字路口交通信号灯控制系统。...
  • 电子设计.doc

    2019-05-28 11:58:28
    0201、声光触摸控制延时照明灯电路 0202、电压电阻转换模块 0203、电子电路百科全书 0204、电子电路大全 0205、电子设计开关电路 0206、MSP430F149开发板常用经典例程资料 0207、MSP430449系列16位超低功耗单片机...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

交通信号灯电路设计功能