基于VerilogHDL的通行时间可变的交通灯控制器

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通行时间可变的交通灯控制器设计

module tr1(ng,clk,reset,resets,emergency,lighta,lightb,seg,select); input ng,clk,reset,emergency,resets;

output[6:0]seg;//显示用的

output[3:0] lighta,lightb;//a是主干道,b是支干道

output [3:0] select;//选择那一个管子进行显示

reg clk1,clk2;//clk1要5HZ clk2要几千HZ

reg [3:0] select;

reg tim1,tim2;//这是看你的等有没有变过颜色的控制信号

reg [1:0] cont;

reg[2:0]state1,state2,ste;两个控制颜色变化状态的信号。

reg[3:0]lighta,lightb;//a是主干道,b是支干道

reg[3:0]num;//译码器是根据这个东西来译码的

reg [35:0] fout;

reg[6:0]seg;//显示

reg[7:0] numa,numb;

reg[7:0] red1,red2,green1,green2,yellow1,yellow2,left1,left2; always @(ng )

if(!ng)

begin //设置计数初值

green1 <=8'b00110000;//30S

red1 <=8'b01010001;//51S

yellow1<=8'b00000011;//3S

left1 <=8'b00010101; //15S

green2 <=8'b00110000;//30S

red2 <=8'b01010001;//51S

yellow2<=8'b00000011;//3S

left2 <=8'b00010101; //15S

end

always @ (posedge clk)

begin

if (fout==36'b111111111111111111111111111111111111)

fout<=0;

else begin fout<=fout+1;

clk1=fout[23];5HZ

clk2=fout[13];几千HZ

end

end

always @(posedge clk1 )

begin

if(reset) //复位与特殊情况控制这是主干道的复位

begin

lighta<=4'b1000;

//lighta是主干道的交通灯,lightb是支干道的交通灯,1000是红灯,0100是直行绿灯,0010是黄灯,0001是左转绿灯

numa<=red1; //主干道的数码管从红灯开始记

state1<=0;//这时候灯变化的控制信号为0

end

else if(emergency)//紧急情况

begin

lighta<=4'b1000;//主干道红了

numa<=red1;//计时也从红灯记

end

else if(ng)//这下开始正常工作了

begin //使能有效开始控制计数

if(!tim1) //你有没有变过颜色啊?没有?那开始变颜色吧。

begin //主干道交通灯点亮控制

tim1<=1;//主干道的灯的开关,行了,我变过了。

case(state1)//state1是用来控制主干道亮灯的各个状态的。

//1000(8)是红灯,0100(4)是直行绿灯,0010(2)是黄灯,0001(1)是左转绿灯3'b000:begin numa<=green1; lighta<=4; state1<=3'b001;end//直行绿

3'b001:begin numa<=yellow1;lighta<=2; state1<=3'b010;end//黄

3'b010:begin numa<=left1; lighta<=1; state1<=3'b011;end//左转绿

3'b011:begin numa<=yellow1;lighta<=2; state1<=3'b100;end//黄

3'b100:begin numa<=red1; lighta<=8; state1<=3'b000;end//红

default:lighta<=8;//接二极管正极,负极接地

endcase

end

else//tm1=1,我变过颜色了,可以开始计数了。

begin //倒数计时

if(numa>0)

if(numa[3:0]==0)

begin

numa[3:0]<=4'b1001;

numa[7:4]<=numa[7:4]-1;

end

else numa[3:0]<=numa[3:0]-1;

if(numa==1) tim1<=0;好了,差不多计完了,再让我变一次吧。

end

end

else //如果电路没有启动

begin

lighta<=4'b0100;//默认为直行绿灯

numa=0;//默认计数为0

tim1<=0; //默认我没有变过颜色

end

end

always @(posedge clk1 )//下面就和主干道的一样了

begin

if(reset) //复位与特殊情况控制

begin

lightb<=4'b1000;

numb<=red2;

state2<=0;

end

else if(emergency)

begin

lightb<=4'b1000;

numb<=red2;

end

相关文档
最新文档