精华内容
下载资源
问答
  • 交通信号灯控制系统

    2012-09-14 10:57:05
    主要介绍了微机原理与接口技术的应用之一——交通信号灯控制系统的设计与实现,主要是模拟十字路口的红绿灯,还介绍了交通灯控制器的原理以及电路接线,其中主要用到的芯片有可编程并行通信接口芯片8255A。...
  • 【摘要】介绍了一种基于电子工作平台的软件(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秒后重新开始循环。
    在这里插入图片描述

    云平台运行结果

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

    在这里插入图片描述

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

    观看效果

    视频展示效果
    观看效果

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

    展开全文
  • 研究目的: 模拟交通灯控制器就是使用单片机来控制一些LED和数码管,...利用所学知识设计一款基于单片机的交通信号灯控制系统。主要功能如下:东西向与南北向信号灯定时20秒交换一次、每次交换时点亮黄灯5s提醒行人。
  • 微机程序设计应用:交通信号灯控制系统

    万次阅读 多人点赞 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口的低四位进行输入控制,只需判断相应位置的状态便可以进行这一类的操作。
    	整个实验最困难的地方就是最开始对四种状态的分析,世界上的任何事物总可以使用各种状态来表示,事物的变换规律也可以使用状态之间的转化来体现出来。我们可以将身边的事物转化为某种逻辑关系,这样就能实现各种功能的设备了。
    
    展开全文
  • 交通信号灯控制系统设计 作为一个硬件程序设计民工,最近一直在学习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

    展开全文
  • 资料包:数电课程设计报告+原理图+仿真文件(仿真图)+电路各模块原理分析
  • 微机原理考试用 内含全部资源 相信学习微机原理的同学应该用的着 特此分享
  • 并利用8253可编程定时/计数器产生方波,同时利用8055可编程并行口芯片实现对交通灯的控制,其中A口进交通信号灯控制,B口输出交通信号灯的时间(秒数)。 本项目中预定设置红灯和绿灯时间都为9秒,绿灯过后,黄灯...
  • 数电课设_十字路口交通信号灯定时控制系统
  • 目录 TOC \o "1-3" \h \z \u 一 设计背景 2 二任务和要求 2 三总体设计方案 3 1....交通灯显示电路 5 4.数码管显示 6 5.置数变换电路 6 6.流量控制电路 7 五总电路原理图 8 六总电路图 9 七原件清单
  • 在如今这个经济飞速发展的世界,交通已...西门子可编程控制器指令丰富,可以接各种输出、输入扩充设备,有丰富的特殊扩展设备,其中的模拟输入设备和通信设备更是符合交通灯控制系统的要求与特点,能够方便地联网通信。
  • 成绩微机原理与汇编语言综合性实验交通灯控制系统设计学 号姓 名班 级微机原理与汇编语言综合性实验任务书实验项目名称:交通灯控制系统设计课程名称:微机原理与汇编语言面向专业:信息与计算科学专业计划学时:4...

    成绩

    微机原理与汇编语言

    综合性实验

    交通灯控制系统设计

    学 号

    姓 名

    班 级

    微机原理与汇编语言

    综合性实验任务书

    实验项目名称:交通灯控制系统设计

    课程名称:微机原理与汇编语言

    面向专业:信息与计算科学专业

    计划学时:4学时=实验课内2学时+实验课外2学时

    实验类型: √ 综合 设计

    实验目的:掌握典型数字接口电路的应用技术原理,掌握常用接口芯片在应用系统中的硬件电路连接原理和软件编程方法。

    实验要求:包括开发环境要求,技术文档要求两部分。

    开发环境要求:

    软件环境:windows98/windowsXP/windows2000,emu8086环境

    硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)

    技术文档要求:

    按照实验报告编写要求进行。要求流程图绘制规范,软、硬件功能描述清晰,实验总结深刻。

    实验内容:

    1 熟悉并行接口、中断控制器、定时器的工作原理及相关芯片。

    2 掌握数字接口电路设计应用原理,根据系统功能用汇编语言编写相关程序。

    3 与单片机实验箱结合,选择合适的芯片,按照实验要求连接电路。并在系统中输入程序,运行并观察结果。也可在emu8086环境中运行编译好的的程序,通过系统模拟,在模拟窗口中观察交通信号灯的变化,得出相关结论。

    实验方案(任务提示):

    按照时间控制原则,利用并行接口和定时器,采用时间中断方式设计电路。按照系统板上硬件连线要求,在QTH-8086B16位微机教学实验仪上连好相关线路并将实验仪与PC机连好。也可在proteus环境下设计硬件原理图,搭建硬件电路。根据软件设计的程序流程编写源程序,可自行控制通行时间、禁止时间及准备时间,周而复始。再将源程序在相应的环境中进行编译连接和运行,或者仿真调试,以实现控制交通灯的功能。

    实验仪器设备:

    每个学生一台计算机、QTH-8086B 16位微机教学实验仪、或者emu8086实验模拟系统。

    实验报告版式要求:

    A4纸张打印;上下页边距各2.5cm,左右页边距各3.0cm,页眉1.5cm页脚1.75cm;页码位于页脚居中打印;奇数页页眉“微机原理与汇编语言综合性实验”,偶数页页眉“交通灯控制系统设计”,页眉宋体小5号,一级标题:黑体三号粗体字;二级标题:黑体4号;三级标题黑体小4号,正文,宋体5号。

    实验报告装订顺序与规范:

    封面

    交通灯控制系统设计综合实验任务书

    交通灯控制系统设计综合实验报告

    左边缘装订

    微机原理与汇编语言综合性实验报告

    实验项目名称:交通灯控制系统设计

    专业班级: ;姓名: ;学号

    实验起止日期: 2014 年 12 月 22 日起 2014 年 12 月 24 日止

    实验目的:掌握典型数字接口电路的应用技术原理,掌握常用接口芯片在应用系统中的硬件电路连接原理和软件编程方法;编写交通灯控制系统实验程序,并将源程序在相应的环境中进行编译连接和运行,或者仿真调试,以实现控制交通灯的功能。

    实验要求:包括开发环境要求,技术文档要求两部分。

    实验内容:

    设计目的

    当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。红灯停,绿灯行的交通规则广泛应用于十字路口,车站,码头等公共场所,成为人们出行生活中不可少的必需品。为了实现交通道路的管理,力求交通管理先进性,科学化,可用变成控制器实现交通灯管理系统,本实验是采用计算机通过编写汇编语言程序模拟交通灯的控制的。

    由于计算机技术的成熟与广泛应用,使得交通灯的功能多样化。交通灯的数字化同样给人们的生产生活带来了极大的方便,大大地扩展了交通灯的功能。诸如闪烁警示、鸣笛警示,时间程序自动控制、倒计时显示等都是以计算机为基础的。还可以根据主、次干道的交通状况的不同而设置各自不同的通行时间。现在的交通灯系统很多都增加了智能控制环节,要将交通灯系统产品化,应该根据客户不同的需求进行不同的设计,应该在程序中增加一些可以人为改变的参数,以便客户根据不同的需求随时调节交通灯。因此,研究交通灯及扩大其应用,有着非常现实的意义。

    基本原理

    本设计以TDN86/51实验箱为载体,结合中断控制器8259A、并行接口8255、中断定时器8253、七段数码显示管LED及八个发光二极管的功能,用汇编语言编程实现了十字路口交通灯模拟的实验。

    设计要求

    1.东西方向车辆放行60秒钟。即东西方向的绿灯和南北方向的红灯同时点亮1分钟。2.1分钟后,东西方向的黄灯闪烁5秒钟,以警示车辆将切换红绿灯。此时南北方向仍维持红灯点亮。3.东西方向的黄灯闪烁5秒钟后,转为南北方向放行20秒钟。即东西方向的红灯和南北方向的绿灯

    展开全文
  • 太阳能LED交通信号灯由光伏极板、充放电控制器、蓄电池、LED交通信号灯系统构成。系统框图如图1所示。 图1 系统框图 其中,光伏极板是用来将太阳能转换成电能,为系统供电。 充放电控制器是将太阳能产生的电...
  • 下载可编辑【摘 要】: 针对近年来城市交通的拥挤现象,特别是驾驶员违章严重、交通事故频发、车辆尾气污染等问题,介绍集计算机、信息、电子及通讯等众多高新技术手段于一体的智能交通指挥中心控制系统。该系统的...
  • 城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。通过所学的相关微机原理与接口技术及汇编语言的基本知识,结合实验要求...
  • 基于CC2530单片机的交通信号灯系统
  • 交通信号灯控制单片机交通灯系统的研制,一方面可以改善交通堵塞问题,疏导车流,提高道路利用率;另一方面可以节省交通警力,提高效率。论述了系统的硬件结构原理及软件设计思路
  • 交通灯控制器电路是由计数电路,脉冲信号源,组合逻辑门控制电路,译码器... 本设计采用了以74HC161计数器作为核心控制器,通过控制城市十字路口的交通信号灯来指挥交通。该系统具有制作简单、成本低、功能实用等特点。
  • PAGEPAGE 3课程设计报告课程名称: FPGA现代数字系统设计设计名称: 交通信号灯控制器姓 名: * * *学 号: 2010000379专 业: 通 信指导教师: * * *起止日期: 2010.12.25 - 2011.1.9课 程 设 计 任 务 书设计名称...
  • 交通信号灯是指挥行人和各种车辆的安全运行的重要工具,对于有主支干道之分的十字路口,要求主干道通行的时间比支干道长。交通灯控制系统主要是实现城市交叉路口红绿灯的控制。在现代化的大城市中,十字交叉路口...
  • 微机原理交通灯控制系统设计

    万次阅读 多人点赞 2018-09-10 00:07:21
    此次综合设计为模拟交通灯控制系统,是采用计算机通过编写汇编语言程序控制实验箱上的硬件资源实现的。红灯停,绿灯行的交通规则,广泛用于十字路口,车站, 码头等公共场所,成为人们出行生活中不可少的必需品,由于...
  • 交通信号灯电路图

    2015-05-04 22:27:32
    交通信号灯控制系统 protues文件 电路图
  • 交通信号灯状态监测技术是道路交通信号控制关键技术之一,直接关系到道路交通的安全与通畅。文中介绍了一种新型的多路交通信号灯状态监测方法。该方法基于互感检测原理,根据互感器次级输出电流,经信号调理电路处理...
  • 它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向各50秒;要么根据交通规律,东西方向60秒,南北方向40秒,时间控制...
  • 城乡交通灯控制系统电路设计 [日期:2005-2-1] 来源:国外电子元器件 作者:章家岩 谢富春 [字体:大 中 小] ...城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它
  • 2)一道有车,另一道无车时(实验时用开关K5和K6控制),交通控制系统能立即让有车道放行。 3)有紧急车辆要求通过时,系统要能禁止普通车辆通过,A、B道均为红灯,紧急车由K7开关模拟,有紧急车时另有一红灯闪烁。
  • 智能交通信号灯系统设计.目 录摘 要1第一章引言2第一节 本课题的意义2第二节 国内外发展状况2第三节 系统设计的特点4第二章 系统硬件设计4第一节 系统总体设计目标4第二节 系统框图及系统工作原理5第三节 单片机--AT...

空空如也

空空如也

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

交通信号灯控制系统原理