数字电子技术实验报告之交通灯设计.docx
- 文档编号:4681
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:20
- 大小:543.48KB
数字电子技术实验报告之交通灯设计.docx
《数字电子技术实验报告之交通灯设计.docx》由会员分享,可在线阅读,更多相关《数字电子技术实验报告之交通灯设计.docx(20页珍藏版)》请在冰点文库上搜索。
数字电子技术实验报告之交通灯设计
数字电子技术实验报告
交通灯的设计
姓名:
学号:
学院:
专业:
班级:
指导老师:
目录
一、实验目的与要求
二、实验设计
三、调试及实验结果
四、附页
一、实验目的及要求
实验目的:
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:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子技术 实验 报告 交通灯 设计