实验03交通灯控制器的设计与实现文档格式.docx

上传人:b****5 文档编号:18917105 上传时间:2023-01-02 格式:DOCX 页数:13 大小:147.86KB
下载 相关 举报
实验03交通灯控制器的设计与实现文档格式.docx_第1页
第1页 / 共13页
实验03交通灯控制器的设计与实现文档格式.docx_第2页
第2页 / 共13页
实验03交通灯控制器的设计与实现文档格式.docx_第3页
第3页 / 共13页
实验03交通灯控制器的设计与实现文档格式.docx_第4页
第4页 / 共13页
实验03交通灯控制器的设计与实现文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验03交通灯控制器的设计与实现文档格式.docx

《实验03交通灯控制器的设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《实验03交通灯控制器的设计与实现文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

实验03交通灯控制器的设计与实现文档格式.docx

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

三、实验学时:

6学时

四、实验原理:

1)时序分析:

本实验所设计的交通信号控制器,适用于在两条干道汇合点形成的十字交叉路口,路口设计两组红绿灯分别对两个方向上的交通运行状态进行管理。

交通灯的闪亮时序关系如图1所示,当B方向的红灯亮时,A方向对应绿灯亮,而后由绿灯转换为黄灯,即B方向红灯亮的时间等于A方向绿灯和黄灯亮的时间之和。

同理,当A方向的红灯变亮时,B方向的交通灯也遵循此规则。

各干道上安装有数码管,以倒计时的形式显示本道各信号灯闪亮的时间。

当出现特殊情况时,各方向上均亮红灯,倒计时停止。

特殊运行状态结束后,控制器恢复原来的状态,继续运行。

图1.交通灯的时序分析

2)系统整体设计

整个系统设计如图2所示,该系统主要由分频模块、计数模块、数码管显示控制模块、交通灯控制模块以及显示电路设备组成。

其中分频模块主要将系统输入的基准时钟信号转换为1Hz以及适应于数码管显示的的激励信号,驱动计数模块和两个控制模块工作。

两个控制模块根据计数器的计数情况对交通灯的亮灭及数码管的显示时间进行控制。

图中Hold为保持信号,当Hold为“1”,计数器暂停计数,表示出现特殊情况,各方向车辆都处于禁行状态。

图2.交通灯系统模块图

3)具体设计思路:

(AG,AR,AY分别代表A方向的绿、红、黄灯,BG,BR,BY分别代表B方向的绿、红、黄灯)

如图3所示,交通灯在无紧急情况时,可以将程序分为四个部分:

(1)AG=1,BR=1;

A数码管显示00~20,B数码管显示00~20;

(2)AY=1,BR=1;

A数码管显示21~25,B数码管显示01~05;

(3)AR=1,BG=1;

(4)AR=1,BY=1;

A数码管显示01~05,B数码管显示21~25.

对于紧急情况,只需在计数模块中添加一个控制功能HOLD,当HOLD=1时,计数功能暂停,同时在LED交通灯控制中也添加该模块,使AR=1,BR=1。

当HOLD=0时,计数功能和LED交通灯恢复正常。

四、实验步骤

1.根据实验要求作预习报告。

2.建立工程,设计程序:

1)新建工程;

2)新建verilogHDL文件(注:

文件名和模块名称要和工程名保持一致)。

3)调试程序:

3.配置管脚:

参照实验指导中的管脚图,配置管脚。

4.下载到开发板,观察实验结果,尝试创造自己的实验方案:

5.完成实验报告。

附:

本实验的实验框架:

见traffic.v

五、实验要求:

实验报告应包含实验目的、实验原理,分析与设计思路,实验程序,对应变量的管脚配置表,实验结果,实验总结。

其中具体要求为:

1)程序实现模块化设计,写出设计思路,认真标注代码注释;

2)达到正确地运行结果;

3)实验中出现的问题进行详细总结。

modulejiaotd(clk,ji,R,D,L,cs);

inputclk,ji;

outputR,L,D,cs;

regtick;

reg[1:

0]n;

reg[50:

0]i;

reg[10:

0]j;

reg[2:

0]R;

0]L;

reg[7:

0]D;

reg[6:

0]a;

0]cs;

0]as;

reg[4:

0]ag;

0]bs;

0]bg;

0]m;

always@(posedgeclk)在clk频率下运行

begin

if(ji)

begintick<

=tick;

end

else

begin

i<

=i+1;

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

tick<

=~tick;

i<

=0;

end

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

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

if(a==0)

a<

=50;

=a-1;

always@(posedgeclk)//在clk频率下运行;

begin//L表示B方向的红绿黄灯,用D1、2、3信号灯输出表示;

R表示A方向的绿黄红灯,用D6、7、8信号灯输出表示;

if(ji)//选用R23开关给出紧急信号,

beginL<

=3'

b100;

R<

//当波动R23按钮时,A.B方向都亮起红灯;

end

else//在非紧急情况下

if(a<

=20)//在前20s的时间里

b001;

end//A方向亮绿灯,B方向亮红灯;

elseif(a<

=25&

&

a>

20)//在21s—25s的时间里,

beginL<

b010;

end//A方向亮黄灯,B方向亮红灯;

elseif(a>

25&

45)//在26s—45s的时间里

end//A方向亮红灯,B方向亮绿灯

=50&

45)//在46s—50s的时间里

end//A方向亮红灯,B方向亮黄灯

always@(posedgeclk)

begin//用四个数码管显示A,B方向时间倒计时

if(a<

21)

begin

as<

=a/10;

//根据a的循环A方向的十位数码管倒计时显示2,1,0;

ag<

=a%10;

//根据a的循环A方向的个位数码管倒计时显示9-0;

bs<

bg<

elseif(a>

19&

26)

//根据a的循环A方向的十位数码管倒计时显示0;

=a-20;

//根据a的循环A方向的十位数码管倒计时显示5-0;

//根据a的循环B方向的十位数码管倒计时显示2;

//根据a的循环B方向的十位数码管倒计时显示5-0;

24&

46)

=(a-25)/10;

=(a-25)%10;

//根据a的循环B方向的十位数码管倒计时显示2-0;

//根据a的循环B方向的十位数码管倒计时显示9-0;

44&

51)

=a-45;

if(j>

=999)

m<

=~m;

j<

=j+1;

always@(posedgem)

case(n)

0:

D<

=8'

b10111111;

//选定一个数码管

case(as)//在数码管上显示as的值

0:

cs<

=7'

b0111111;

1:

b0000110;

2:

b1011011;

endcase

1:

b01111111;

case(ag)//在数码管上显示bs的值

3:

b1001111;

4:

b1100110;

5:

b1101101;

6:

b1111101;

7:

b0000111;

8:

b1111111;

9:

b1101111;

2:

b11111110;

case(bs)

3:

b11111101;

case(bg)

endcase

n<

=n+1;

endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1