[讨论] verilog交通灯控制系统

number007cool   2009-10-17 09:50 楼主
“交通灯控制与显示电路”综合设计实验(1)


——方案设计


一、问题描述


设计并实现一十字路口的红、绿、黄三色交通灯控制与显示电路,即每个路口设置一组红、黄、绿交通灯,按图1所示情况变化,以保证车辆、行人通行安全。





1.png


二、功能分析


1.基本功能


根据需求描述,系统应具有如下基本功能:


系统工作时,东西方向绿灯亮时,南北方向灯亮,该信号灯点亮时间可自由设定(设定范围为00~99s),同时点亮时间进行倒计时显示;当时间减为00时,东西方向绿灯熄灭,灯同时点亮,并维持数秒,南北方向仍为灯亮;当倒计时显示减为00时,东西方向灯亮,南北方向绿灯亮,点亮时间仍可自由设定;当倒计时显示减为00时,南北方向绿灯熄灭,灯同时点亮,并维持数秒,东西方向仍为灯亮。当倒计时显示减为00时,系统状态进入下一个周期,以后周而复始的循环。


2.扩展功能


(1)特殊状态控制功能


特殊状态如紧急车辆随时通行功能受一开关控制,无急车时,信号灯按正常时序控制。有急车来时,将特殊状态开关按下,不管原来信号灯的状态如何,一律强制让两个方向的红灯同时点亮,禁止其它车辆通行,同时计时停止;特殊状态结束后,恢复原来状态继续运行。


(2)
信号灯点亮时间预置功能


控制电路在任何时候可根据实际情况修改信号灯点亮时间。


(3)各路口交通灯故障报警功能(选做)


交通灯控制电路发出警报,说明各路口交通灯同时熄灭或点亮的情况不符合预定要求


三、设计任务与要求
正常情况下,十字路口的红、绿、黄三色信号交通灯有如图1所示4种情况,假设东西方向的绿灯点亮时间为Te ,同时也是南北方向的禁行时间;南北方向的绿灯点亮时间为Ts ,同时也是东西方向的禁行时间;此外,东西、南北方向的黄灯点亮时间均为Ty 。
1.参考图1,定义交通灯的状态,确定状态表;
2.根据实际交通灯转换过程,设计交通灯的状态转换图;
3.按交通灯的功能要求,设计系统的电路模块图。

回复评论 (2)

回复 楼主 number007cool 的帖子

请楼主先说说自己的思路,遇到问题大家帮忙解决~~~
加油!在电子行业默默贡献自己的力量!:)
点赞  2009-10-17 10:49
在编程的过程中经常遇到的一个问题就是,在两个always里面对同一个变量进行赋值,编译的时候就会产生冲突。
主要是

扩展功能:信号灯点亮时间预置功能,控制电路在任何时候可根据实际情况修改信号灯点亮时间。
这一功能能不知道怎样实现
我写的代码如下:(运行无错误)
/*
blue    00_11_11
yellow  11_00_11
blue    11_11_00
0 bu liang
1 liang
*/
module traffic(led_l,led_r,clk,seg_reg1,seg_reg2,inter_key,key1,key2);
input clk,inter_key,key1,key2;
output [6:0] seg_reg1,seg_reg2;
output [5:0] led_l,led_r;
reg [6:0] dispdat1,dispdat2,seg_reg1,seg_reg2;
reg [6:0] reg_dispdat1,reg_dispdat2;
reg [25:0] count;
reg [1:0] led_yellow_l;
reg [1:0] led_blue_l;
reg [1:0] led_red_l;
reg [5:0] led_reg_l;
reg [1:0] led_yellow_r;
reg [1:0] led_blue_r;
reg [1:0] led_red_r;
reg [5:0] led_reg_r;
reg [3:0] flag_shuma0,flag_shuma1;
reg [5:0] flag_led_l,flag_led_r;
reg flag;
reg [1:0] flag_rgy_status;


reg sec;
reg [1:0] rgy_status;
reg [7:0] rgy_time;
initial
begin
flag_rgy_status=2'd0;
rgy_time=8'h30;    //status 0 time
led_reg_l=6'b000000;   
led_reg_r=6'b000000;
flag=1'b0;
end


