数字电子技术实验报告之交通灯设计.docx

上传人:b****2 文档编号:4681 上传时间:2023-04-28 格式:DOCX 页数:20 大小:543.48KB
下载 相关 举报
数字电子技术实验报告之交通灯设计.docx_第1页
第1页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第2页
第2页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第3页
第3页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第4页
第4页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第5页
第5页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第6页
第6页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第7页
第7页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第8页
第8页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第9页
第9页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第10页
第10页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第11页
第11页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第12页
第12页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第13页
第13页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第14页
第14页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第15页
第15页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第16页
第16页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第17页
第17页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第18页
第18页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第19页
第19页 / 共20页
数字电子技术实验报告之交通灯设计.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字电子技术实验报告之交通灯设计.docx

《数字电子技术实验报告之交通灯设计.docx》由会员分享,可在线阅读,更多相关《数字电子技术实验报告之交通灯设计.docx(20页珍藏版)》请在冰点文库上搜索。

数字电子技术实验报告之交通灯设计.docx

数字电子技术实验报告之交通灯设计

 

数字电子技术实验报告

交通灯的设计

 

姓名:

学号:

学院:

专业:

班级:

指导老师:

 

目录

 

一、实验目的与要求

二、实验设计

三、调试及实验结果

四、附页

 

一、实验目的及要求

实验目的:

1.熟练掌握verilog语言及Quartus软件的使用。

2.考验和培养学生独立自主综合设计的能力。

实验要求:

1.设计一个十字路口的四个交通灯的设计。

2.注意红灯时间23秒、黄灯时间3秒、绿灯时间17秒。

3.时间倒计时功能需在数码管中显示出来。

实验扩展:

1.分频:

因为实验要求秒数的倒计时及控制,故要将高频率进行分频得到1khz和1hz的频率。

分频的实现

2.数码管动态扫描:

倒计时的显示要求有四位同时显示,而以前只进行过一位显示。

所以该实验需要数码管的动态扫描。

二、实验设计

总体思路:

先实现由高频率分频得到1khz和1hz的频率,然后实现在1hz的频率下交通灯状态的转换,同时倒计时功能也开始运行。

然后在1khz的频率下进行动态扫描,再加上数码管的七段显示即可。

交通灯的状态设计:

每个灯有三种状态:

红、绿、黄。

又因为每个灯由2个开关来控制,所以四个灯设定四个变量sn[1:

0]、ns[1:

0]、ew[1:

0]、we[1:

0]分别代表南北、东西方向的灯。

其中01代表绿灯,10代表红灯,11代表黄灯。

灯状态的循环设计:

第一个状态(state0):

绿

红红:

该状态维持17s,we红灯23s倒计时到

绿6s,sn绿灯17s倒计时到0s。

第二个状态(state1):

红红:

该状态维持3s,we红灯倒计时6s到

黄3s,sn黄灯倒计时3s到0s。

第三个状态(state2):

红红:

该状态维持3s,we红灯倒计时3s到

红0s,sn红灯23s倒计时到20s。

第四个状态(state3):

绿绿:

该状态维持17s,we绿灯17s倒计时到

红0s,sn红灯20s倒计时到3s。

第五个状态(state4):

黄黄:

该状态维持3s,we黄灯3s倒计时到0s,

红sn红灯3s倒计时到0s。

回到原始状态(state0):

绿

红红:

回到原始状态,构成一个循环。

绿

状态设计代码:

state0:

begin

//设定初状态:

南北方向为绿灯,东西方向为红灯(下面同理)

sn=2'b01;

ns=2'b01;

we=2'b10;

ew=2'b10;

if(gl==3'd0&&gh==3'd0&&rl==3'd0&&rh==3'd0)

begin

//设定红绿灯计时起点红灯23s绿灯17s(下面同理)

gl=3'd7;gh=3'd1;rl=3'd3;rh=3'd2;

end

else

begin

if(gl==0)

//十进制的减法设定(下面同理)

begingl=9;gh=gh-1;end

else

begingl=gl-1;end

if(rl==0)

beginrl=9;rh=rh-1;end

else

beginrl=rl-1;end

//判定状态是否结束(看绿灯倒计时是否到达0)(下面同理)

if(gl==3'd0&&gh==3'd0)

beginnext_state<=state1;end

end

end

state1:

begin

sn=2'b11;

ns=2'b11;

we=2'b10;

ew=2'b10;

