精华内容
下载资源
问答
  • 用PROTEL画出交通信号灯原理图,实现红绿黄灯的交替变化
  • 研究目的: 模拟交通灯控制器就是使用单片机来控制一些LED和数码管,...利用所学知识设计一款基于单片机的交通信号灯的控制系统。主要功能如下:东西向与南北向信号灯定时20秒交换一次、每次交换时点亮黄灯5s提醒行人。
  • 编写程序控制8255可编程控制接口芯片,使实验台上的红、绿、黄发光二极管按照十字路口交通信号灯 的变化规律,同时用两组2位数码管表示南北、东西方向交通信号灯的时间。
  • 在如今这个经济飞速发展的世界,交通已...西门子可编程控制器指令丰富,可以接各种输出、输入扩充设备,有丰富的特殊扩展设备,其中的模拟输入设备和通信设备更是符合交通灯控制系统的要求与特点,能够方便地联网通信。
  • 交通信号灯电路

    2015-05-04 22:27:32
    交通信号灯控制系统 protues文件 电路
  • 【摘要】介绍了一种基于电子工作平台的软件(Multisim)设计城市交通信号灯控制系统的方法,先从理论上进行分析、 设计电路,再通过Multisim 测试性能,以达到实际应用的需要。 【关键字】Multisim;交通信号灯;...
  • 十字路口交通信号灯控制系统

    千次阅读 多人点赞 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秒后重新开始循环。
    在这里插入图片描述

    云平台运行结果

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

    在这里插入图片描述

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

    观看效果

    视频展示效果
    观看效果

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

    展开全文
  • 资料包:数电课程设计报告+原理图+仿真文件(仿真图)+电路各模块原理分析
  • 微机程序设计应用:交通信号灯控制系统

    万次阅读 多人点赞 2015-02-14 19:43:16
    设计任务 交通信号灯控制系统:要求能显示剩余时间和控制红、黄、绿三色灯的显示。 2、总体方案设计与方案论证(1) 总体方案设计 设计路口交通灯控制系统,使用LED显示单元的两组发光二极管(红黄绿)分别模拟十字...

    1、设计任务

    	交通信号灯控制系统:要求能显示剩余时间和控制红、黄、绿三色灯的显示。
    

    2、总体方案设计与方案论证

    (1) 总体方案设计

    	设计路口交通灯控制系统,使用LED显示单元的两组发光二极管(红黄绿)分别模拟十字路口的两组交通灯。
    
    a、南北路口的绿灯、东西路口的红灯同时亮20秒。数码管20秒倒记时显示。
    b、南北路口的黄灯亮5秒,同时东西路口的红灯继续亮。数码管5秒倒记时显示。
    c、南北路口的红灯、东西路口的绿灯同时亮20秒。
    d、南北路口的红灯继续亮、同时东西路口的黄灯亮5秒。
    e、转(1)重复。(并能在此基础添加一些功能,如紧急开关按下,时间暂停,两组路口都显示红灯)
    

    (2) 方案论证

    	将交通灯的显示规律进行观察,发现有“红绿、红黄、绿红、黄红”四种状态,将交通灯的显示抽象为这四种状态的循环切换,如需产生不同的时间,只需将每种状态直接加入一个延时程序即可,为了更加准确的记录时间和显示剩余时间,我们觉得采用8253来控制一秒,循环执行十次就是十秒,二十次就是二十秒。这样便可以完成任务。
    	由上论证可知,方案可行,可以进行具体设计和操作。
    

    3、总框图及总体软件设计说明

    (1) 总框图

    (2) 总体软件设计说明

    a、通过8253计数,每1s输出一个脉冲,刷新10次,持续十秒钟,重复减一直至零为止;
    b、8255的C口低四位作为输入输出端口,C口高四位控制某个数码管显示,B口控制数码管显示值,A口控制交通灯;
    c、交替选中数码管的高低位码,计数的同时数码管显示数字,并且交通灯亮;
    d、8253锁存并读数进行;
    e、计数至零时状态转换,数码管重新显示下一状态的数字,交通灯转换至下一状态;       
    f、重复上述过程,使交通灯的四个状态不断循环秒钟;
    

    4、接口电路逻辑图及硬件设计说明,或系统资源使用说明

    (1) 接口电路逻辑图

    (2) 硬件设计说明

    8253芯片说明

    	8253有3个独立的16位计数器,有6种工作方式。
    	利用8253的减法计数器原理,每送来一个脉冲就减1,减到0产生一个定时信号输出。
    	因为计数频率为2MHz,计数器的最大数值为65536,所以最大的定时时间为0.5us*65536=32.768ms,达不到1S的要求,因此需要用两个计数器级联来解决问题。
    	将2MHz的的时钟信号直接加在CLK0输入端,并让计数器0工作在方式2,选择计数初始值为5000,则从out0端可得到2MHz/5000=400Hz的脉冲,周期为0.25ms。再将该信号连到CLK1输入端,并使计数器1工作在方式2下,为了使out1输出周期为20s的波形,所以取时间常数为400.然后由out1输出到8255的PC0上,通过上升下降沿来判断1s是否结束。
    

    8255芯片说明

    	 8255A可为外设提供3个8位I/O端口,即A口,B口,C口,每个端口又可分两组编程,能工作于3种操作模式。
    	该实验使用8255A来作为输入输出的控制操作,将C口分为上下口,分别由A,B口控制。PC0用来接收8253的out1输出的信号,通过沿来判断是否完成1S计时。PC1用来判断有无紧急键按下,若为高电平则是紧急状态,使四个路口的红灯都亮。
    	C口的高四位用来控制数码管的显示位数,测试知数码管为低电平有效,当状态控制字分别为1101,1110时对应的第二位和第一位亮。然后进行循环。
    	A口作为输出端连接到发光二极管上,通过接收状态控制字来显示对应的灯。
    	B口也是作为输出端按顺序连接到数码管的LA,B,C,D,E,F,G,H上。
    

    5、局部程序框图及其设计说明

        首先,利用8253初始化,使其产生周期为一秒的脉冲,将主程序中规定的循环次数(即、秒数)在子程序中控制产生脉冲的个数,一个脉冲即为一秒。
        判断是否为一个脉冲,采用上升沿判断,出现一个上升沿即产生一个脉冲,循环次数减一,直到有n个脉冲,即已经过了n秒。
        紧急键的按下在延时过程中进行判断,如果按下,则循环判断紧急键的状态,并一直输出紧急状态的情况。当紧急键放开,则继续紧急前的状态继续延时。
    

    	延时的剩余次数即为剩余时间,因此,只要将CX的值显示在数码管处即可达成显示时间的目的。
    	CX中存有两位数,此时,将CX的值处以10,在AH和AL中分别得到余数(个位数字)和商值(十位数字)。
    	让两位数字同时显示,则需要将两位数字分别在数码管的高低两位显示出来,并且不断循环显示,此时显示频率很快,肉眼看上去就是两位同时亮的状态。
    

    6、源程序清单(详细注释)

    CODE SEGMENT
     ASSUME CS:CODE
    START:MOV AX,CS
          MOV DS,AX
          MOV DX,203H			;8255初始化,连接端口IOY0
          MOV AL,10000001B		;A口输出接LED,B口输出接数码管,C0~C3输入,C4~C7输出
          OUT DX,AL
    	  CALL INITIAL_8253		;8253初始化
    A1:   MOV DX,200h   		;8255的A口接
          MOV AL,01101111B  	;东西红,南北绿
          OUT DX,AL         	;将灯状态传送给LED显示
          MOV CX,20       		;计时20秒
          CALL action
          MOV DX,200h   		;东西红,南北黄     
          MOV AL,01111011B
          OUT DX,AL
          MOV CX,5         	;计时5秒
          CALL action
          MOV DX,200h			;东西绿,南北红   
          MOV AL,10011111B
          OUT DX,AL
          MOV CX,20     		;计时20秒
          CALL action  
          MOV DX,200h   		;东西黄,南北红    
          MOV AL,10110111B
          OUT DX,AL
          MOV CX,5        		;计时5秒
          CALL action
          JMP A1            	;循环到状态A1,即东西红,南北绿
    EXIT: MOV AH,4CH
          INT 21H
          
    
    action PROC
    	  PUSH AX
          PUSH DX
          PUSH CX
          mov ah,al					;保存紧急状态前的路灯的状态	
    LOOP2:
    	  mov dx,202h
          in al,dx
          test al,02h				;判断c口倒数第二位是否有状态
          JnZ L1 					;无紧急状态         
        						;有紧急键则转到紧急键处理
          CALL DISP				;显示当前时间  
          mov dx,200h
    	  mov AL,00111111B		;路口都显示红灯
    	  out dx,al
          JMP LOOP2
    L1:	  mov dx,200h
          mov al,ah
    	  out dx,al
          CALL DISP
    L2:   MOV DX,202h				;检测1s是否计完
    wait1:
    	  CALL DISP
    	  IN AL,DX
          TEST AL,01H
          JZ wait1                	;若1s没计数完,继续    
    wait2:
    	  CALL DISP
    	  IN AL,DX
          TEST AL,01H
          JNZ wait2   
          LOOP LOOP2             ;20s或5s计数完全?若没计数完,继续
          POP CX
          POP DX
          POP AX
          RET 
    action ENDP
    
    INITIAL_8253  PROC          ;8253初始化,1s
          PUSH AX
          PUSH DX
    	  mov al,00110101B
    	  mov dx,20Bh
    	  out dx,al
    	  mov al,00h
    	  mov dx,208h
    	  out dx,al
    	  mov al,50h
    	  mov dx,208h
    	  out dx,al
    	  mov al,01110101B
    	  mov dx,20Bh
    	  out dx,al
    	  mov al,00h
    	  mov dx,209h
    	  out dx,al
    	  mov al,04h
    	  mov dx,209h
    	  out dx,al
          POP DX
          POP AX
          RET
    INITIAL_8253 ENDP
    
    time1 PROC near
            lea di,time
            lea si,x1
            MOV CX,2
            MOV AL,11101111b  		;AL=DFH 1101 1111  控制 Y1~Y5 循环点亮
            MOV [si],AL      
    l31:	    mov dx,202h
     		mov al,0ffh
     		out dx,al
            MOV DX,201H	   		;B口输出段码
       	    MOV AL,[DI]
    	    OUT DX,AL	 
    	    INC DI		
    	    MOV AL,[si]
            MOV DX,202H    		;c口输出
    	    OUT DX,AL
    	    ROl byte ptr[si],1			;循环左移一位   
    	    loop l31
    	    RET
    time1 ENDP
    
    DISP PROC                  	 	;数码管显示
    	   	PUSH AX
    		PUSH BX
    		PUSH DX
    		PUSH CX		
    		lea di,time
    		MOV AX,CX
    		MOV CL,0AH  			;将CL中16进制数转化为十进制数
    		DIV CL
    		MOV BX,OFFSET table1
    		XLAT
    		mov [di],al
    		inc di
    		mov al,ah
    		MOV BX,OFFSET table1
    		XLAT
    		mov [di],al			
    		call time1		
    		POP CX
    		POP DX
    		POP BX
    		POP AX
    		RET
    DISP ENDP
    
    table1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH  
    time db 2 dup(?)
    x1 db ?
    
    code ends
    	end start
    

    7、系统功能与操作说明

    a、南北路口的绿灯、东西路口的红灯同时亮20秒。数码管20秒倒记时显示。
    b、南北路口的黄灯亮5秒,同时东西路口的红灯继续亮。数码管5秒倒记时显示。
    c、南北路口的红灯、东西路口的绿灯同时亮20秒。
    d、南北路口的红灯继续亮、同时东西路口的黄灯亮5秒。
    e、转a循环
    f、期间,紧急开关按下,时间暂停,两组路口都显示红灯;紧急开关拨起,继续暂停前的状态继续
    

    8、总结

    	这个设计是利用四种状态来表示两个路口的红绿灯状态,使用这样化整为零的方法,再利用8255对四种状态进行切换控制,使每种状态之间利用一个延时子程序先进行大概的延时,再利用8253进行对一秒钟的准确延时,利用循环的方式,循环十次为十秒,则完成了对每种信号灯状态的准确定时;为了解决AB口都被占用,而还需要输出口进行对数码管高低位选择的控制,则想到了使用C口的高四位进行该项操作,至于之后的紧急状态的设置,则靠C口的低四位进行输入控制,只需判断相应位置的状态便可以进行这一类的操作。
    	整个实验最困难的地方就是最开始对四种状态的分析,世界上的任何事物总可以使用各种状态来表示,事物的变换规律也可以使用状态之间的转化来体现出来。我们可以将身边的事物转化为某种逻辑关系,这样就能实现各种功能的设备了。
    
    展开全文
  • PAGEPAGE 3课程设计报告课程名称: FPGA现代数字系统设计设计名称: 交通信号灯控制器姓 名: * * *学 号: 2010000379专 业: 通 信指导教师: * * *起止日期: 2010.12.25 - 2011.1.9课 程 设 计 任 务 书设计名称...

    PAGE

    PAGE 3

    课程设计报告

    课程名称: FPGA现代数字系统设计

    设计名称: 交通信号灯控制器

    姓 名: * * *

    学 号: 2010000379

    专 业: 通 信

    指导教师: * * *

    起止日期: 2010.12.25 - 2011.1.9

    课 程 设 计 任 务 书

    设计名称:

    设计要求:

    (1) 设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

    (2) 红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号。

    (3) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

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

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

    (6)发生紧急事件,如救护车、警车、抢险车通过,可以手动控制四个方向的红灯全亮。

    设计目的和意义

    通过应用Verilog语言在QuartusⅡ软件平台上设计交通信号灯控制器,并借助硬件来测试仿真效果。通过课程设计,熟悉硬件编程语言的应用,特别是有限状态机的灵活使用,为以后进一步的学习实践打下良好的基础。

    设计原理

    (1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。

    (2) 选择1HZ时钟脉冲作为系统时钟。

    (3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。

    (4) 交通灯状态变化如表1及图1所示:

    表1:交通灯状态图

    图1:交通灯状态图

    (5) 交通灯设计输入信号4个:CLK(时钟),EN(使能),EMERGENCY(紧急),BCHECK(检测) ;输出信号4个:LAMPA(主干道信号灯),LAMPB(支干道信号灯),ACOUNT(主干道计数器),BCOUNT(支干道计数器)。交通灯控制原理如图2所示。

    图2:交通灯原理图

    详细设计步骤

    (1) 确定4个输入信号与4个输出信号,具体见图2;

    (2) 将50MHZ时钟分频为1MHZ;

    (3) 设计红黄绿3中信号灯切换的时间及顺序;

    (4) 设计支路检测状态下的信号灯切换;

    (5) 设计紧急(EMERGENCY)状态下信号灯的切换;

    (6) 程序使用3always块[1],详细代码如下:

    module traffic_control(CLK,EN,EMERGENCY,BCHECK,LAMPA,LAMPB,ACOUNT,BCOUNT);

    output[2:0] ACOUNT,BCOUNT;

    output[2:0] LAMPA,LAMPB;

    reg clk1;

    input CLK,EN,EMERGENCY,BCHECK;

    reg[2:0] numa,numb;

    reg tempa,tempb;

    reg[25:0]count;

    reg[2:0] counta,countb;

    reg[2:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;

    reg[2:0] LAMPA,LAMPB;

    /* 信号定义与说明:

    CLK: 为同步时钟;

    EN: 使能信号,为1 的话,则控制器开始工作;

    LAMPA: 控制A 方向四盏灯的亮灭;其中,LAMPA0~LAMPA2,分别控制A 方向的绿灯、黄灯和红灯;

    LAMPB: 控制B 方向四盏灯的亮灭;其中,LAMPB0 ~ LAMPB2,分别控制B 方向的绿灯、黄灯和红灯;

    ACOUNT: 用于A 方向灯的时间显示,8 位

    BCOUNT: 用于B 方向灯的时间显示,8 位*/

    always @(posedge CLK ) //将50MHZ时钟分频为1MHZ

    begin

    if(count=

    begin

    count<=0;

    clk1<=~clk1;

    end

    else

    count<=count+1;

    end

    assign ACOUNT=numa;

    assign BCOUNT=numb;

    always @(EN )

    if(!EN)

    begin

    展开全文
  • 交通信号灯控制系统设计 作为一个硬件程序设计民工,最近一直在学习python,写个爬虫,排个序,再画个界面,其实还是挺好玩的。然而这不是我的主业啊!!!-_-||| 下学期开学就要找工作了,明天刚好...

    作为一个硬件程序设计民工,最近一直在学习python,写个爬虫,排个序,再画个界面,其实还是挺好玩的。然而这不是我的主业啊!!!-_-|||

    下学期开学就要找工作了,明天刚好是新的一个月,还是滚回去调我的FPGA吧。

    今天先更新一个很小很小的例子作为开端,这是前几天xxx给我出的一道很随意的题目,主要是看面对一个项目,如何进行需求分析,模块功能划分以及仿真验证,当然还有如何写文档。

     

    一、需求分析

    设计一个十字路口交通等控制系统,其要求如下:

    (1)东西(用A表示)、南北(用B表示)方向均有红灯、绿灯、黄灯指示,东西向持续时间暂定为50s、5s和45s(对应南北向持续时间为40s、5s和55s),要求可以更改该时间。交通灯正常运行的切换示意图如图1.1所示。

    图1.1 交通控制系统正常运行切换示意图

    (2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。

    (3)当任何一个方向出现特殊情况时,系统可由交警手动控制进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北向所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。

    二、原理分析

    本系统以秒为时间单位运行,其核心工作过程可用状态机进行描述:

    EMRG:紧急制动状态,东西(A)方向红灯亮,南北(B)方向红灯亮,当紧急制动信号(hold=’0’)时进入这种状态;

    AgBr:东西(A)方向绿灯亮,南北(B)方向红灯亮,此状态持续50秒的时间;

    AyBr:东西(A)方向黄灯亮,南北(B)方向红灯亮,此状态持续5秒的时间;

    ArBg:东西(A)方向红灯亮,南北(B)方向绿灯亮,此状态持续40秒的时间;

    ArBy:东西(A)方向红灯亮,南北(B)方向黄灯亮,此状态持续5秒的时间。

    图2.1 交通控制系统状态转移图

    当紧急制动信号无效(hold=’1’)时,状态机按照AgBr->AyBr->ArBg->ArBy->AgBr循环;当紧急制动信号有效(hold=’0’) 时,状态机进入EMRG,两个方向红灯全亮,计数器停止计数;当紧急制动信号再恢复无效时,状态机会回到原来的状态继续执行。

    三、系统框架

    如图3.1所示,本系统主要有分频器、控制器、计数器和数码管译码器组成。

    图3.1交通信号灯控制系统原理图

    分频器将系统时钟分频成1Hz时钟信号,将其输出到信号灯控制器和倒计时计数器模块;控制器实现100s的计数(该计数值为AgBr,AyBr,ArBg,ArBy四个状态的时间总和,可由用户自行修改),100s是交通信号控制系统完成一次大循环所需的时间,在该时间内控制系统的状态转移以及AB两路信号的输出;倒计时模块实现50s、45s和5s的倒计时,该计数值可由用户自行修改;数码管译码模块负责将一位十进制数转换成对应的数码管段码值。

    四、模块设计

    1、分频器设计

    负责将输入的系统时钟(通常以MHz为量级)分频成1Hz时钟信号,供后级模块使用。

    其接口信号如图4.1所示,clk为系统时钟信号;rst_n为系统复位信号,低电平有效;clk_1Hz为输出信号。除此之外,该模块向上一级模块提供一个参数接口,用于配置当前系统时钟。

    图4.1 分频器模块接口

    2、控制器设计

    负责在时钟信号的控制下,交替控制两路红绿黄信号的输出;当出现紧急状态时,可手动控制两路的信号灯输出红色;当紧急状态解除后,恢复到进入紧急状态之前的状态。

    各个状态之间的切换使用状态机来实现,状态机采用三段式独热编码,其中5'b00001表示EMRG、5'b00010表示AgBr、5'b00100表示AyBr、5'b01000表示ArBg、5'b10000表示ArBy。

    其接口信号如图4.2所示,clk为1Hz时钟信号;rst_n为系统复位信号,低电平有效;hold_n为紧急制动输入,低电平有效;red_a,green_a,yellow_a, red_b,green_b,yellow_b分别为AB两路的红绿黄交通信号灯输出;state表示当前交通信号灯的状态,该信号输出到倒计时模块。

    图4.2 控制器模块接口

    3、计数器设计

    负责在时钟信号的控制下,对每一个state进行倒计时,倒计时的初值由用户设置;并将该倒计时按十位和个位分别输出。

    其接口信号如图4.3所示,clk为1Hz时钟信号;rst_n为系统复位信号,低电平有效;state为控制器输出,每当state改变时,计数器重载计数初值并开始倒计时;count_h,count_l分别为倒计时数值的十位和个位,输出到数码管译码模块。 

    图4.3 计数器模块接口

    4、数码管译码器设计

    将一位十进制数转换为数码管对应的段码值,数码管采用共阳极接法。

    其接口信号如图4.4所示,data为一位十进制数输入;seg为8比特段码值输出,信号按照从低到高的顺序依次为数码管的dp、seg_a、seg_b、seg_c、seg_d、seg_e、seg_f、seg_g。

      图4.4 数码管译码模块接口

    五、验证项

    由于该设计顶层除时钟和复位信号外,仅有一个紧急制动(hold)信号,因此只需要对该信号进行验证即可。

    方法:产生一个随机的时间(时间值为5000000 ± 500ns),系统运行到该时间以后,使hold_n拉低并保持10000 ± 1000ns,观察此时系统的运行状态;重复5次。

    六、仿真结果

    1、分频器仿真结果

    图6.1分频器仿真结果

    在仿真环境下使用的分频系数是100。

    2、控制器仿真结果

    如图6.2所示,当系统复位或初始化时,控制器会短暂的进入一个紧急状态,1s以后开始正常工作。

     

    图6.2 复位之后仿真结果

    系统正常运行仿真结果如图6.3所示,A路绿灯持续50s后进入黄灯状态,此时B路一直处于红灯状态;B路绿灯持续40s后进入黄灯状态,此时A路一直处于红灯状态。

     

    图6.3 正常运行仿真结果

    如图6.4所示,当hold按下时,系统进入紧急制动状态。此时AB两路均亮红灯,倒计时暂停;当hold释放时,系统恢复到进入紧急状态之前的状态,倒计时继续。

     

    图6.4 紧急制动状态仿真

    3、计数器仿真结果

    系统正常运行时计数器各信号如图6.5所示,此时A路绿灯时间为50s,黄灯时间为5s,红灯时间45秒;B路绿灯时间为40s,黄灯时间为5s,红灯时间55秒。

     

    图6.5 正常运行仿真结果

    当出现紧急状态时,两路均停止计时;退出紧急状态后恢复计时。

     

    图6.6 紧急状态仿真结果

    4、数码管译码仿真结果

    数码管采用共阳极接法:

     

    图6.7 数码管译码仿真结果

     

    以下是控制器的部分代码:

      1 //==================================================================================================
      2 //  Filename      : control.v
      3 //  Created On    : 2016-06-19 10:21:38
      4 //  Last Modified : 2016-06-22 20:15:01
      5 //  Revision      : 
      6 //  Author        : christ_song
      7 //  Company       : Xidian ISN
      8 //  Email         : christsong0127@gmail.com
      9 //
     10 //  Description   : 控制两路红绿灯的状态切换
     11 //                  hold信号表示紧急制动
     12 //
     13 //==================================================================================================
     14 `include "define.v"
     15 
     16 module CONTROL(
     17     input clk,
     18     input rst_n,
     19     input hold_n,
     20     output reg red_a,
     21     output reg green_a,
     22     output reg yellow_a,
     23     output reg red_b,
     24     output reg green_b,
     25     output reg yellow_b,
     26     //与倒计时模块的接口
     27     output reg [4:0] state
     28     );
     29 
     30     // localparam EMRG = 5'b00001;
     31     // localparam AgBr = 5'b00010;
     32     // localparam AyBr = 5'b00100;
     33     // localparam ArBg = 5'b01000;
     34     // localparam ArBy = 5'b10000;
     35     localparam TimeRound = `AgBr_time + `AyBr_time + `ArBg_time + `ArBy_time + 8'd3;
     36 
     37     reg [4:0] next_state;
     38     reg [7:0] time_cnt;
     39     always @(posedge clk or negedge rst_n)
     40         if (!rst_n) 
     41             time_cnt <=#1 8'b0;
     42         else if(!hold_n)
     43             time_cnt <=#1 time_cnt;
     44         else if(time_cnt >= TimeRound)
     45             time_cnt <=#1 8'b0;
     46         else 
     47             time_cnt <=#1 time_cnt + 1'b1;
     48             
     49     always @(posedge clk or negedge rst_n)
     50         if (!rst_n)
     51             state <=#1 `EMRG;
     52         else 
     53             state <=#1 next_state;
     54     always @(*)
     55         case(state)
     56             `EMRG:
     57                 if(!hold_n)
     58                     next_state = `EMRG;
     59                 else if(time_cnt < `AgBr_time)
     60                     next_state = `AgBr;
     61                 else if(time_cnt < `AgBr_time + `AyBr_time + 8'd1)
     62                     next_state = `AyBr;
     63                 else if(time_cnt < `AgBr_time + `AyBr_time + `ArBg_time + 8'd2)
     64                     next_state = `ArBg;
     65                 else
     66                     next_state = `ArBy;        
     67             `AgBr:
     68                 if(!hold_n)
     69                     next_state = `EMRG;
     70                 else if(time_cnt < `AgBr_time)
     71                     next_state = `AgBr;
     72                 else
     73                     next_state = `AyBr;
     74             `AyBr:
     75                 if(!hold_n)
     76                     next_state = `EMRG;
     77                 else if(time_cnt < `AgBr_time + `AyBr_time + 8'd1)
     78                     next_state = `AyBr;
     79                 else
     80                     next_state = `ArBg;                    
     81             `ArBg:
     82                 if(!hold_n)
     83                     next_state = `EMRG;
     84                 else if(time_cnt < `AgBr_time + `AyBr_time + `ArBg_time + 8'd2)
     85                     next_state = `ArBg;
     86                 else
     87                     next_state = `ArBy;
     88             `ArBy:
     89                 if(!hold_n)
     90                     next_state = `EMRG;
     91                 else if(time_cnt < TimeRound)
     92                     next_state = `ArBy;
     93                 else
     94                     next_state = `AgBr;
     95             default:
     96                 next_state = `EMRG;
     97         endcase
     98     always @(posedge clk or negedge rst_n)
     99         if (!rst_n) begin
    100             {red_a, green_a, yellow_a} <=#1 3'b100;
    101             {red_b, green_b, yellow_b} <=#1 3'b100;
    102             end
    103         else
    104             case(state)
    105                 `EMRG:
    106                     begin
    107                         {red_a, green_a, yellow_a} <=#1 3'b100;
    108                         {red_b, green_b, yellow_b} <=#1 3'b100;
    109                     end
    110                 `AgBr:
    111                     begin
    112                         {red_a, green_a, yellow_a} <=#1 3'b010;
    113                         {red_b, green_b, yellow_b} <=#1 3'b100;
    114                     end
    115                 `AyBr:
    116                     begin
    117                         {red_a, green_a, yellow_a} <=#1 3'b001;
    118                         {red_b, green_b, yellow_b} <=#1 3'b100;
    119                     end
    120                 `ArBg:
    121                     begin
    122                         {red_a, green_a, yellow_a} <=#1 3'b100;
    123                         {red_b, green_b, yellow_b} <=#1 3'b010;
    124                     end
    125                 `ArBy:
    126                     begin
    127                         {red_a, green_a, yellow_a} <=#1 3'b100;
    128                         {red_b, green_b, yellow_b} <=#1 3'b001;
    129                     end
    130             endcase
    131 
    132 endmodule

    仿真代码:

     1 //==================================================================================================
     2 //  Filename      : TB.v
     3 //  Created On    : 2016-06-19 10:05:43
     4 //  Last Modified : 2016-06-21 21:03:59
     5 //  Revision      : 
     6 //  Author        : christ_song
     7 //  Company       : Xidian ISN
     8 //  Email         : christsong0127@gmail.com
     9 //
    10 //  Description   : Testbench for Urban Traffic Control system
    11 //
    12 //
    13 //==================================================================================================
    14 `timescale 1ns/1ps
    15 
    16 module TB;
    17 
    18     reg clk;
    19     reg rst_n;
    20     reg        hold_n;
    21     wire       red_a;
    22     wire       green_a;
    23     wire       yellow_a;
    24     wire       red_b;
    25     wire       green_b;
    26     wire       yellow_b;
    27     wire [7:0] A_seg_l;
    28     wire [7:0] A_seg_h;
    29     wire [7:0] B_seg_l;
    30     wire [7:0] B_seg_h;
    31 
    32     UTC_top #(100) U_UTC_top
    33     (
    34         .clk(clk),
    35         .rst_n(rst_n),
    36         .hold_n(hold_n),
    37         .red_a(red_a),
    38         .green_a(green_a),
    39         .yellow_a(yellow_a),
    40         .red_b(red_b),
    41         .green_b(green_b),
    42         .yellow_b(yellow_b),
    43         .A_seg_l(A_seg_l),
    44         .A_seg_h(A_seg_h),
    45         .B_seg_l(B_seg_l),
    46         .B_seg_h(B_seg_h)
    47     );
    48 
    49     initial begin
    50         clk = 0;
    51         rst_n = 1;
    52         hold_n = 1;
    53         #30
    54         sys_rst(100);
    55         repeat(5) hold;
    56         #10000;
    57         $stop;
    58     end
    59 
    60     always #5 clk = ~clk;
    61 
    62     task sys_rst;
    63         input  [10:0] rst_time;   //调用task的时候,将参数赋值给rst_time
    64         begin
    65             rst_n = 0;
    66             #rst_time;
    67             rst_n = 1;
    68         end
    69     endtask
    70 
    71     task hold;
    72         integer i,hold_time;
    73         begin
    74             i = 5000000 + $random % 500;
    75             hold_time = 10000 + $random % 1000;
    76             #i 
    77                 hold_n = 0;
    78             #hold_time;
    79             hold_n = 1;
    80         end
    81     endtask
    82 
    83 endmodule

     

    posted on 2016-06-30 16:00 christ0127 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/christsong/p/5629643.html

    展开全文
  • 交通信号灯是指挥行人和各种车辆的安全运行的重要工具,对于有主支干道之分的十字路口,要求主干道通行的时间比支干道长。交通灯控制系统主要是实现城市交叉路口红绿灯的控制。在现代化的大城市中,十字交叉路口...
  • 交通灯是城市交通中的重要指挥系统,它与人们日常生活密切相关。...在这次交通信号灯模拟控制的课程设计中,我们小组运用汇编语言及接口技术来模拟十字路口的交通灯,对其进行控制并实现一定的功能。
  • 太阳能LED交通信号灯由光伏极板、充放电控制器、蓄电池、LED交通信号灯系统构成。系统框图如1所示。 1 系统框图 其中,光伏极板是用来将太阳能转换成电能,为系统供电。 充放电控制器是将太阳能产生的电...
  • 目录 TOC \o "1-3" \h \z \u 一 设计背景 2 二任务和要求 2 三总体设计方案 3 1.状态设置 3 2.系统框图 3 a.系统总框图 3 b.系统状态转换框图 4 四单元电路...流量控制电路 7 五总电路原理图 8 六总电路图 9 七原件清单
  • 交通信号灯控制方式很多。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒...
  • 交通信号灯报告内不含有程序原理图时钟模块,原理图是用proteus生成
  • 第五次按“设置键”时,系统退出设置状态,回到交通信号灯状态,并且东西向先通行,南北向后通行 软件设计:采用Keil C开发环境与语言 1)软件模块:根据上述工作流程和设计要求,软件设计可以分为以下几个功能...
  • 微机原理与接口交通信号控制器设计,包含电路与汇编源码
  • 基于CC2530单片机的交通信号灯系统
  • 交通信号灯 verilog

    2011-05-06 00:02:58
    用verilog实现交通信号灯,可以红黄绿灯转换,可以计时,可以清零 verilog
  • 里面包好开题报告,任务书,制作详解,芯片资料,元件清单,论文,答辩问题,交通灯程序设计,原理图,PCB图,所需的任何软件都有。
  • 交通信号灯的C程序

    2013-12-03 21:48:08
    利用Keil软件进行C编程,加载,编译,完成对交通信号灯控制
  • 单片机应用技术C语言任务4 交通信号灯控制.PPT任务4 交通信号灯控制,4.1 工作任务,4.1.1 硬件电路及任务要求,4.1.2 任务分析,4.1.3 控制程序,4.1.4 任务结论,4.2 相关知识链接,4.2.1 MCS-51单片机的中断系统,4.2.2 ...
  • 这个也是我们小学期做的,还算可以吧,希望大家有用。
  • 基于51单片机的交通灯原理图加代码

    万次阅读 多人点赞 2019-07-21 17:59:54
    花了一个星期制作的交通灯仿真程序+原理图,通过数码管显示路口的时间,通过led显示红绿灯。@TOC ![#include<reg51.H>      // 对单片机的口进行了定义 #define uint unsigned int #...
  • 原理图: 仿真图 时钟电路模块 时钟电路模块 时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。时钟电路用于产生单片机工作所需的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身...
  • 本题模拟场景为十字路口交通信号灯及路口公共时钟,通过Proteus8仿真平台进行模拟。南北路口方向和东西路口方向均设有红、黄、绿三种状态灯以及数字倒计时显示,同时设有路口公共时钟模拟显示当前时间,提供时钟控制...
  • 阿波罗——交通信号灯感知

    千次阅读 2018-07-26 15:07:36
    交通信号灯感知 本文档详细的介绍了Apollo2.0中交通信号感知模块的工作原理。 简介 交通信号灯感知模块通过使用摄像头提供精确全面的路面交通信号灯状态。 通常情况下,交通信号灯有3种状态: 红 黄 绿 然而...
  • 给出了交通灯软硬件设计,综合利用了单片机的定时器功能和多种中断功能,有电路原理图和完整的程序

空空如也

空空如也

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

交通信号灯控制原理图