////////////////////////fen ping chan sheng 2HZ shi zhong/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
always @(posedge clk)
begin
count=count+1;
if(count==26'd1000_0000)                           //should be 2500_0000
  begin
  count=0;
  sec=~sec;               //2 HZ
  end
end
///////////////////////////////status 0/////////////////////////////////////////////////
always @(posedge sec)
begin
if(rgy_status==2'd0)
   begin
     if(rgy_time==8'h0)
    begin
    rgy_status=2'd1;
    rgy_time=8'h21;    //status 1 time    short time
    //led_red=led_reg[3:0];
    end
     else
    begin
    led_reg_l=6'b110000;  //blue
    led_reg_r=6'b000011;  //red
    rgy_time=rgy_time-1'b1;
      if(rgy_time[3:0]>9)
     rgy_time[3:0]=9;
    end
   end
////////////////////////////////////status 1/////////////////////////////////////////////
if(rgy_status==2'd1)
   begin
     if(rgy_time==8'h0)
    begin
    rgy_status=2'd2;
    rgy_time=8'h31;       //status 2 time
   
    end
     else
    begin
    led_reg_l=6'b001100;  //yellow
    led_reg_r=6'b000011;  //red
    rgy_time=rgy_time-1;
    if(rgy_time[3:0]>9)
     rgy_time[3:0]=9;
    end
   end
////////////////////////////////////status 2//////////////////////////////////////
if(rgy_status==2'd2)
  begin
    if(rgy_time==8'h0)
      begin
      rgy_status=2'd3;
      rgy_time=8'h21;    // short time
      end
    else
      begin
      led_reg_l=6'b000011;  //red
      led_reg_r=6'b110000;  //blue
      rgy_time=rgy_time-1;
      if(rgy_time[3:0]>9)
    rgy_time[3:0]=9;
      end
end
//////////////////////////////////zhuang tai 3///////////////////////////////////////////
if(rgy_status==2'd3)
  begin
    if(rgy_time==8'h0)
      begin
      rgy_status=2'd0;    //return to status 0
      rgy_time=8'h30;
   
      end
    else
      begin
      led_reg_l=6'b000011;  //red
      led_reg_r=6'b001100;  //yellow
      rgy_time=rgy_time-1;
      if(rgy_time[3:0]>9)
    rgy_time[3:0]=9;
      end
end


end
////////////////////////////xian shi ji shi///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////

/////////////////////super time(red-------red)/////////////////////////////////////////////
always
begin
   
if(inter_key==0)
  begin
  flag_shuma0=rgy_time[3:0];
  flag_shuma1=rgy_time[7:4];
  flag_led_l=led_reg_l;
  flag_led_r=led_reg_r;
  end
else
  begin
  flag_shuma0=4'h10;
  flag_shuma1=4'h10;
  flag_led_l=6'b000011;
  flag_led_r=6'b000011;
  flag=1'b1;
  end
dispdat1=flag_shuma0;
    dispdat2=flag_shuma1;
if(key1==1)
  begin
  reg_dispdat1=dispdat1;
  end
  else
  begin
  //reg_dispdat1=reg_dispdat1+1;
  if(reg_dispdat1==4'h9)
   reg_dispdat1=4'h0;
  end
  
  
if(key2==1)
  begin
  reg_dispdat2=dispdat2;
  end
  else
  begin
  //reg_dispdat2=reg_dispdat2+1;
  if(reg_dispdat2==4'h9)
   reg_dispdat2=4'h0;
  end


end
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////cun zai wen ti(dai wan shan)///////////////////////////

always @(flag)
begin
if(flag==1'b1)
  begin
  flag=1'b0;
  
   //rgy_status=flag_rgy_status;
   //rgy_time=8'h30;    //status 0 time
   //led_reg_l=6'b000000;   
   //led_reg_r=6'b000000;
   
  end
end
///////////////////////////cun zai wen ti///////////////////////////////////////
always
begin
end
always @(reg_dispdat1)
begin
  case(reg_dispdat1)
   4'h0:seg_reg1=7'b1000000;//0
   4'h1:seg_reg1=7'b1111001;//1
   4'h2:seg_reg1=7'b0100100;//2
   4'h3:seg_reg1=7'b0110000;//3
   4'h4:seg_reg1=7'b0011001;//4
   4'h5:seg_reg1=7'b0010010;//5
   4'h6:seg_reg1=7'b0000010;//6
   4'h7:seg_reg1=7'b1111000;//7
   4'h8:seg_reg1=7'b0000000;//8
   4'h9:seg_reg1=7'b0010000;//9
  4'h10:seg_reg1=7'b1111111;//not display
  endcase
end
//////////////////////////////////////////////////////////////////////////////////////////
always @(reg_dispdat2)
begin
  case(reg_dispdat2)
   4'h0:seg_reg2=7'b1000000;//0
   4'h1:seg_reg2=7'b1111001;//1
   4'h2:seg_reg2=7'b0100100;//2
   4'h3:seg_reg2=7'b0110000;//3
   4'h4:seg_reg2=7'b0011001;//4
   4'h5:seg_reg2=7'b0010010;//5
   4'h6:seg_reg2=7'b0000010;//6
   4'h7:seg_reg2=7'b1111000;//7
   4'h8:seg_reg2=7'b0000000;//8
   4'h9:seg_reg2=7'b0010000;//9
  4'h10:seg_reg2=7'b1111111;//not display
  endcase
end
assign led_l=flag_led_l;
assign led_r=flag_led_r;
endmodule
点赞  2009-10-17 14:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复