精华内容
下载资源
问答
  • 因此,作为交通监管系统的重要组成部分,交通信号灯在协调人、车、路的关系时发挥着巨大的作用。EDA(Electronic Design Automaon,电子设计自动化)是依靠功能强大的计算机,对以硬件描述语言HDL(Hardware Descripon ...
  • 交通信号灯电路图

    2015-05-04 22:27:32
    交通信号灯控制系统 protues文件 电路图
  • 十字路口交通灯信号控制器设计要求: 1)东西通道和南北通道交替通行,东西通道每次放行时间大于南北通道每次放行时间。 2)绿灯亮表示可以通行,红灯亮表示禁止通行。 3)每次绿灯变红灯时,绿灯先闪转变黄灯(此时...
  • 用multisim模拟的交通信号灯控制电路

    热门讨论 2011-01-16 11:20:03
    这是我们课程设计时用multisim模拟仿真的交通信号灯控制电路,希望能对大家有所帮助。
  • 交通信号灯

    2019-01-22 13:15:36
    基于车速的自适应交通信号灯控制系统,实现无人驾驶的快速通行
  • 交通信号灯控制系统实验平台的设计方案。分别从控制系统控制策略、PLC选型、端口规划、工作 流程、梯形实现以及整体程序综合调试等方面详尽介绍了该创新实验平台的设计思路和实现方法。 学生通过基于该平台的...
  • 在如今这个经济飞速发展的世界,交通已...西门子可编程控制器指令丰富,可以接各种输出、输入扩充设备,有丰富的特殊扩展设备,其中的模拟输入设备和通信设备更是符合交通灯控制系统的要求与特点,能够方便地联网通信。
  • 文件内包含ISE14.4版本的VerilogHDL交通信号灯完整代码,以及testbench测试代码
  • 简易交通信号灯控制电路,它的控制器主要由控制器、秒脉冲发生器、定时器、译码显示电路及信号灯组成。通过采用数字电路对交通灯控制电路的设计,提出使交通灯控制电路用数字信号自动控制十字路口两组红、黄、绿交通灯...
  • 数电课程设计交通信号灯控制电路,比较简单的一个电路 适合新手操作
  • 基于简单的数字电路器件。。。 原创,调试可用 。。。
  • 基于CC2530单片机的交通信号灯系统
  • 2.2 十字路口交通信号灯控制系统电路图………………………………………10 2.3 十字路口交通信号灯PLC硬件控制电路设计 …………………………… 10 2.4 十字路口交通信号灯PLC控制程序设计………………………………...
  • 设计一个十字路口交通信号灯控制器,其要求如下: 1.满足如4.1顺序工作流程。 中设南北方向的红、黄、绿灯分别为NSR、NSY、NSG,东西方向的红、 黄、绿灯分别为EWR、EWY、EWG。 它们的工作方式,有些必须是并行...
  • 太阳能LED交通信号灯由光伏极板、充放电控制器、蓄电池、LED交通信号灯系统构成。系统框图如1所示。 1 系统框图 其中,光伏极板是用来将太阳能转换成电能,为系统供电。 充放电控制器是将太阳能产生的电...
  • 交通信号灯控制器(A) 具体要求如下: (1)用红、绿、黄发光二极管作信号指示灯。 (2)让主干道处于常允许通行的状态,支干道有车来时才允许通行。可用逻辑开关作主支干道检测车辆是否到来的的信号。 (3)主支...
  • 2.2 十字路口交通信号灯控制系统电路图………………………………………10 2.3 十字路口交通信号灯PLC硬件控制电路设计 …………………………… 10 2.4 十字路口交通信号灯PLC控制程序设计………………………………...
  • 该设计在熟练掌握单片机原理及其应用技术的使用方法基础上,综合应用单片机原理、微机原理、微机接口技术、proteus软件等课程方面的知识,设计一个采用AT89C51单片机控制的交通灯控制电路。能方便的对交通灯进行控制...
  • 这个也是我们小学期做的,还算可以吧,希望大家有用。
  • 1、十字路口按:A绿B红---A黄B红—A红B绿—A红B黄-- A绿B红…次序控制; 2、A红B黄和A黄B红时间5秒,绿灯30秒,红灯35秒; 3、各路口右侧以两位LED倒计时显示剩余时间
  • 本文给读者提供了基于单片机的交通灯信号控制器设计方案,给出了源程序供读者设计参考。
  • 交通信号灯控制系统的Verilog实现

    千次阅读 2020-07-17 11:29:44
    首先给出要求:设计一个主干道和支干道十字路口的交通信号灯控制电路 (1)一般情况下保持主干道通畅,主干道绿灯亮、支干道红灯亮,并且主干道绿灯亮时间不少于60秒。 (2)主干道绿灯亮超过60秒,且支干道有车时,...

    交通信号灯控制系统的Verilog实现
    作为数字系统设计入门案例,下面简单介绍最简单的交通控制系统,说明设计思路。
    首先给出要求:设计一个主干道和支干道十字路口的交通信号灯控制电路
    (1)一般情况下保持主干道通畅,主干道绿灯亮、支干道红灯亮,并且主干道绿灯亮时间不少于60秒。
    (2)主干道绿灯亮超过60秒,且支干道有车时,主干道红灯亮,支干道绿灯亮,但支干道亮灯时间不超过30秒。
    (3)每次主干道或支干道绿灯变红灯时,黄灯先亮5秒。
    1.逻辑抽象,明确输入输出。
    主干道和支干道的十字路口交通灯系统求优先保证主干道的畅通。平时处于主干道绿灯、支干道红灯的状态。当支干道有车时,传感器发出信号S=1,主干道绿灯先转换成黄灯、再变成红灯,支干道由红灯变成绿灯。如果支干道继续有车通过时,则传感器继续有信号,使支干道保持绿灯亮,但支干道绿灯持续亮的时间不得超过30s,否则支干道绿灯先转换成黄灯再变成红灯,同时主干道由红灯变成绿灯。主干道每次通行时间不得短于60s,在此期间,即使支干道S有信号,也不能中止主干道的绿灯亮。
    输入信号有时钟、复位、传感器信号;输出有主干道红黄绿灯和支干道红黄绿灯。
    2.确定系统框图
    首先用状态机作为主控制,状态机转换条件根据计时器信息判断转换条件,译码电路中根据所在状态输出对应干道信号灯状态。
    控制单元根据时钟和传感信号向计数器发出信号,计时器向控制单元发出60s(t1)、30s(t2)、5s(t3)计时信号。主干道红黄绿用h_r,h_y,h_g表示,支干道红黄绿用f_r,f_y,f_g表示。
    在这里插入图片描述
    因此,用计时分别产生三个持续的时间段后,向控制单元发出时间已到信号,控制单元根据计时器及传感器的信号,决定是否进行状态转换。如果肯定,则控制单元发出状态转换信号St,计时器开始清零,准备重新计时。

    交通灯控制单元的控制过程分为四个阶段,对应的输出有四种状态,分别用S0、S1、S2和S3表示:
    S0状态 主干道绿灯亮支干道红灯亮,此时若支干道有车等待通过,而且主干道绿灯已亮足规定的时间t1,控制器发出状态转换信号St,输出从状态S0转换到S1 (转换条件:绿灯亮够60s且检测到支干道有车即 t1&&s=1

    S1状态 主干道黄灯亮,支干道红灯亮,进人此状态,黄灯亮足规定的时间t3时,控制器发出状态转换信号St,输出从状态S1转换到S2。 (转换条件:黄灯亮够5s就转换状态即 t3=1

    S2状态 支干道绿灯亮,主干道红灯亮,若此时支干道继续有车,则继续保持此状态,但支干道绿灯亮的时间不得超过t2,否则控制单元发出状态转换信号St,使输出转换到S3状态。若此时支干道没有车,则控制单元立即发出状态转换信号St,使输出转换到S3状态。
    (转换条件:支干道绿灯亮够30s或者检测到支干道没车即 t2+(~s)=1

    S3状态 支干道黄灯亮,主干道红灯亮,此时状态与S1状态持续的时间相同均为t3,时间到时,控制器发出St信号,输出从状态S3回到S0状态。对上述S0、S1、S2和S3四种状态按照格雷码进行编码分别为00,01,11和10。
    /控制状态机/
    always@(posedge clk or negedge rst)
    begin
    if(!rst)
    current_state<=2’d0;
    else
    current_state<=next_state;
    end

    always@(s,current_state,t1,t2,t3)
    begin
    	case(current_state)
    		s0:	begin
    			next_state=(t1&&s)?s1:s0;
    			ST=(t1&&s)?1'b1:1'b0;			
    			end
    		s1:	begin
    			next_state=(t3)?s2:s1;
    			ST=(t3)?1'b1:1'b0;			
    			end
    		s2:	begin
    			next_state=(t2||~s)?s3:s2;
    			ST=(t2||~s)?1'b1:1'b0;			
    			end
    		s3:	begin
    			next_state=(t3)?s0:s3;
    			ST=(t3)?1'b1:1'b0;
    			end
    		endcase
    end
    

    在这里插入图片描述
    在这里插入图片描述

    计时部分采用2个寄存器代表十位(t_h)和个位(t_l)计数,同时每次检测到转换信号都要清零重新计时

    always@(posedge clk or negedge rst)   //计时模块
    	begin
    		if(!rst)
    			{t_h,t_l}<=8'd0;
    		else if(ST)             //控制信号有效说明灯的颜色改变重新计数
    			{t_h,t_l}<=8'd0;
    		else if((t_h==4'd5)&(t_l==4'd9))   //判断是否计数到60
    			begin
    			{t_h,t_l}<={t_h,t_l};						
    			end
    		else if(t_l==4'd9)   //判断个位是否计数满,是则十位加一
    			begin
    			t_h<=t_h+1'b1;
    			t_l<=4'd0;			
    			end
    		else begin
    			t_h<=t_h;
    			t_l<=t_l+1'b1;		
    		end
    	end
        assign t3=(t_h==4'd0)&(t_l==4'd4);   //主干道绿灯计数时间
    	assign t2=(t_h==4'd2)&(t_l==4'd9);	 //	支干道绿灯计数时间
    	assign t1=(t_h==4'd5)&(t_l==4'd9);   //黄灯计数时间
    

    译码部分根据状态机所在状态输出对应信号灯状态

    always@(current_state)
    	begin
    		case(current_state)
    			s0:	begin
    				{hg,hy,hr}=3'b100;  //主干道绿灯
    				{fg,fy,fr}=3'b001;  //支干道红灯			
    				end
    			s1:	begin
    				{hg,hy,hr}=3'b010;  //主干道黄灯
    				{fg,fy,fr}=3'b001;  //支干道红灯			
    				end
    			s2:	begin
    				{hg,hy,hr}=3'b001;  //主干道红灯
    				{fg,fy,fr}=3'b100;  //支干道绿灯			
    				end		
    			s3:	begin
    				{hg,hy,hr}=3'b001;  //主干道红灯
    				{fg,fy,fr}=3'b010;  //支干道黄灯			
    				end	
    			endcase
    	end
    

    在这里插入图片描述
    仿真结果图
    总结:本文设计较简单,对于复杂交通还需改善,但是能够从中慢慢建立对系统架构的认知和联系,从中理清各模块间关系。后续还需多查资料研究,如有错误不合理之处,请告知。

    展开全文
  • 交通信号灯控制系统

    2012-03-27 15:26:16
    交通信号灯控制系统,用于大学课程设计,有主干道,电路图,波形及结果
  • 十字路口交通信号灯控制系统

    千次阅读 多人点赞 2020-07-28 22:33:02
    十字路口交通信号灯控制系统主要任务开发平台设计思路 主要任务 设计一个用于十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿的指示状态; 具有倒计时的功能,用两组数码管作为东西和南北...

    主要任务

    • 设计一个用于十字路口的交通灯控制器,能显示十字路口东西、南北两个方向的红、黄、绿的指示状态;
    • 具有倒计时的功能,用两组数码管作为东西和南北方向的倒计时显示,主干道直行(绿灯)60秒后,左转(绿灯)40秒;支干道直行(绿灯)45秒后,左转(绿灯)30秒,在每次绿灯变成红灯的转换过程中,要亮黄灯5秒作为过渡。黄灯每秒闪亮一次。
    • 只考虑直行和左转车辆控制信号灯,右转车辆不受信号灯控制, 南北向车辆与东西向车辆交替方向,同方向等待车辆应先方向直行车辆而后放行左转车辆。

    开发平台

    系统开发工具Vivado
    系统开发语言Verilog
    仿真平台杰创EDA远程二代网页版

    时序分析

    首先弄清楚主干路和支干路在一个周期内的变化状况,如图所示:
    在这里插入图片描述
    在这里插入图片描述

    电路原理图

    此电路原理图是在杰创EDA远程二代网页版上进行绘制的,如图所示在这里插入图片描述

    设计思路

    交通信号灯系统控制的原理框图如图所示,将系统分成4个模块:

    1. 主控制器模块
    2. 定时计数器模块
    3. 分频计数器模块
    4. 译码模块

    在这里插入图片描述

    主控制器模块

    主控制器模块原理上是一个状态机,依据要求设计,设计出信号灯点亮规律的状态转换表,如表所示,其中0表示灭,1表示亮,状态表显示了信号灯在运行过程中每个状态应该持续的时间,以及状态之间的转换顺序。依据分频计数器,当分频计数器的时钟达到了对应时间则切换为下一个状态,就可以实现控制信号灯的亮灭。
    在这里插入图片描述

    图中有八个状态,实际编程的时候还应该符加四个状态,用于表示黄灯的闪烁,这四个状态对应黄灯为0,表示黄灯熄灭,1s切换一次状态就可以达到黄灯每秒闪烁一次的效果,符加状态如下表所示:在这里插入图片描述

    分频计数器模块

    整个系统采用的时钟是1khz,原因是为了显示四位数码管上多位数字,而信号灯的状态切换是以秒为单位进行的,因此需要将1khz的时钟信号转化成1hz的,设计分频计数器,每500个周期,分频时钟信号反转一次。

    定时器模块

    状态机上共有8个状态,以这8个状态为周期进行循环,系统执行一个周期共计需要195秒,因此设计定时计数器进行计数,定时到195秒时就归零重新计时。

    译码模块

    在讲译码模块之前,先讲一讲四位数码管如何使用,七段数码管是电子开发过程中常用的输出显示设备,本项目使用的是一个四八位一体,共阴极型七段数码管。右图是本实验用到的四八位一体,共阴极型,左图为单个静态数码管。

    在这里插入图片描述在这里插入图片描述
    由于此设计七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段(a,b,c,d,e,f,g)被输入高电平,则相应的这一段被点亮。反之则不亮。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号(1,2,3,4)端口。四个数码管的a,b,c,d,e,f,g,h,dp都连接在了一起,4个数码管分别由各自的 位选信号来控制,当位选信号为低电平时该位数码管被选择。同一时刻只有一位数码管被选中并点亮,下一时刻则切换到相邻位数码管,但因为切换速度很快,在视觉暂留效应的帮助下,我们看到的就是四位数码管被整体点亮

    为此可以设计出每个数字的译码表,如表所示

    数字十六进制下编码
    07’h7e
    17’h30
    27’h6d
    37’h79
    47‘h33
    57’h5b
    67’h5f
    77’h70
    87’h7f
    97’h7b

    输出数据的时候,在管脚上输出相应的编码,控制时钟以快速频率切换就可以实现显示两位数字效果。默认使用两位数字来显示倒计时,有红灯倒计时大于99秒的情况,也就是超出两位数字所表示的范围,规定超过99秒则不显示

    实现

    主控制模块

    module traffic_light (
        clk,
    	rst_n,
    	count,
    	ew,
    	sn
    );
    input clk,rst_n;
    input [7:0] count;
    output [5:0] ew,sn; 
    reg [5:0] ew,sn;
    reg [3:0] pre_state,next_state;
    reg [12:0] counter=13'b0;
    reg clk_5hz=1'b0;
    
    parameter 
    S0=4'b0000,   //主干路四个状态
    S1=4'b0001,
    S2=4'b0010,
    S3=4'b0011,
    
    S4=4'b0100,   //支干路四个状态
    S5=4'b0101,
    S6=4'b0110,
    S7=4'b0111,
    
    S8=4'b1000,   //主干路直行黄灯
    S9=4'b1001,   //主干路左转黄灯
    S10=4'b1010,  //支干路直行黄灯
    S11=4'b1011;  //支干路左转黄灯
    
    always @ (negedge clk or negedge rst_n) 
    begin
        if(!rst_n)
            pre_state<=S0;
        else
        	pre_state<=next_state;
    end
    
    always @ (negedge clk) begin          //这段代码是用来实现黄灯的闪烁功能
       if(count>=60&&count<65)
            begin
            counter <=counter+1'b1;      
            if (counter == 'd499)begin     //计数,形成0.5秒的时钟
            clk_5hz <= !clk_5hz;
            counter <= 'd0;
            end   
        end 
    
        else if(count>=105&&count<110)
            begin
            counter <=counter+1'b1;
            if (counter == 'd499)begin
            clk_5hz <= !clk_5hz;
            counter <= 'd0;
            end
        end  
    
        else if(count>=155&&count<160)
            begin
            counter <=counter+1'b1;
            if (counter == 'd499)begin
            clk_5hz <= !clk_5hz;
            counter <= 'd0;
            end
        end
    
        else if(count>=190&&count<195)
            begin
            counter <=counter+1'b1;
            if (counter == 'd499)begin
            clk_5hz <= !clk_5hz;
            counter <= 'd0;
            end
        end        
        else     
           counter <='d0;                        
    end
    
    always @ (clk or pre_state) 
    begin
        next_state<=3'bxxx;    
        if(count>=60 && count<65) begin               //主干路直行黄灯
            if(clk_5hz) next_state<=S8;
            else
                next_state <=S1; end              
        else if(count==8'd65)                        //主干路左转绿灯
            next_state<=S2;   
        else if(count>=8'd105 && count<8'd110)begin    //主干路左转黄灯
            if(clk_5hz) next_state <=S9;
            else
                next_state<=S3;end
        else if (count==8'd110)                        //支干路直行绿灯
            next_state<=S4;    
        else if (count>=8'd155 && count<8'd160)begin   //支干路直行黄灯
            if(clk_5hz) next_state <=S10;
            else
                next_state<=S5;end
        else if (count==8'd160)                        //支干路左转绿灯
            next_state<=S6;
        else if (count>=8'd190 && count<8'd195)begin   //支干路左转黄的
            if(clk_5hz) next_state <=S11;   
            else
                next_state<=S7;end 
        else if (count == 0)                      //主干路直行绿灯
            next_state<=S0;                 
        else    next_state <=pre_state; 
    end
    
    always @ (pre_state) 
    begin
        case (pre_state)                            //状态编码
                    
            S0:begin ew<=6'b001100;sn<=6'b001001;end
            
            S1:begin ew<=6'b001010;sn<=6'b001001;end
    
            S2:begin ew<=6'b100001;sn<=6'b001001;end
    
            S3:begin ew<=6'b010001;sn<=6'b001001;end
    
            S4:begin ew<=6'b001001;sn<=6'b001100;end
    
            S5:begin ew<=6'b001001;sn<=6'b001010;end
    
            S6:begin ew<=6'b001001;sn<=6'b100001;end
    
            S7:begin ew<=6'b001001;sn<=6'b010001;end
    
            S8:begin ew<=6'b001000;sn<=6'b001001;end       
    
            S9:begin ew<=6'b000001;sn<=6'b001001;end
    
            S10:begin ew<=6'b001001;sn<=6'b001000;end
    
            S11:begin ew<=6'b001001;sn<=6'b000001;end
    
            default:begin ew<=6'b001100;sn<=6'b001001;end
        endcase
            
    end
    
    endmodule
    

    分频计数器

    module countdiv (
    	clk,
    	rst_n,
    	clk_1hz
    );
    
    input clk,rst_n;
    output clk_1hz;
    reg clk_1hz=1'b0;
    reg [12:0] count_clk=13'b0;
    always @ (negedge clk) begin       //监听时钟下降沿
         count_clk <= count_clk + 1'b1; 
         if(count_clk == 'd499)begin      //当计数器为449时,进行信号翻转   
         clk_1hz <= !clk_1hz;
         count_clk <= 'd0;                //计数器归零
         end
    end
    endmodule
    

    定时计数器

    module counter (
    	clk,
    	rst_n,
    	out,
    	en
    );
    
    input clk,rst_n,en;
    output [7:0] out;
    reg [7:0] out;
    
    always @ (negedge clk or negedge rst_n)   //监听1hz的时钟信号
    begin
        if (!rst_n)                           //初始化为0
            out<=8'd0;
        else if(!en)
            out<=out;
        else if(out==8'd194)                  //当值为194时,下一个                                          
        	out<=8'd0;                        //时钟下降沿到来置为0
        else
        	out<=out+1'b1; 			          //增1计数
    end
        
    endmodule
    

    译码模块

    module tubeControl (
    	clk,          //1khz时钟
        clk_1hz,      //1hz时钟
    	rst_n,        //复位
    	count,        //计数时间
    	out_main,     //主干路a、b、c、d、e、f、g输出
        out_minor,    //支干路a、b、c、d、e、f、g输出
    	sel_main,     //主干路片选信号
        sel_minor    //支干路片选信号
    );
    
    
    input clk,rst_n;
    input clk_1hz;
    input [7:0] count;
    
    output [6:0] out_main;
    output [6:0] out_minor;
    
    output [1:0] sel_main;
    output [1:0] sel_minor;
    
    reg [1:0] sel_main;
    reg [1:0] sel_minor;
    
    reg [6:0] out_main;
    reg [6:0] out_minor;
    
    reg [6:0] num_main;
    reg [6:0] num_minor;
    
    reg [3:0] main_second=4'd10;
    reg [3:0] main_minute=4'd10;
    
    reg [3:0] minor_second=4'd10;
    reg [3:0] minor_minute=4'd10;
    
    reg [3:0] cnt_main;
    reg [3:0] cnt_minor;  
    
    //译码表
    parameter   NUM_0=7'h7e;
    parameter   NUM_1=7'h30;
    parameter   NUM_2=7'h6d;
    parameter   NUM_3=7'h79;
    parameter   NUM_4=7'h33;
    parameter   NUM_5=7'h5b;
    parameter   NUM_6=7'h5f;
    parameter   NUM_7=7'h70;
    parameter   NUM_8=7'h7f ;
    parameter   NUM_9=7'h7b;
    parameter   NUM_10=7'h00;          //这里表示不显示的译码
    
    always @ (negedge clk) 
    begin
        if(!rst_n)
            num_main<='d0;
        else if(count <= 8'd59)     //主干路直行绿灯倒计时
            num_main<=60-count;     
        else if(count<=8'd64)       //主干路直行黄灯倒计时
            num_main<=65-count;
        else if(count<=8'd 104)      //主干路左转绿灯倒计时
            num_main<=105-count;
        else if (count<=8'd109)      //主干路左转黄灯倒计时 	   
            num_main<=110-count; 
        else if(count<=8'd194)       //其他情况下红灯倒计时
            num_main<=195-count;
                            
    end
    
    always @ (negedge clk) 
    begin
        if(!rst_n)
            num_minor<='d0;
        else if(count<=8'd109)        //其他情况下红灯倒计时
            num_minor<=110-count;
        else if(count<=8'd154)        //支干路直行绿灯倒计时
            num_minor<=155-count;    
        else if(count<=8'd159)        //支干路直行黄灯倒计时
            num_minor<=160-count;
        else if(count<=8'd189)       //支干路左转绿灯倒计时
            num_minor<=190-count;
        else if(count<=8'd194)       //支干路左转黄灯倒计时
            num_minor<=195-count;
    end
    
    always @ (num_minor) 
    begin
        if(num_minor==0)begin        //初始化
            minor_second<=10;
            minor_minute<=10;end
        else if(num_minor>99)begin   //倒计时值大于99时,不显示
            minor_second<=10;
            minor_minute<=10;end
        else
            begin
            minor_second<=num_minor%10;     //计算倒计时时间
            minor_minute<=num_minor/10;
            end     
    end
    
    always @ (num_main) begin
        if(num_main==0)begin        //初始化
            main_second<=10;
            main_minute<=10;end
        else if(num_main>99)begin   //倒计时值大于99时,不显示
            main_minute<=10;
            main_second<=10;end
        else
            begin
            main_minute<=num_main/10;
            main_second<=num_main%10;
            end       
    end
    
    
    
    always @ (*) begin
        case(sel_main)        //主干路片选控制
            2'b10:cnt_main <= main_second;
            2'b01:cnt_main <= main_minute; 
       endcase
    end
    
    always @ (*) begin
        case(sel_minor)       //支干路片选控制
            2'b10:cnt_minor <= minor_second;
            2'b01:cnt_minor <= minor_minute; 
       endcase
    end
    
    always @ (*)                //译码
        case (cnt_main) 
            0: out_main=NUM_0;
            1: out_main=NUM_1;
            2: out_main=NUM_2;
            3: out_main=NUM_3;
            4: out_main=NUM_4;
            5: out_main=NUM_5;
            6: out_main=NUM_6;
            7: out_main=NUM_7;
            8: out_main=NUM_8;
            9: out_main=NUM_9;
            10:out_main=NUM_10;    
        endcase      
    
    always @ (*)
        case (cnt_minor) 
            0: out_minor=NUM_0;
            1: out_minor=NUM_1;
            2: out_minor=NUM_2;
            3: out_minor=NUM_3;
            4: out_minor=NUM_4;
            5: out_minor=NUM_5;
            6: out_minor=NUM_6;
            7: out_minor=NUM_7;
            8: out_minor=NUM_8;
            9: out_minor=NUM_9;
            10:out_minor=NUM_10;
        endcase  
    
    always @ (posedge clk,negedge rst_n)    //高频率切换片选管脚
    begin                                   //达到显示两位数效果
        if(!rst_n)  
            sel_main<=2'b10;
        else
            sel_main<={sel_main[0],sel_main[1]};
    end 
    
    always @ (posedge clk,negedge rst_n) 
    begin      
        if(!rst_n)  
            sel_minor<=2'b10;
        else
            sel_minor<={sel_minor[0],sel_minor[1]};
    end
    
    endmodule
    
    
    

    TOP模块

    module top (
    	clk,
    	rst_n,
    	en,
    	ew,
    	sn,
    	out_main,
    	out_minor,
    	sel_main,
    	sel_minor
    );
    input clk,rst_n,en;
    output [5:0] ew,sn;
    wire [7:0] count;
    wire [5:0] ew,sn;
    output out_main;
    output out_minor;
    output [1:0] sel_main;
    output [1:0] sel_minor;
    wire [6:0] out_main;
    wire [6:0] out_minor;
    wire clk_1hz;
    
    countdiv U0(         //分频计数器模块
        .clk(clk),
        .rst_n(rst_n),
        .clk_1hz(clk_1hz));
    
    
    counter U1(          //时钟计数器模块
    	.clk(clk_1hz),
    	.rst_n(rst_n),
    	.out(count),
    	.en(en));
    
    traffic_light U2(    //主控制器模块
    	.clk(clk),
    	.rst_n(rst_n),
    	.count(count),
    	.ew(ew),
    	.sn(sn));
    tubeControl U3(      //数码管译码模块
    	.clk(clk),
        .clk_1hz(clk_1hz),
        .rst_n(rst_n),
        .count(count),
       .out_main(out_main),
        .out_minor(out_minor),
        .sel_main(sel_main),
        .sel_minor(sel_minor));   	
    endmodule
    

    仿真测试文件

    module top_tb;
    reg clk,rst_n,en;
    wire [5:0] ew,sn;
    wire [6:0] out_main;
    wire [6:0] out_minor;
    wire [1:0] sel_main;
    wire [1:0] sel_minor;
    top U1(
    	.clk(clk),
    	.rst_n(rst_n),
    	.en(en),
    	.ew(ew),
    	.sn(sn),
    	.out_main(out_main),
    	.out_minor(out_minor),
    	.sel_main(sel_main),
    	.sel_minor(sel_minor));
    
    initial
    begin
        clk<=1'd0;
        forever #500 clk=~clk;        //仿真一个1khz的时钟信号
    end
    
    initial
    begin
        rst_n=1'b1;                    //初始化参数
        en=1'b0;
        #1 rst_n=1'b0;
        #1 rst_n=1'b1;en=1'b1;
    
    end
    
    endmodule
    

    测试结果

    仿真测试结果

    此测试很重要,如果没有云平台进行测试只能进行仿真,仿真文件如上所示,时间单位为1us,每500us进行时钟信号反转就形成了1khz的时钟信号。
    仿真结果如图所示,宏观上看首先测试信号灯是否显示正确,观察ew(表示主干路方向),sn(表示支干路方向)两个值
    在这里插入图片描述再观察微观测试结果,截取了一个有代表意义的片段60秒至65秒,这段时间主干路直行黄灯正在闪烁,对应ew的值在0a和08之间变换,由状态表知是在S1状态和S8状态之间切换,每1秒切换一次,一次持续0.5秒,实现了黄灯的闪烁。
    在这里插入图片描述

    再来观察数码管的仿真结果,截取了一个有意义的片段60秒到65秒,60秒是状态S0和S1的交界处,容易出错。系统采用的共阴极4位数码管,片选信号0表示有效,1表示无效,所以片选信号1表示十位,片选2表示个位根据译码表知,60秒前是7e 30代表01秒,是直行绿灯最后一秒倒计时;60秒后倒计时是7e 5b代表05秒,表示黄灯5秒倒计时的开始。
    在这里插入图片描述
    195秒时仿真结果,195秒后重新开始循环。
    在这里插入图片描述

    云平台运行结果

    通常情况仿真结果正确就已经完成了,这里提供云平台的运行结果,仅用来观察系统运行结果,

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    观看效果

    视频展示效果
    观看效果

    如果有不清楚的地方欢迎留言评论
    第一次写文章,欢迎大家交流,批评。

    展开全文
  • 代码是基于stm32开发板,利用c语言编程,模拟交通信号灯
  • 这取决于交通信号灯的自动控制系统,本系统使用单片MCS-51系列的单片机,以 AT89S52作为核心部件,设计了一个交通信号灯控制器。实现了能根据实际车流量通过8051芯片的P3口设置红、绿灯燃亮时间的功能;红绿灯循环...
  • 整理的实训报告插图,供大家参考。
  • 交通灯控制器电路是由计数电路,脉冲信号源,组合逻辑门控制电路,译码器以及特殊情况下需要的手动电路组成的。在不同工作状态下,计数器对单位时钟脉冲进行计数,其输出不仅控制着交通灯的变化,而且控制着下一状态...
  • 2) 主干道直行与左拐分开,同时右拐按照现行交通规则可以直接靠右拐弯 控制主干道东西、南北方向直行可绿灯通行35秒,左拐绿灯通行15秒,红灯75秒,红绿灯交替时黄灯闪烁5秒 3) 人行道与主干道分开,有单独的通行...
  • EDA软件Quartus II的基本 操作方法。熟悉MSI组合逻辑电路和时序逻辑路的逻辑功能及使用方法 。掌握MSI组合逻辑器件和时序逻辑器件组成数字小系统的设计和测试方法。学会使用Quartus II设计、仿真和调试数字逻辑电路

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,907
精华内容 1,162
关键字:

交通信号灯控制电路图