if(yl==3'd0)

begin

yl=3'd3;rl=3'd6;rh=3'd0;

end

else

begin

beginyl=yl-1;end

beginrl=rl-1;end

if(yl==0)

beginnext_state<=state2;end

end

end

state2:

begin

sn=2'b10;

ns=2'b10;

we=2'b10;

ew=2'b10;

if(yl==3'd0&&yh==3'd0)

begin

rl=3'd3;rh=3'd2;yl=3'd3;

end

else

begin

beginrl=rl-1;yl=yl-1;end

if(yl==0)

beginnext_state<=state3;end

end

end

state3:

begin

sn=2'b10;

ns=2'b10;

we=2'b01;

ew=2'b01;

if(yl==3'd0&&yh==3'd0)

begin

rl=3'd0;rh=3'd2;yl=3'd7;yh=3'd1;

end

else

begin

if(rl==0)

beginrl=9;rh=rh-1;end

else

beginrl=rl-1;end

if(yl==0)

beginyl=9;yh=yh-1;end

else

beginyl=yl-1;end

if(yl==3'd0&&yh==3'd0)

beginnext_state<=state4;end

end

end

state4:

begin

sn=2'b10;

ns=2'b10;

we=2'b11;

ew=2'b11;

if(yl==3'd0&&yh==3'd0)

begin

rl=3'd3;yl=3'd3;

end

else

begin

beginrl=rl-1;yl=yl-1;end

if(rl==3'd0&&yl==3'd0)

beginnext_state<=state0;end

end

end

分频技术的实现:

接入6M的频率,先分成1khz的频率,在由1khz的频率分出1hz的频率。

分频代码:

//1khz

always@(posedgeclk)//注:

接入6M的频率

begin

if(count1=='d3000)

begin

clk1khz<=~clk1khz;

count1<=4'd0;

end

else

count1<=count1+4'd1;

end

//1hz

always@(posedgeclk1khz)

begin

if(count2=='d500)

begin

clk1hz<=~clk1hz;

count2<=4'd0;

end

else

count2<=count2+1'd1;

数码管的显示:

数码管的显示,因为需要同时显示两位数字,故要用到数码管扫描;其次要进行显示,要七段显示译码器。

数码管的扫描代码:

wei[3:

0]代表八位数码管的八位,在此因为只需显示4位故只将wei只用4位。

//该部分作用是让数码管在1hkz下不断的快速扫描,照成它们同时显示的错觉。

always@(posedgeclk1khz)

if(wei==3'd3)

begin

wei=3'd0;

end

else

wei<=wei+3'd1;

//该部分的num[3:

0]是提供给七段显示器的,而weiscan[7:

0]是用于决定数码管哪一位亮的。

always@(wei)

begin

case(wei)

3'b000:

begin

num[3:

0]<=l[3:

0];weiscan[7:

0]<=8'b00000001;

end

3'b001:

begin

num[3:

0]<=h[3:

0];weiscan[7:

0]<=8'b00000010;

end

3'b010:

begin

num[3:

0]<=l1[3:

0];weiscan[7:

0]<=8'b00000100;

end

3'b011:

begin

num[3:

0]<=h1[3:

0];weiscan[7:

0]<=8'b00001000;

end

endcase

end

倒计时的显示设计:

每一个状态显示的时间和亮的灯的颜色都不一样。

所以每个状态时,计时的变量都应改变,才能使得数码管正常显示。

代码如下:

case(state)

state0:

beginl=gl;h=gh;l1=rl;h1=rh;end

state1:

beginl=yl;h=yh;l1=rl;h1=rh;end

state2:

beginl=rl;h=rh;l1=yl;h1=yh;end

state3:

beginl=rl;h=rh;l1=yl;h1=yh;end

state4:

beginl=rl;h=rh;l1=yl;h1=yh;end

endcase

end

调试与实验结果

调试:

将代码中always部分中的常来clk1hkz和常来clk1hz都改为clk,然后进行编译,并建立一个vectorwaveformfile文件,找到所有的节点,就可以运行了。

仿真波形如下:

整体仿真图形:

weiscan[7:

0]的仿真图:

counter[7:

0]的仿真图:

 

引脚锁定:

下载到实验箱后,用导线将clk与p16接起,后接入6M频率即可。

实验结果:

实验交通灯变化正常,倒计时显示正常。

本次实验的心得;

本次实验经历了3个礼拜,完全由学生自主学习和实验,我对于这个实验一开始以为比较简单,可是动起手却没有思路。

经过查阅图书馆的资料才有那么一点思路,开始动手。

经过这次实验我学到了很多,学会数码管的扫描和状态的设定和转换。

 

附页(附总代码):

moduled20122756(clk,sn,we,ns,ew,counter,weiscan);

output[7:

0]weiscan;

reg[7:

0]weiscan;

inputclk;

output[1:

0]sn,we,ns,ew;

output[6:

0]counter;

reg[6:

0]counter;

reg[1:

0]sn,we,ns,ew;

reg[3:

0]rl,rh,yl,yh,gl,gh;

reg[3:

0]wei,num;

regclk1khz,clk1hz;

reg[12:

0]count1;

reg[8:

0]count2;

reg[3:

0]l,h,l1,h1;

reg[2:

0]state,next_state;

parameterstate0=0,state1=1,state2=2,state3=3,state4=4;//1khz

always@(posedgeclk)

begin

if(count1=='d3000)

begin

clk1khz<=~clk1khz;

count1<=4'd0;

end

elsecount1<=count1+4'd1;

end

//1hz

always@(posedgeclk1khz)

begin

if(count2=='d500)

begin

clk1hz<=~clk1hz;

count2<=4'd0;

end

elsecount2<=count2+1'd1;

if(wei==3'd3)

begin

wei=3'd0;

end

elsewei<=wei+3'd1;

case(state)

state0:

beginl=gl;h=gh;l1=rl;h1=rh;end

state1:

beginl=yl;h=yh;l1=rl;h1=rh;end

state2:

beginl=rl;h=rh;l1=yl;h1=yh;end

state3:

beginl=rl;h=rh;l1=yl;h1=yh;end

state4:

beginl=rl;h=rh;l1=yl;h1=yh;end

endcase

end

always@(posedgeclk1hz)

begin

state=next_state;

case(state)

state0:

begin

sn=2'b01;

ns=2'b01;

we=2'b10;

ew=2'b10;

if(gl==3'd0&&gh==3'd0&&rl==3'd0&&rh==3'd0)

begin

gl=3'd7;gh=3'd1;rl=3'd3;rh=3'd2;

end

else

begin

if(gl==0)

begingl=9;gh=gh-1;end

elsebegingl=gl-1;end

if(rl==0)

beginrl=9;rh=rh-1;end

elsebeginrl=rl-1;end

if(gl==3'd0&&gh==3'd0)

beginnext_state<=state1;end

end

end

state1:

begin

sn=2'b11;

ns=2'b11;

we=2'b10;

ew=2'b10;

if(yl==3'd0)

begin

yl=3'd3;rl=3'd6;rh=3'd0;

end

else

begin

beginyl=yl-1;end

beginrl=rl-1;end

if(yl==0)

beginnext_state<=state2;end

end

end

 

state2:

begin

sn=2'b10;

ns=2'b10;

we=2'b10;

ew=2'b10;

if(yl==3'd0&&yh==3'd0)

begin

rl=3'd3;rh=3'd2;yl=3'd3;

end

else

begin

beginrl=rl-1;yl=yl-1;end

if(yl==0)

beginnext_state<=state3;end

end

end

state3:

begin

sn=2'b10;

ns=2'b10;

we=2'b01;

ew=2'b01;

if(yl==3'd0&&yh==3'd0)

begin

rl=3'd0;rh=3'd2;yl=3'd7;yh=3'd1;

end

else

begin

if(rl==0)

beginrl=9;rh=rh-1;end

elsebeginrl=rl-1;end

if(yl==0)

beginyl=9;yh=yh-1;end

elsebeginyl=yl-1;end

if(yl==3'd0&&yh==3'd0)

beginnext_state<=state4;end

end

end

state4:

begin

sn=2'b10;

ns=2'b10;

we=2'b11;

ew=2'b11;

if(yl==3'd0&&yh==3'd0)

begin

rl=3'd3;yl=3'd3;

end

else

begin

beginrl=rl-1;yl=yl-1;end

if(rl==3'd0&&yl==3'd0)

beginnext_state<=state0;end

end

end

endcase

end

always@(wei)

begin

case(wei)

3'b000:

beginnum[3:

0]<=l[3:

0];weiscan[7:

0]<=8'b00000001;end

3'b001:

beginnum[3:

0]<=h[3:

0];weiscan[7:

0]<=8'b00000010;end

3'b010:

beginnum[3:

0]<=l1[3:

0];weiscan[7:

0]<=8'b00000100;end

3'b011:

beginnum[3:

0]<=h1[3:

0];weiscan[7:

0]<=8'b00001000;end

endcase

end

always@(num)

begin

case(num)

4'b0000:

counter<=7'b1111110;//0

4'b0001:

counter<=7'b0110000;//1

4'b0010:

counter<=7'b1101101;//2

4'b0011:

counter<=7'b1111001;//3

4'b0100:

counter<=7'b0110011;//4

4'b0101:

counter<=7'b1011011;//5

4'b0110:

counter<=7'b1011111;//6

4'b0111:

counter<=7'b1110000;//7

4'b1000:

counter<=7'b1111111;//8

4'b1001:

counter<=7'b1111011;//9

default:

counter<=7'b0000000;//0

endcase

end

endmodule

RTLviewer:

 

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2