当前位置:文档之家› 交通灯控制器的设计与实现

交通灯控制器的设计与实现

实验三交通灯控制器的设计与实现一、实验目的1)了解交通灯管理的基本工作原理。

2)熟悉计数器/定时器的工作方式及应用编程。

3)掌握多位LED显示的方法。

二、实验内容设计一个用于十字路口的交通灯控制器。

基本要求:东西和南北方向各有一组红、黄、绿灯用于指挥交通,红、黄、绿的持续时间分别为25s,5s,20s。

当有紧急情况(如消防车)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,正常工作。

一组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。

三、实验学时:6学时四、实验步骤1. 根据实验要求作预习报告。

2. 根据实验需求,进行程序的设计。

3. 根据以前设计的经验,反复调试程序。

4. 调试通过,下载到FPGA开发板上进行实践调试。

5. 完成整个过程,写实验报告。

附:有关管脚配置参看前6次实验的实验指导书五、实验要求:实验报告应包含实验目的、实验原理,分析与设计思路,实验程序,对应变量的管脚配置表,实验结果,实验总结。

其中具体要求为:1)程序实现模块化设计,写出设计思路,认真标注代码注释;2)达到正确地运行结果;3)实验中出现的问题进行详细总结。

六.实验原理八段数码显示管的原理,Verilog 程序设计原理,实际情况中交通灯的原理。

七.分析与设计思路题目要求是东西和南北方向各有一组红、黄、绿灯用于指挥交通,红、黄、绿的持续时间分别为25s,5s,20s。

当有紧急情况(如消防车)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,正常工作。

一组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。

根据要求,我们可以有这样的思路:1. 首先,紧急情况时候,必须两个走向的道路都是红灯。

2. 其次,正常情况下,两个走向的道路必须有一个且只有一个是亮红灯的。

3. 再者,正常情况下,若一条道路亮红灯时,另一条道路必须是绿灯,或者是黄灯。

除此之外,关于八段数码显示管的显示,我们先采用片选信号选出,然后对这个已选出的数码管进行段选来让它显示指定的数字。

综上所述,同时考虑到时间问题。

可以表述如下:紧急情况时,我们按下路灯控制按钮,让两条道路的红灯同时点亮。

正常情况时,东西走向的道路的红灯亮的同时从25s倒计时,与此同时,南北走向的道路的黄灯亮同时从5s倒计时。

当红灯倒计时至20s时,南北走向的道路的黄灯灭绿灯开始从20s倒计时。

当两条道路的灯同时到达0时,两灯同时灭并点亮南北走向道路的红灯从25s倒计时,与此同时,点亮东西走向的黄灯并从5s开始倒计时,当南北走向的道路的红灯倒计时至0s时,东西走向的黄灯灭绿灯亮,同时从20s开始倒计时。

如此往复循环,就是一个十字路口的交通灯的原理。

