基于VerilogHDL的通行时间可变的交通灯控制器_第1页
基于VerilogHDL的通行时间可变的交通灯控制器_第2页
基于VerilogHDL的通行时间可变的交通灯控制器_第3页
基于VerilogHDL的通行时间可变的交通灯控制器_第4页
基于VerilogHDL的通行时间可变的交通灯控制器_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、通行时间可变的交通灯控制器设计module tr1(ng,clk,reset,resets,emergency,lighta,lightb,seg,select);input ng,clk,reset,emergency,resets;output6:0seg;/显示用的output3:0 lighta,lightb;/a是主干道,b是支干道output 3:0 select;/选择那一个管子进行显示reg clk1,clk2;/clk1要5HZ clk2要几千HZreg 3:0 select;reg tim1,tim2;/这是看你的等有没有变过颜色的控制信号reg 1:0 cont;reg2

2、:0state1,state2,ste;两个控制颜色变化状态的信号。reg3:0lighta,lightb;/a是主干道,b是支干道reg3:0num;/译码器是根据这个东西来译码的reg 35:0 fout;reg6:0seg;/显示reg7:0 numa,numb;reg7:0 red1,red2,green1,green2,yellow1,yellow2,left1,left2;always (ng )if(!ng)begin /设置计数初值green1 <=8'b00110000;/30Sred1 <=8'b01010001;/51Syellow1<=

3、8'b00000011;/3Sleft1 <=8'b00010101; /15Sgreen2 <=8'b00110000;/30Sred2 <=8'b01010001;/51S yellow2<=8'b00000011;/3Sleft2 <=8'b00010101; /15Sendalways (posedge clk) beginif (fout=36'b111111111111111111111111111111111111)fout<=0;else begin fout<=fout+1;cl

4、k1=fout23;5HZclk2=fout13;几千HZendendalways (posedge clk1 )beginif(reset) /复位与特殊情况控制 这是主干道的复位 begin lighta<=4'b1000; /lighta是主干道的交通灯,lightb是支干道的交通灯,1000是红灯,0100是直行绿灯,0010是黄灯,0001是左转绿灯 numa<=red1; /主干道的数码管从红灯开始记state1<=0;/这时候灯变化的控制信号为0 end else if(emergency)/紧急情况 beginlighta<=4'b100

5、0;/主干道红了 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<

6、=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; state

7、1<=3'b000;end/红 default:lighta<=8;/接二极管正极,负极接地endcase end else/tm1=1,我变过颜色了,可以开始计数了。 begin /倒数计时 if(numa>0) if(numa3:0=0) begin numa3:0<=4'b1001; numa7:4<=numa7:4-1; end else numa3:0<=numa3:0-1; if(numa=1) tim1<=0;好了,差不多计完了,再让我变一次吧。 end end else /如果电路没有启动 begin lighta<

8、;=4'b0100;/默认为直行绿灯 numa=0;/默认计数为0 tim1<=0; /默认我没有变过颜色 end endalways (posedge clk1 )/下面就和主干道的一样了begin if(reset) /复位与特殊情况控制 begin lightb<=4'b1000; numb<=red2;state2<=0; end else if(emergency) begin lightb<=4'b1000; numb<=red2; end else if(ng) begin if(!tim2) begin tim2<

9、;=1; case(state2) 0:begin numb<=red2; lightb<=8; state2<=1; end 1:begin numb<=green2; lightb<=4; state2<=2; end 2:begin numb<=yellow2;lightb<=2; state2<=3;end 3:begin numb<=left2; lightb<=1; state2<=4;end 4:begin numb<=yellow2; lightb<=2; state2<=0;end de

10、fault:lightb<=8; endcase end else begin /倒数计时 if(numb>0) if(numb3:0=0) begin numb3:0<=4'b1001; numb7:4<=numb7:4-1; end else numb3:0<=numb3:0-1; if(numb=1) tim2<=0; end end else begin tim2<=0; state2<=0; lightb<=4'b0100; end end always (posedge clk2)begin /数码管扫描 if(

11、resets) begin cont=0; select=4'b1111; end else begin case(cont) 2'b00:begin num<=numa3:0; select<=4'b1101;cont<=cont+1; end 2'b01:begin num<=numa7:4; select<=4'b1011;cont<=cont+1; end 2'b10:begin num<=numb3:0; select<=4'b0111;cont<=cont+1; end 2

12、'b11:begin num<=numb7:4; select<=4'b1110;cont<=cont+1; end endcase endendalways (posedge clk2)begin /数码管译码显示case(num)4'b0000: seg<=7'b0111111; /04'b0001: seg<=7'b0000110; /14'b0010: seg<=7'b1011011; /24'b0011: seg<=7'b1001111; /34'b0100: seg<=7'b1100110; /44'b0101: seg<=7'b1101101; /54'b0110: seg&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论