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

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

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

一、实验目的

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频率下运行begin

if(ji)

begin tick<=tick;end

else

begin

i<=i+1;

if(i==9999999) //对clk信号分频

begin

tick<=~tick;

i<=0;

end

end

end

always@(posedge tick) //在所分频率下运行

begin //当红绿黄灯循环交替一次所用时间为50s,设置变量a控制循环;

if(a==0)

a<=50 ;

else

a<=a-1;

end

always@(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 //在非紧急情况下

begin

if (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方向亮黄灯

end

end

相关文档
最新文档