精华内容
下载资源
问答
  • 交通信号灯电路设计功能
    2021-05-31 22:57:18
    十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。

    功能描述

    1、采用51单片机作为主控单元;

    2、采用74HC245芯片驱动数码管;

    3、采用数码管显示倒计时时间;

    4、东西和南北方向各有两个数码管,分别显示时间,东西和南北的时间是不一样的,相差黄灯的时间才是正确的;

    5、可分别设置主干道和支干道通行时间;

    6、具有紧急模式,特种车辆优先通行或交通事故应急处理。

    按键说明

    K1:黄灯长亮(深夜模式);K2:红灯长亮(禁行);

    K3:东西通行;K4:南北通行;

    K5:确定调时时间;K6:时间加;K7:时间减;

    K8:切换调时方向(东西和南北可分别设置);

    K9:复位按键;

    整体方案

    电路设计

    采用Altium Designer作为电路设计工具。Altium Designer通过把原理图设计、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。

    仿真设计

    采用Proteus作为仿真设计工具。Proteus是一款著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计

    主程序设计

    void main()
    {
    	TMOD=0X11;	   				//定时器设置
    	TH1=0X3C;		
    	TL1=0XB0;
    	TH0=0X3C;					//定时器0置初值 0.05S
    	TL0=0XB0;
    	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(); 				//调用显示程序
    	}	
    }

    源文件获取

    关注公众号【电子开发圈】,首页发送 “交通灯” 获取;

     

    更多相关内容
  • 随着电子与计算机技术的迅速发展,电子电路的分析与设计方法发生了重大的变化。电子设计自动化技术已成为设计现代电子系统必不可少的工具和手段。在电子技术领域里,为了...本设计的任务就是设计一个交通灯的控制器系统
  • 因此,作为交通监管系统的重要组成部分,交通信号灯在协调人、车、路的关系时发挥着巨大的作用。EDA(Electronic Design Automaon,电子设计自动化)是依靠功能强大的计算机,对以硬件描述语言HDL(Hardware Descripon ...
  • (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关代替传感器做检测车辆是否到来的信号,设计制作一个交通灯控制器。 (2)由于主干道车辆较多而枝干道车辆较少,所以主干道处于常允许通行的状态,而...
  • 以红黄绿三种交通信号灯实现以下功能 主,支干道交替通行,主干道每次放行60S。支干道放行45S,设计倒计时显示电路。 每次绿灯转换为红灯亮时,要求5S的黄灯作为过渡,设计5S显示电路设计启动电路和应急手动控制...
  • 分析交通信号灯的技术要求和LED交通灯的实现方法,深入研究LED光源几种连接方式的优缺点,确定以串并混联方式作为LED信号灯的连接方式,完成LED信号灯灯头的设计,采用RS 485总线实现中心控制器与四个方向单元控制器...
  • 控制器、计数器的功能功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。通过编译,仿真和综合,并下载到相应芯片中实现,最后在学习机上验证设计课题的正确性。在学习机上验证结果。
  • 可以比较合理高效的完成交通灯设计。软件上基于C语言进行开发,整体的设计思路选择模块化的设计思路。把时间控制、数码管控制和案件检测等几个功能分别实现,再统一整合到一个工程中去。可以较为高效和提高程序的...
  • 目录 一、设计内容 2 1.信号灯白天工作方式 2 ...三、功能模块电路设计 3 1秒脉冲产生电路 3 2十二进制计数器: 5 3分频器: 7 4控制电路 8 5直流稳压电源 9 6整体电路 15 四、总结 15 五、 参考文献 16
  • 靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯...
  • multisim交通灯设计.doc

    2020-06-18 13:18:54
    4) 设计自动手动切换信号灯模块,可以根据情况选择通行方向 5) 在交替之前,从第五秒开始黄灯闪烁至结束 6) 夜间模式,从22:00到次日5:00各方向黄灯闪烁 7) 东西方向直行时,东西方向左拐以及南北方向直行和左拐均...
  • 工作模式时间的智能切换也不能进行手动调节,以及对通过道口车流量的统计、车辆速度的检测和拍摄功能等都还没实现,而且此次设计需要用到的电子元器件较多,从经济上不划算,因此本次基于单片机的交通信号灯控制系统...
  • 自从交通灯诞生以来,其内部的电路控制系统就不断的被改进。设计方法也开始多种多样,从而使交通灯显得更加智能化。 可编程控制器(PLC)以微处理器为核心,普遍采用依据继电接触器控制系统电气原理图编制的梯形图语言...
  • 交通信号灯设计

    千次阅读 2021-12-19 18:33:54
    ** 设计说明: ** 此信号灯主要应用在主路与次路相交的交叉口处,信号灯共分为4个不同的状态,利用Moore型状态机实现,用六个灯代表主路与次路的六个信号灯(红、绿、黄),高电平时信号灯亮,低电平时灭。...

    **

    设计说明:

    **
    此信号灯主要应用在主路与次路相交的交叉口处,信号灯共分为4个不同的状态,利用Moore型状态机实现,用六个灯代表主路与次路的六个信号灯(红、绿、黄),高电平时信号灯亮,低电平时灭。同时用4个数码管分别显示主路与次路当前信号状态下的剩余时间,并设置复位信号按键rst。
    **

    设计原理图:

    **
    电路原理图
    整个电路可以分为4个部分,分别是时钟模块、BCD码与二进制转换模块、状态机模块、数码管显示模块。Zero1为复位按键,cp为输入的100MHZ时钟信号,red1、yellow1、green1、red2、yellow2、green2为输出的信号灯状态,1代表亮,0代表灭。a_to_g则分别对应于数码管的显示,an则是数码管的位选端,下面分别介绍这几个模块的具体功能。

    • 时钟模块:

    此模块的输入为EGO1开发板上的100MHZ时钟,对应着P17管脚,可将时钟信号进行分频,数码管显示需要200HZ的时钟信号,状态机需要1HZ的时钟信号,没有时钟信号,整个系统也将无法正常工作,时钟模块的核心代码如下所示:(时钟模块代码不需要这么长,这里粘贴的是100MHZ的大部分分频,方便后续复习)

    module clk_div(
      input CP_100MHz, 
      output clk_100MHz,
      output clk_1kHz,
      output clk_200Hz,
      output clk_100Hz,
      output clk_50Hz,
      output clk_20Hz,
      output clk_10Hz,
      output clk_5Hz,
      output clk_2Hz,
      output clk_1Hz
      );
    
      reg [16 : 0] cnt_1kHz;
      reg [2 : 0] cnt1_200Hz;
      reg [2: 0] cnt2_200Hz;
      reg [2 : 0] cnt_100Hz;
      reg [3 : 0] cnt_50Hz;
      reg [4 : 0] cnt_20Hz;
      reg [5 : 0] cnt_10Hz;
      reg [6 : 0] cnt_5Hz;
      reg [7 : 0] cnt_2Hz;
      reg [8 : 0] cnt_1Hz;
      reg clk_1kHz_reg;
      //reg clk_200Hz_reg;
      reg clk_200Hz_reg1;
      reg clk_200Hz_reg2;
      reg clk_100Hz_reg;
      reg clk_50Hz_reg;
      reg clk_20Hz_reg;
      reg clk_10Hz_reg;
      reg clk_5Hz_reg;
      reg clk_2Hz_reg;
      reg clk_1Hz_reg;
      initial
        begin
          cnt_1kHz=0;
          cnt_100Hz=0;
          cnt_50Hz=0;
          cnt_20Hz=0;
          cnt_10Hz=0;
          cnt_5Hz=0;
          cnt_2Hz=0;
          cnt_1Hz=0;                                
          clk_1kHz_reg=0;
          clk_200Hz_reg1=0;
          clk_200Hz_reg2=0;
          clk_100Hz_reg=0;
          clk_50Hz_reg=0;
          clk_20Hz_reg=0;
          clk_10Hz_reg=0;
          clk_5Hz_reg=0;
          clk_2Hz_reg=0;
          clk_1Hz_reg=0;
        end  
      always @ (posedge CP_100MHz) 
        begin      
          if (cnt_1kHz < 17'd100000/2-1)//17'h186A0=100000
            begin
              cnt_1kHz <= cnt_1kHz + 1;
              clk_1kHz_reg <= clk_1kHz_reg;
            end
          else
            begin
              cnt_1kHz = 0;
              clk_1kHz_reg <= ~clk_1kHz_reg;        
            end
        end
      //200Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt1_200Hz < 3'd5-1)
            cnt1_200Hz <= cnt1_200Hz + 1;
          else
            cnt1_200Hz <= 0;  
        end     
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt1_200Hz < 3'd5/2)
              clk_200Hz_reg1 <= 1;
          else
              clk_200Hz_reg1 <= 0;
        end 
      always @ (negedge clk_1kHz) 
        begin      
          if (cnt2_200Hz < 3'd5-1)
            cnt2_200Hz <= cnt2_200Hz + 1;
          else
            cnt2_200Hz <= 0;  
        end      
      always @ (negedge clk_1kHz) 
        begin      
          if (cnt2_200Hz < 3'd5/2)
              clk_200Hz_reg2 <= 1;
          else
              clk_200Hz_reg2 = 0;
        end 
        assign clk_200Hz=clk_200Hz_reg1|clk_200Hz_reg2;
        //100Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_100Hz < 4'd10/2-1)
            begin
              cnt_100Hz <= cnt_100Hz + 1;
              clk_100Hz_reg <= clk_100Hz_reg;
            end
          else
            begin
              cnt_100Hz = 0;
              clk_100Hz_reg <= ~clk_100Hz_reg;        
            end
        end     
        //50Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_50Hz < 5'd20/2-1)
            begin
              cnt_50Hz <= cnt_50Hz + 1;
              clk_50Hz_reg <= clk_50Hz_reg;
            end
          else
            begin
              cnt_50Hz = 0;
              clk_50Hz_reg <= ~clk_50Hz_reg;        
            end
        end
        //20Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_20Hz < 6'd50/2-1)
            begin
              cnt_20Hz <= cnt_20Hz + 1;
              clk_20Hz_reg <= clk_20Hz_reg;
            end
          else
            begin
              cnt_20Hz = 0;
              clk_20Hz_reg <= ~clk_20Hz_reg;        
            end
        end
        //10Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_10Hz < 7'd100/2-1)
            begin
              cnt_10Hz <= cnt_10Hz + 1;
              clk_10Hz_reg <= clk_10Hz_reg;
            end
          else
            begin
              cnt_10Hz = 0;
              clk_10Hz_reg <= ~clk_10Hz_reg;        
            end
        end 
        //5Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_5Hz < 8'd200/2-1)
            begin
              cnt_5Hz <= cnt_5Hz + 1;
              clk_5Hz_reg <= clk_5Hz_reg;
            end
          else
            begin
              cnt_5Hz = 0;
              clk_5Hz_reg <= ~clk_5Hz_reg;        
            end
        end 
        //2Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_2Hz < 9'd500/2-1)
            begin
              cnt_2Hz <= cnt_2Hz + 1;
              clk_2Hz_reg <= clk_2Hz_reg;
            end
          else
            begin
              cnt_2Hz = 0;
              clk_2Hz_reg <= ~clk_2Hz_reg;        
            end
        end 
        //1Hz
      always @ (posedge clk_1kHz) 
        begin      
          if (cnt_1Hz < 10'd1000/2-1)
            begin
              cnt_1Hz <= cnt_1Hz + 1;
              clk_1Hz_reg <= clk_1Hz_reg;
            end
          else
            begin
              cnt_1Hz = 0;
              clk_1Hz_reg <= ~clk_1Hz_reg;        
            end
        end  
      assign clk_100MHz = CP_100MHz;  
      assign clk_1kHz = clk_1kHz_reg;
      assign clk_100Hz = clk_100Hz_reg;
      assign clk_50Hz  = clk_50Hz_reg;
      assign clk_20Hz  = clk_20Hz_reg;
      assign clk_10Hz  = clk_10Hz_reg;
      assign clk_5Hz   = clk_5Hz_reg;
      assign clk_2Hz   = clk_2Hz_reg;
      assign clk_1Hz   = clk_1Hz_reg;
    
    endmodule
    

    **

    • 状态机模块:*

    **
    此模块的输入为复位信号rst以及时钟信号clk,输出为red1,yellow1,green1;red2,
    yellow2,green2。高电平时亮,低电平时灭,利用Moore型状态机实现,整个信号灯周期共分为4个状态,状态表如下图所示:
    在这里插入图片描述

    利用Verilog语言实现过程如下:

    module state(  input rst,clk,
                    output red1,yellow1,green1,red2,yellow2,green2,
                    output [7:0] counter_x,counter_y);
        reg red1,yellow1,green1,red2,yellow2,green2;
        reg [3:0] current_state,next_state;
        reg [7:0] counter,counter_x,counter_y,timeover,timeover_x,timeover_y;
        parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;
        parameter time1 = 'd24, time2 = 'd4;
        //状态转换
        always @(posedge clk or negedge rst)
            if(!rst)
                begin
                    current_state <= S0;
                    counter <= time1;
                    counter_x <= 'd24;
                    counter_y <= 'd29;
                   
                end
            else
                begin
                    if(counter == 0)
                        begin
                            current_state <= next_state;
                            counter <= timeover;
                            counter_x <= timeover_x;
                            counter_y <= timeover_y;
                        end
                    else
                        begin
                            counter <= counter - 1;
                            counter_x <= counter_x - 1;
                            counter_y <= counter_y -1;
                        end
                end
        //状态改变
        always @(current_state)
            begin
                case(current_state)
                    S0:begin //横向绿灯,纵向红灯
                        red1 = 0; yellow1 = 0; green1 = 1;
                        red2 = 1; yellow2 = 0; green2 = 0;
                        next_state <= S1; timeover <= time2;
                        timeover_x <= 'd4;
                        timeover_y <= 'd4;
                        end
                    S1:begin //横向黄灯,纵向红灯
                        red1 = 0; yellow1 = 1; green1 = 0;
                        red2 = 1; yellow2 = 0; green2 = 0;
                        next_state <= S2; timeover <= time1;
                        timeover_x <= 'd29;
                        timeover_y <= 'd24;
                        end
                    S2:begin //横向红灯,纵向绿灯
                        red1 = 1; yellow1 = 0; green1 = 0;
                        red2 = 0; yellow2 = 0; green2 = 1;
                        next_state <= S3; timeover <= time2;
                        timeover_x <= 'd4;
                        timeover_y <= 'd4;
                        end
                    S3:begin //横向红灯,纵向黄灯
                        red1 = 1; yellow1 = 0; green1 = 0;
                        red2 = 0; yellow2 = 1; green2 = 0;
                        next_state <= S1; timeover <= time1;
                        timeover_x <= 'd24;
                        timeover_y <= 'd29;
                        end
                    default:begin //横向绿灯,纵向红灯
                                red1 = 0; yellow1 = 0; green1 = 1;
                                red2 = 1; yellow2 = 0; green2 = 0;
                                next_state <= S1; timeover <= time2;
                                timeover_x <= 'd4;
                                timeover_y <= 'd4;
                             end
                endcase
            end        
    endmodule
    

    • 二进制与BCD码转换模块:

    此模块的输入为状态机模块的counter_x与counter_y输出,分别表示主路与次路当前状态下所剩余的时间,但它们均是由二进制数表示的,为了让数码管可以正常显示,需要借助BCD码来实现,也就是将二进制转换成BCD码,此次设计采用大4加3移位算法,算法原理如下:

    1. 4位二进制数大于15则进位,4位BCD码大于9则进位,若使4位二进制数变为BCD码,则其大于9时加6,得到的便是其BCD码(由真值表规律可知),例如:12的二进制数为1100,它是大于9的,则1100+0110=1_0010,即为BCD码的12。
    2. 对于5位二进制,先判断高四位是否大于9,若大于9,则加6并向左移位;若小于9,则直接向左移位。例如30的二进制数为11110,高4位1111的BCD码为10101,因为其大于9,所以加6,变为1_0101,左移一位之后,得到0010_1010,新低四位的值1010大于9,所以新低4位加6得到0011_0000,即为30的BCD码。所以只要通过左移及大9加6(大于等于10加6),则可转换任意位2进制数为BCD码。
      但是该算法是移位加6,即加0110。而大4加3(0011)算法比此法占用资源少,但在算法上两者是等价的,即判断4位二进制数是否大于等于5,若大于等于5则加3,再移位;否则直接移位。例如10的二进制数0_1010
    3. 按照大9加6算法,5的二进制数为0101,左移一位之后变为1010(10),此时需要加6并左移一位,变为BCD码1_0000。即10+6=16(进1)
    4. 按照大4加3算法,5的二进制数为0101,大于4,此时需要加3并左移一位,变为BCD码1_0000。即(5+3)*2 = 16(进1),左移一位(低位补0)相当于乘以2。
    5. 8位2进制数最大能表示的数字为255,用BCD码表示,需要10位来表示。因此此模块的输入为8位二进制数,输出为10位二进制数。
      a.把二进制数左移一位;
      b.如果共移了8位,那么BCD数就在百位、十位和个位列,转换完成;
      c.如果在BCD列中,任何一个二进制数是5或比5更大,那么就在BCD列的数值加 3;
      d.返回步骤a。
      例如二进制数1111_1111到255的转换过程如下所示:
      在这里插入图片描述在这里插入图片描述

    利用Verilog语言实现的过程如下:

    module binbcd8 (
      input wire [7:0] b,
      output reg [9:0] p
    );
      // 中间变量 
      reg [17:0] z;//8位输入,10位输出,共18个数
      integer i;
      always @ ( * )   //always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行
        begin 
          for (i = 0; i <=17; i = i + 1)
            z[i] = 0;
          z[10:3] = b;   // 向左移3位,8421码,左移两位均不会大于等于5
          repeat (5)                           // 重复5次
            begin 
              if (z[11:8] > 4)                     // 如果个位大于4
                z[11:8] = z[11:8] +3;              // 加3
              if (z[15:12] > 4)                     // 如果十位大于4 
                z[15:12] = z[15:12] +3;            // 加3
              z[17:1] = z[16:0];                   // 左移一位
            end
        p = z[17:8];                          // BCD 
        end
    endmodule
    
    • 数码管显示模块:

    此模块的输入为二进制转换为BCD码模块的输出,用来使数码管正确的显示十进制数,也就是此次实验设计中的各个信号灯所剩余的时间,利用Verilog语言实现的过程如下:

    module hx7seg(
      input wire [11:0] x,//4的倍数,12位
      input wire cclk,//保证有一个足够的频率。一般工作在200HZ
      input wire clr,//清零端
      output reg [6:0] a_to_g,
      output reg [1:0] an//位选端,控制数码管的选择
    );
      reg s;
      reg [3:0] digit;
    
    // 2-位计数器
      always @ (posedge cclk or posedge clr)
        begin 
          if (clr ==1)//高电平清零
              s <= 0;
          else
              s <= s + 1;
        end
    
    // Quad 4-to-1 MUX: mux44
      always @ ( * )//always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。
        case (s)//本项目中的所有时间均是两位数,因此s有两种状态即可
          0: digit = x[3:0];
          1: digit = x[7:4];
          default: digit = x[11:8];
        endcase
        
    // 选择数码管
      always @ ( * )
        begin 
          an = 2'b00;  
          an[s] = 1;
        end
    
    // 7段解码器:hex7seg
        always @ ( * )
          case (digit)
            0: a_to_g = 7'b1111110;
            1: a_to_g = 7'b0110000;
            2: a_to_g = 7'b1101101;
            3: a_to_g = 7'b1111001;
            4: a_to_g = 7'b0110011;
            5: a_to_g = 7'b1011011;
            6: a_to_g = 7'b1011111;
            7: a_to_g = 7'b1110000;
            8: a_to_g = 7'b1111111;
            9: a_to_g = 7'b1111011;
            'hA: a_to_g = 7'b1110111;
            'hB: a_to_g = 7'b0011111;
            'hC: a_to_g = 7'b1001110;
            'hD: a_to_g = 7'b0111101;
            'hE: a_to_g = 7'b1001111;
            'hF: a_to_g = 7'b1000111;
            default: a_to_g = 7'b0000000;  // 空白
          endcase
    endmodule
    
    • 引脚约束:
    set_property IOSTANDARD LVCMOS33 [get_ports zero1]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[6]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[5]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[4]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[3]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[2]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g0[0]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[6]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[5]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[4]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[3]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[2]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {a_to_g1[0]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {an0[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {an0[0]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {an1[1]}]
    set_property IOSTANDARD LVCMOS33 [get_ports {an1[0]}]
    set_property PACKAGE_PIN P5 [get_ports zero1]
    set_property PACKAGE_PIN P4 [get_ports zero2]
    set_property IOSTANDARD LVCMOS33 [get_ports cp]
    set_property IOSTANDARD LVCMOS33 [get_ports green1]
    set_property IOSTANDARD LVCMOS33 [get_ports red1]
    set_property IOSTANDARD LVCMOS33 [get_ports green2]
    set_property IOSTANDARD LVCMOS33 [get_ports red2]
    set_property IOSTANDARD LVCMOS33 [get_ports yellow2]
    set_property IOSTANDARD LVCMOS33 [get_ports yellow1]
    set_property IOSTANDARD LVCMOS33 [get_ports zero2]
    set_property PACKAGE_PIN P17 [get_ports cp]
    set_property PACKAGE_PIN J3 [get_ports red1]
    set_property PACKAGE_PIN J2 [get_ports yellow1]
    set_property PACKAGE_PIN K2 [get_ports green1]
    set_property PACKAGE_PIN L1 [get_ports red2]
    set_property PACKAGE_PIN M1 [get_ports yellow2]
    set_property PACKAGE_PIN K3 [get_ports green2]
    set_property PACKAGE_PIN C1 [get_ports {an0[1]}]
    set_property PACKAGE_PIN H1 [get_ports {an0[0]}]
    set_property PACKAGE_PIN E1 [get_ports {an1[1]}]
    set_property PACKAGE_PIN G6 [get_ports {an1[0]}]
    set_property PACKAGE_PIN B4 [get_ports {a_to_g0[6]}]
    set_property PACKAGE_PIN A4 [get_ports {a_to_g0[5]}]
    set_property PACKAGE_PIN A3 [get_ports {a_to_g0[4]}]
    set_property PACKAGE_PIN B1 [get_ports {a_to_g0[3]}]
    set_property PACKAGE_PIN A1 [get_ports {a_to_g0[2]}]
    set_property PACKAGE_PIN B3 [get_ports {a_to_g0[1]}]
    set_property PACKAGE_PIN B2 [get_ports {a_to_g0[0]}]
    set_property PACKAGE_PIN D4 [get_ports {a_to_g1[6]}]
    set_property PACKAGE_PIN E3 [get_ports {a_to_g1[5]}]
    set_property PACKAGE_PIN D3 [get_ports {a_to_g1[4]}]
    set_property PACKAGE_PIN F4 [get_ports {a_to_g1[3]}]
    set_property PACKAGE_PIN F3 [get_ports {a_to_g1[2]}]
    set_property PACKAGE_PIN E2 [get_ports {a_to_g1[1]}]
    set_property PACKAGE_PIN D2 [get_ports {a_to_g1[0]}]
    
    • 效果图展示:
      初始状态
    • 视频展示:

    视频链接如下所示:
    视频展示

    项目在Vivado运行一切正常,实验所用设备为EGO1开发板,源文件链接如下:(bit流文件与记忆文件均已生成,在traffic文件中,下载后可正常测试)

    • 链接

    百度网盘链接分享
    提取码:0000
    –来自百度网盘超级会员V4的分享

    首次blog,多多关照!!!

    展开全文
  • 简易交通信号灯控制电路,它的控制器主要由控制器、秒脉冲发生器、定时器、译码显示电路及信号灯组成。通过采用数字电路对交通灯控制电路设计,提出使交通灯控制电路用数字信号自动控制十字路口两组红、黄、绿交通灯...
  • 基于Multisim14仿真软件的十字路口交通信号灯系统,信号源为自主搭建的非虚拟信号发生装置,红绿以及黄灯时间为手动可调,同时具有倒计时读秒显示功能
  • 第1关:7段数码管驱动电路设计 实验内容 在 logisim 中打开实验资料包中的 RGLED.circ 文件,在数码管驱动子电路中实现对应功能。 全部1-12关的代码,全对代码!!!
  • 1、设计要求基于小脚丫FPGA开发板设计带数码管显示倒计时的交通灯系统,要求: 1)一个道路绿灯持续时间25S,红灯持续时间10S,黄灯持续时间3S; 2)另一道路绿灯持续时间10S,红灯持续时间25S,黄灯持续时间3S; 3)第...
  • 系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、急车强行通过、交通特殊情况处理等相关功能,实验采用AT89C51单片机为控制芯片,采用"Proteus+KeilμVision2"对交通灯控制系统进行了仿真,仿真结果...
  • 0 引言随着自动化控制技术和微电子技术的迅猛发展,PLC作为前沿的工业控制器,具有体积小、可靠性高、易操作、灵活性强、抗干扰能力强等一系列...交通灯控制工艺:南北、东西向的十字路口,均设有红、黄、绿三只信号
  • 用数字逻辑实现的电路,使用刚接触数字电路的同学,期待期待嵌入式高级内容抱歉,内容很详细
  • 1、 设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色机动车辆信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。...
  • 设计是脉冲数字电路的简单应用,设计交通信号灯红灯和绿灯30秒和黄灯2分钟倒计时持续发光。此计时器功能智能,可以自行控制发不同的灯光,同时应用了七段数码管来显示时间。此交通灯可以在实现红灯亮30秒然后红...
  • 交通灯控制: (1)主干道亮绿灯时,则支干道亮红灯,主干道通车,时间为45秒。 (2)主干道亮红灯时,则支干道亮绿灯,支干道通车,时间为25秒。 (3)转换时,绿灯先变为黄灯,5秒后再变为红灯,同时另一方向...

    一、设计指标

    1.1对设计课题进行简要阐述

           由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。

           (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关代替传感器做检测车辆是否到来的信号,设计制作一个交通灯控制器。

           (2)由于主干道车辆较多而枝干道车辆较少,所以主干道处于常允许通行的状态,而支干道有车来才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。

           (3)当主、支干道均有车时,两者交替允许通行,主干道每次放行45s,支干道每次放行25s。设立45s和25s计时显示电路。

           (4)在每次由亮绿灯变成红灯的转换过程中间,要亮25s的黄灯作为过渡,以使行驶中的车辆有时间停到禁止线以外。设置5s计时显示电路。

    1.2.1设计目标要求

           交通灯控制:

           (1)主干道亮绿灯时,则支干道亮红灯,主干道通车,时间为45秒。

           (2)主干道亮红灯时,则支干道亮绿灯,支干道通车,时间为25秒。

           (3)转换时,绿灯先变为黄灯,5秒后再变为红灯,同时另一方向道路的红灯转换为绿灯。

    1.2.2需求分析

           (1)实现主干道,支干道显示的灯不同,可以把两干道显示的数码管同时连在同一计数器上,实现45s,25s倒计时。

           (2)实现倒计时功能,可以采用减计数器。

           (3)实现按秒周期计时,可以用秒发生器。

    二、单元电路的设计

    2.1单元电路1的设计

           555 定时器是一种多用途的模拟、数字混合集成电路 ,波形的产生与变换、控制与检测、家用电器以及电子玩具等领域等许多领域中得到了应用 。555定时器的驱动能力较强,可以吸收和输出200mA电流。555 定时器功能多样 ,应用广泛 ,只要外部配上几个阻容元器件即可构成单稳态触发器、施密特触发器、多谐振荡器等电路。电路由一个 555 芯片、两个电阻和两个电容组成 ,通过电阻给电容 C充电、放电的过程来产生振荡 ,从而输出矩形脉冲。

           时钟脉冲产生电路用一片 555 定时器构成多谐振荡器,其脉冲周期为 T= (2R2 + R1) Cln2

           定时器由与系统秒脉冲(由上面时钟脉冲产生器提供)同步的计数器构成,要求计数器在状态信号ST作用下,首先清零,然后在时钟脉冲上升沿作用下,计数器从0开始进行加1计数,向控制器提供定时信号。

     图1 555定时器

    2.2单元电路2的设计

    2.2.1 74LS192

           同步十进制可逆计数器,具有同步预置数端和异步清零端,可以直接级联而无需外接电路,借位和进位两输出端可级联递增计数和递减计数,使用方便。

     表1 功能表

           基于74LS192实现可倒计时数字钟设计,数字钟范围为23时59分59秒,倒计时范围为59分59 秒,同时该电路还可实现清零、校时、报时等功能。本文重点介绍了秒计数和分计数的实现方式以及在实现过程中产生的问题、原因、解决办法。

        (1)74LS192是双时钟方式的十进制可逆计数器。

       ◆A、B、C、D为输入端,高电平有效。

       ◆LOAD为置数端,低电平有效。

       ◆CLR为清零端,复位端,高电平有效。

       ◆UP为加计数端,上升沿有效。

       ◆DOWN为减计数端,上升沿有效。

       ◆OA、OB、OC、OD为输出端。                       

       ◆BO为借位输出。                             

       ◆CO为进位输出。                                   

        (2)由74LS192构成的25秒与45秒与5秒计数器电路如图所示:

    图2  74LS192计数器控制电路

           左侧的74LS192芯片为计数器的十位,右侧的 74LS192芯片为计数器的个位,个位和十位计数器的四个输出端接到数码显示管的四个引脚上。位数的74LS192芯片的DOWN端接的是1HZ时钟脉冲,即可倒计时。该芯片低电频有效,所以芯片的UP端和LOAD端接 5V VCC电源。BO为借位端接作为十位数的 74LS192芯片的DOWN端。该计数器是由四位二进制数实现的。25秒计数器十位为2,个位为5,十位转换为二进制数就是0100,个位为1010,所以十位B接高电平,A、C与D接地,个位A、C接高电平,B、C接地。需要倒计时,UP上升沿有效,个位十位UP接高电平。CLR为清零端,高电平有效,但是此计数器不需要清零,所以接地。

        45秒计数器与25秒计数器原理相同。45秒计数器十位为4,个位为5,十位转换为二进制数就是0010,个位为1010,所以十位C接高电平,A、B与D接地。个位与25秒计数器一致。

    2.3单元电路3的设计

           计数电路部分只能实现计数功能,并不能控制红绿灯的闪烁功能,为了实现该功能,该电源电路由1片74ls160和1片74ls138芯片组成,由于题目要求有4种计数状态(45s-5s-25s-5s),由74ls160记录计数电路倒计时完成后的4种状态,使用74LS169十进制计数器构成三进制的加法计数器,同时组合74LS138数据选择器及与非门控制三个颜色交通灯的亮与灭。

    图3 仿真图

    2.4 感应装置设计

           由于传感器开关易受到周围环境的影响,实验结果不适合展示,因此仿真与实物采用六脚开关代替传感器开关,开关打开即模拟支路无车,一直显示红灯,关闭即支路来车,与主干道红绿灯显示相联系,感应电路如下图4。

    图4 仿传感器电路

    4.1系统电路图

           系统仿真电路图展示如下图5。

    图5 整机电路图

    三、实物展示

            实物焊接采取锡焊、飞线、杜邦线连接等三种形式,可更好地提高空间利用率,利用排针加杜邦线连接关键电路,具有较高的容错率,出现错误时纠正方法较为简单,实物展示图如下:

    图5 实物展示

    工程文件见:交通信号灯设计(红绿灯)-单片机文档类资源-CSDN下载

     

    展开全文
  • 交通灯控制逻辑电路设计

    万次阅读 多人点赞 2021-01-24 13:38:44
    交通灯控制逻辑电路设计 这是一个数电实验,交通灯,如果使用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秒内任意设定)。

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

    交通灯控制系统原理框图

    图1 交通灯控制系统原理框图

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

    图2 交通灯时序工作流程图

      交通灯以上4种工作状态的转换是由状态转换模块进行控制的。设四种状态编码为00、01、11、10,并分别用S0、S1、S2、S3表示,则状态转换模块工作状态及其功能如下表所示:

    表1 状态转换模块及功能表
    状态转换模块状态信号灯状态车道运行状态
    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;
    在这里插入图片描述

    图3 交通灯状态转换模块的ASM图

    三、过程论述

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

    图4 交通灯基本电路总体布局

    3.1秒脉冲发生器

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

    图5 秒脉冲发生器

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

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

    图6 计数器模块及译码显示模块

    3.2.1计数器的构成

      由两片74LS192构成24进制异步计数器,74LS192为异步置数计数器,要求采用倒计时计数,所以预置数设置为24,用低位74LS192芯片的借位端BO驱动高位 74LS192的减计数时钟端DOWN,完成芯片之间的级联。当两片74LS192芯片的借位端BO都有效时,对两片74LS192芯片进行置数,即 L O A D ′ = ( B O 0 ∗ B O 1 ) ′ = ( ( B O 0 ′ ) ′ ∗ ( B O 1 ′ ) ′ ) ′ LOAD'=(BO_0*BO_1)'=((BO_0')'*(BO_1')')' LOAD=(BO0BO1)=((BO0)(BO1)),减计数端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"表示。其余情况依次类推。

    表2 状态转换表
    现态现态状态转换条件状态转换条件次态次态
    Q1nQ0nTLTRQ1n+1Q0n+1
    000X00
    001X01
    01X001
    01X111
    110X11
    111X10
    10X010
    10X100

      根据上表可以推出状态方程,其方法是:将Q1n+1、Q0n+1为1的项所对应的输人和状态转换条件变量相与,其中"1"用原变量表示,"0"用反变量表示,然后将各与项相或,即可得到下面的方程:
    在这里插入图片描述
    在这里插入图片描述
      根据以上方程,选用数据选择器74LS153 来实现每个D触发器的输入函数,将触发器的现态值加到74LS153 的数据选择输入端作为控制信号。即可实现状态转换模块的功能。状态转换模块原理图如下图所示。由一片双四选一数据选择器74LS153和两个D触发器74LS74组成状态转换模块。触发器记录4种状态,数据选择器与触发器配合实现4种状态的相互交换。电路逻辑图如下:
    在这里插入图片描述

    图7 D触发器连接示意图

      其原理为:两个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种工作状态,翻译成南北、东西车道上红、黄、绿三种信号灯的工作状态。状态转换模块的状态编码与信号灯控制信号之间的关系如下表所示。

    表3 触发器输出译码表
    现态现态南北绿灯南北黄灯南北红灯东西绿灯东西黄灯东西红灯
    Q1nQ0nAGAYARBGBYBR
    00100001
    01010001
    11001100
    10001010

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

    图7 译码模块

    3.4.2 黄灯闪烁

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

    图8 通过开关S1、S2控制黄灯闪烁

    3.5整个交通灯布局图

    交通灯布局图

    图9 交通灯布局图

    四、扩展功能

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

    4.1红灯亮的时间设计

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

    图10 计数器开关输入设置红灯亮的时间

    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有效控制绿灯、黄灯时间

    图11 通过控制TL有效控制绿灯、黄灯时间

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

    在这里插入图片描述

    图12 设计全局图

    五、结果分析

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

    六、参考文献

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

    七、验证源文件

    关注公众号数字站回复 “交通灯multisim ” 获取工程源文件。

    展开全文
  • 使用与非门设计一个十字交叉路口的红绿灯控制电路,检测所设计电路功能,记录测 试结果。 图 1-1 是交叉路口的示意图,图中 A、B 方向是主通道,C、D 方向是次通道,在 A、 B、C、D 四通道附近各装有车辆传感器,...
  • 采用EDA技术,应用VHDL硬件电路描述语言实现交通灯系统控制器的设计,利用MAX+PLUSⅡ集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。该控制逻辑可实现3种颜色的交替点亮、时间...
  • 设计在熟练掌握单片机原理及其应用技术的使用方法基础上,综合应用单片机原理、微机原理、微机接口技术、proteus软件等课程方面的知识,设计一个采用AT89C51单片机控制的交通灯控制电路。能方便的对交通灯进行控制...
  • 1、各方向的红、绿色信号灯能按照设定规则运行; 2、绿灯亮之前,黄灯闪烁5次; 3、红灯和绿灯倒计时间能够正确显示; 4、两干道的车辆不会会车冲突。 5、可以扩展其他功能(如按键设置时间,按键模拟警车) 文档...
  • 精品文档精品文档PAGEPAGE #欢迎下载精品文档精品文档PAGEPAGE #欢迎下载单片机C语言程序设计专题实习专周报告班 级:学 号:姓 名:指导老师:专周成绩:一、硬件设计1.设计要求:OA、B两通道都有车,两道正向放行 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,966
精华内容 786
热门标签
关键字:

交通信号灯电路设计功能