八.实验程序module jiaotongdeng(clk,ji,R,D,L,cs);input clk,ji;output R,L,D,cs;reg tick;reg [1:0]n;reg [50:0]i;reg [10:0]j;reg[2:0]R;reg[2:0]L;reg[7:0]D;reg[6:0]a;reg[6:0]cs;reg[2:0]as;reg[4:0]ag;reg[2:0]bs;reg[4:0]bg;reg [10:0]m;always @(posedge clk) //在clk频率下运行beginif(ji)begin tick<=tick;endelsebegini<=i+1;if(i==9999999) //对clk信号分频begintick<=~tick;i<=0;endendendalways@(posedge tick) //在所分频率下运行begin //当红绿黄灯循环交替一次所用时间为50s,设置变量a控制循环;if(a==0)a<=50 ;elsea<=a-1;endalways@(posedge clk) //在clk频率下运行;begin //L表示B方向的红绿黄灯,用D1、2、3信号灯输出表示;R表示A方向的绿黄红灯,用D6、7、8信号灯输出表示;if (ji) //选用R23开关给出紧急信号,begin L<=3'b100;R<=3'b100; end // 当波动R23按钮时,A.B方向都亮起红灯;else //在非紧急情况下beginif (a<=20) //在前20s的时间里begin L<=3'b001;R<=3'b100; end //A方向亮绿灯,B方向亮红灯;else if (a<=25&&a>20) //在21s-25s的时间里,begin L<=3'b010;R<=3'b100; end // A方向亮黄灯,B方向亮红灯;else if (a>25&&a<45) //在26s-45s的时间里begin L<=3'b100;R<=3'b001; end // A方向亮红灯,B方向亮绿灯else if (a<=50&&a>45) //在46s-50s的时间里begin L<=3'b100;R<=3'b010; end // A方向亮红灯,B方向亮黄灯endendalways@(posedge clk)begin //用四个数码管显示A,B方向时间倒计时if (a<21)beginas<=a/10; //根据a的循环A方向的十位数码管倒计时显示2,1,0;ag<=a%10; //根据a的循环A方向的个位数码管倒计时显示9-0;bs<=a/10;bg<=a%10;endelse if (a>19&&a<26)beginas<=0; //根据a的循环A方向的十位数码管倒计时显示0;ag<=a-20; //根据a的循环A方向的个位数码管倒计时显示5-0;bs<=a/10; //根据a的循环B方向的十位数码管倒计时显示2;bg<=a%10; //根据a的循环B方向的个位数码管倒计时显示5-0;endelse if (a>24&&a<46)beginas<=(a-25)/10;ag<=(a-25)%10;bs<=(a-25)/10; //根据a的循环B方向的十位数码管倒计时显示2-0;bg<=(a-25)%10; //根据a的循环B方向的个位数码管倒计时显示9-0;endelse if (a>44&&a<51)beginas<=(a-25)/10;ag<=(a-25)%10;bs<=0;bg<=a-45;endendalways@(posedge clk)beginif (j>=999)beginm<=~m;j<=0;endelsej<=j+1;endalways @(posedge m )begincase(n)0:beginD<=8'b10111111; //选定一个数码管case(as) g abcd //在数码管上显示as的值0:cs<=7'b0111111;1:cs<=7'b0000110; //这里1为数码管亮2:cs<=7'b1011011;endcaseend1:beginD<=8'b01111111; //选定一个数码管case(ag) //在数码管上显示bs的值0:cs<=7'b0111111;1:cs<=7'b0000110;2:cs<=7'b1011011;3:cs<=7'b1001111;4:cs<=7'b1100110;5:cs<=7'b1101101;6:cs<=7'b1111101;7:cs<=7'b0000111;8:cs<=7'b1111111;9:cs<=7'b1101111;endcaseend2:beginD<=8'b11111110;case(bs)0:cs<=7'b0111111;1:cs<=7'b0000110;2:cs<=7'b1011011;endcaseend3:beginD<=8'b11111101;case(bg)0:cs<=7'b0111111;1:cs<=7'b0000110;2:cs<=7'b1011011;3:cs<=7'b1001111;4:cs<=7'b1100110;5:cs<=7'b1101101;6:cs<=7'b1111101;7:cs<=7'b0000111;8:cs<=7'b1111111;9:cs<=7'b1101111;endcaseendendcasen<=n+1;endendmodule九.对应变量的管教配置表十.实验结果1.如图所示,左边的两个点亮的数码管子表示东西走向的道路的路灯倒计时。

右边的是南北走向道路的路灯的倒计时。

板子左下角的两列小灯来指示红黄绿灯,其中,右边的(R)一列表示东西走向的道路的亮灯,左边(L)的一列表示南北走向的道路的亮灯。

另外,每列的第一个灯是红灯,第二个是黄灯,第三个是绿灯。

此时表示,东西走向道路的红灯倒计时至24s,南北走向道路的黄灯倒计时至4s。

图一2.如下图所示,在上图的东西走向的红灯倒计时至20s之后,紧接着出现下图所示的情况。

这就表明东西走向道路的红灯不变,依旧在从20s倒计时。

但是南北走向的道路的黄灯变成了现在的绿灯,并且从20s开始倒计时。

图中所示为两者同时倒计时到17s时的情况。

图二3.如下图所示,在图二同时倒计时到0之后,东西走向的道路的红灯变为黄灯从5s开始倒计时,同时南北走向的道路的绿灯变成红灯从25s开始倒计时,如下图所示,此时为东西走向道路的黄灯倒计时至4s,南北走向道路的红灯倒计时至24s。

图三4.如下图所示,当上图的东西走向的道路的黄灯倒计时至0后,马上变为绿灯从20s开始倒计时。

同时南北走向的道路的红灯也倒计时至20s。

图四4. 如下图所示,为图四倒计时至13s是的情况。

相关主题