交通信号灯控制器课程设计报告.docx

上传人:b****7 文档编号:10706921 上传时间:2023-02-22 格式:DOCX 页数:10 大小:387.26KB
下载 相关 举报
交通信号灯控制器课程设计报告.docx_第1页
第1页 / 共10页
交通信号灯控制器课程设计报告.docx_第2页
第2页 / 共10页
交通信号灯控制器课程设计报告.docx_第3页
第3页 / 共10页
交通信号灯控制器课程设计报告.docx_第4页
第4页 / 共10页
交通信号灯控制器课程设计报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

交通信号灯控制器课程设计报告.docx

《交通信号灯控制器课程设计报告.docx》由会员分享,可在线阅读,更多相关《交通信号灯控制器课程设计报告.docx(10页珍藏版)》请在冰豆网上搜索。

交通信号灯控制器课程设计报告.docx

交通信号灯控制器课程设计报告

交通信号灯控制器课程设计报告

交通信号灯控制器课程报告

一.设计要求

1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

2、主、支干道交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。

3、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。

提示:

1、选择1HZ时钟脉冲作为系统时钟。

2、45秒、25秒、5秒定时信号用倒计时,计时起始信号由主控电路给出,每当计满所需时间,计数器清零,由主控电路启、闭三色信号灯或启动另一计时电路。

2.设计思路

本设计针对一条主干道和一条支干道汇合成的十字路口,进行南北和东西直行情况下交通灯控制。

根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续45S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。

循环往复的执行这个过程。

设计中用两组红黄绿LED模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

根据状态机的设计规范,本次设计了四个状态之间的循环转化,其真值表及状态转化图如下所示

目前状态

下一状态

输出

Light1

Light2

S0=00

S1=01

001

100

S1=01

S2=10

010

010

S2=10

S3=11

100

001

S3=11

S0=00

010

010

S0

S3

S1

S2

 

3.程序说明

1.各输入输出变量说明:

clk:

计数时钟

qclk:

扫描显示时钟

rst:

复位信号,当rst为1时,控制器和计数器回到初始状态

en:

使能信号,当en为1时控制器开始工作,en为0时

hold:

特殊情况控制信号,hold为1时,主、支干道方向无条件显示为红灯

seg:

用于数码管的译码输出

dig:

用于选择显示的数码管(片选)

num1:

用于主干道方向灯的时间显示

num2:

用于支干道方向灯的时间显示

light1:

控制主干道方向四盏灯的亮灭,其中,light1[0]~light1[2]分别控制主干道方向的绿灯、黄灯和红灯

light2:

控制支干道方向四盏灯的亮灭,其中,light2[0]~light2[2]分别控制支干道方向的绿灯、黄灯和红灯

 

2.输入输出及中间变量设置:

moduletraffic(en,clk,qclk,rst,hold,num1,num2,light1,light2,seg,dig;

inputen,clk,qclk,rst,hold;

output[5:

0]dig;

output[7:

0]num1,num2;

output[6:

0]seg;

output[2:

0]light1,light2;

regtim1,tim2;

reg[3:

0]disp_dat;

reg[6:

0]seg;

reg[7:

0]num1,num2;

reg[7:

0]red1,red2,green1,green2,yellow1,yellow2;

reg[5:

0]dig;

reg[1:

0]count;

reg[1:

0]state1,state2;

reg[2:

0]light1,light2;

3.初始状态设置:

always@(en)

if(!

en)

begin

green1<=8'b01000101;

red1<=8'b00100101;

yellow1<=8'b00000101;

green2<=8'b00100101;

red2<=8'b01000101;

yellow2<=8'b00000101;

end

4.主干道方向点亮顺序:

always@(posedgeclk)//主干道

begin

if(rst)

begin

light1<=3'b001;

num1<=green1;

end

elseif(hold)

begin

light1<=3'b100;

num1<=green1;

end

elseif(en)

begin

if(!

tim1)

begin

tim1<=1;

case(state1)

2'b00:

beginnum1<=green1;light1<=3'b001;state1<=2'b01;end

2'b01:

beginnum1<=yellow1;light1<=3'b010;state1<=2'b11;end

2'b11:

beginnum1<=red1;light1<=3'b100;state1<=2'b10;end

2'b10:

beginnum1<=yellow1;light1<=3'b010;state1<=2'b00;end

default:

light1<=3'b100;

endcase

end

else//主干道倒数计时

begin

if(num1>0)

if(num1[3:

0]==0)

begin

num1[3:

0]<=4'b1001;

num1[7:

4]<=num1[7:

4]-1;

end

elsenum1[3:

0]<=num1[3:

0]-1;

if(num1==1)tim1<=0;

end

end

else

begin

light1<=3'b010;

num1=2'b00;

tim1<=0;

end

end

5.支干道方向点亮顺序:

always@(posedgeclk)//支干道

begin

if(rst)

begin

light2<=3'b100;

num2<=red2;

end

elseif(hold)

begin

light2<=3'b100;

num2<=red2;

end

elseif(en)

begin

if(!

tim2)

begin

tim2<=1;

case(state1)

2'b00:

beginnum2<=red2;light2<=3'b100;state2<=2'b01;end

2'b01:

beginnum2<=yellow2;light2<=3'b010;state2<=2'b11;end

2'b11:

beginnum2<=green2;light2<=3'b001;state2<=2'b10;end

2'b10:

beginnum2<=yellow2;light2<=3'b010;state2<=2'b00;end

default:

light2<=3'b100;

endcase

end

else//支干道倒数计时

begin

if(num2>0)

if(num2[3:

0]==0)

begin

num2[3:

0]<=4'b1001;

num2[7:

4]<=num2[7:

4]-1;

end

elsenum2[3:

0]<=num2[3:

0]-1;

if(num2==1)tim2<=0;

end

end

else

begin

light2<=3'b010;

state2<=2'b00;

tim2<=0;

end

end

6.数码管译码及显示:

always@(posedgeqclk)//定义上升沿触发进程

begin

count<=count+1'b1;

end

 

always@(count)

begin

case(count)//选择扫描显示数据

2'd0:

disp_dat<=num1[3:

0];//第一个数码管

2'd1:

disp_dat<=num1[7:

4];//第二个数码管

2'd2:

disp_dat<=num2[3:

0];//第三个数码管

2'd3:

disp_dat<=num2[7:

4];//第四个数码管

default:

disp_dat<=0;

endcase

end

always@(count)

begincase(count)//选择数码管显示位

2'd0:

dig<=6'b011111;//选择第一个数码管显示

2'd1:

dig<=6'b101111;//选择第二个数码管显示

2'd2:

dig<=6'b110111;//选择第三个数码管显示

2'd3:

dig<=6'b111011;//选择第四个数码管显示

default:

dig<=6'b111111;

endcase

end

always@(disp_dat)

begin

case(disp_dat)//七段译码

4'b0000:

seg<=7'b0111111;//显示"0"

4'b0001:

seg<=7'b0000110;//显示"1"

4'b0010:

seg<=7'b1011011;//显示"2"

4'b0011:

seg<=7'b1001111;//显示"3"

4'b0100:

seg<=7'b1100110;//显示"4"

4'b0101:

seg<=7'b1101101;//显示"5"

4'b0110:

seg<=7'b1111101;//显示"6"

4'b0111:

seg<=7'b0000111;//显示"7"

4'b1000:

seg<=7'b1111111;//显示"8"

4'b1001:

seg<=7'b1101111;//显示"9"

default:

seg<=7'b0111111;//不显示

endcase

end

endmodule

3.仿真波形图

4.实物图

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

当前位置:首页 > PPT模板 > 其它模板

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

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