数字电子技术实验报告之交通灯设计Word下载.docx
- 文档编号:35199
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:20
- 大小:543.48KB
数字电子技术实验报告之交通灯设计Word下载.docx
《数字电子技术实验报告之交通灯设计Word下载.docx》由会员分享,可在线阅读,更多相关《数字电子技术实验报告之交通灯设计Word下载.docx(20页珍藏版)》请在冰点文库上搜索。
交通灯的状态设计:
每个灯有三种状态:
红、绿、黄。
又因为每个灯由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'
we=2'
b10;
ew=2'
if(gl==3'
d0&
&
gh==3'
rl==3'
rh==3'
d0)
begin
//设定红绿灯计时起点红灯23s绿灯17s(下面同理)
gl=3'
d7;
gh=3'
d1;
rl=3'
d3;
rh=3'
d2;
end
else
if(gl==0)
//十进制的减法设定(下面同理)
begingl=9;
gh=gh-1;
end
else
begingl=gl-1;
if(rl==0)
beginrl=9;
rh=rh-1;
else
beginrl=rl-1;
//判定状态是否结束(看绿灯倒计时是否到达0)(下面同理)
if(gl==3'
beginnext_state<
=state1;
end
end
state1:
b11;
if(yl==3'
yl=3'
d6;
d0;
else
beginyl=yl-1;
beginrl=rl-1;
if(yl==0)
beginnext_state<
=state2;
state2:
sn=2'
ns=2'
we=2'
ew=2'
yh==3'
rl=3'
yl=3'
yl=yl-1;
if(yl==0)
=state3;
end
state3:
yh=3'
beginrl=9;
beginrl=rl-1;
beginyl=9;
yh=yh-1;
else
beginyl=yl-1;
d0)
beginnext_state<
=state4;
state4:
if(rl==3'
yl==3'
=state0;
end
分频技术的实现:
接入6M的频率,先分成1khz的频率,在由1khz的频率分出1hz的频率。
分频代码:
//1khz
always@(posedgeclk)//注:
接入6M的频率
if(count1=='
d3000)
begin
clk1khz<
=~clk1khz;
count1<
=4'
else
count1<
=count1+4'
//1hz
always@(posedgeclk1khz)
if(count2=='
d500)
clk1hz<
=~clk1hz;
count2<
count2<
=count2+1'
数码管的显示:
数码管的显示,因为需要同时显示两位数字,故要用到数码管扫描;
其次要进行显示,要七段显示译码器。
数码管的扫描代码:
wei[3:
0]代表八位数码管的八位,在此因为只需显示4位故只将wei只用4位。
//该部分作用是让数码管在1hkz下不断的快速扫描,照成它们同时显示的错觉。
always@(posedgeclk1khz)
if(wei==3'
d3)
wei=3'
wei<
=wei+3'
//该部分的num[3:
0]是提供给七段显示器的,而weiscan[7:
0]是用于决定数码管哪一位亮的。
always@(wei)
begin
case(wei)
3'
b000:
num[3:
0]<
=l[3:
0];
weiscan[7:
=8'
b00000001;
3'
b001:
begin
num[3:
=h[3:
b00000010;
b010:
=l1[3:
b00000100;
b011:
=h1[3:
b00001000;
endcase
倒计时的显示设计:
每一个状态显示的时间和亮的灯的颜色都不一样。
所以每个状态时,计时的变量都应改变,才能使得数码管正常显示。
代码如下:
case(state)
state0:
beginl=gl;
h=gh;
l1=rl;
h1=rh;
state1:
beginl=yl;
h=yh;
state2:
beginl=rl;
h=rh;
l1=yl;
h1=yh;
state3:
state4:
endcase
调试与实验结果
调试:
将代码中always部分中的常来clk1hkz和常来clk1hz都改为clk,然后进行编译,并建立一个vectorwaveformfile文件,找到所有的节点,就可以运行了。
仿真波形如下:
整体仿真图形:
0]的仿真图:
counter[7:
引脚锁定:
下载到实验箱后,用导线将clk与p16接起,后接入6M频率即可。
实验结果:
实验交通灯变化正常,倒计时显示正常。
本次实验的心得;
本次实验经历了3个礼拜,完全由学生自主学习和实验,我对于这个实验一开始以为比较简单,可是动起手却没有思路。
经过查阅图书馆的资料才有那么一点思路,开始动手。
经过这次实验我学到了很多,学会数码管的扫描和状态的设定和转换。
附页(附总代码):
moduled20122756(clk,sn,we,ns,ew,counter,weiscan);
output[7:
0]weiscan;
reg[7:
inputclk;
output[1:
0]sn,we,ns,ew;
output[6:
0]counter;
reg[6:
reg[1:
reg[3:
0]rl,rh,yl,yh,gl,gh;
0]wei,num;
regclk1khz,clk1hz;
reg[12:
0]count1;
reg[8:
0]count2;
0]l,h,l1,h1;
reg[2:
0]state,next_state;
parameterstate0=0,state1=1,state2=2,state3=3,state4=4;
always@(posedgeclk)
elsecount1<
elsecount2<
if(wei==3'
elsewei<
end
always@(posedgeclk1hz)
state=next_state;
if(gl==3'
if(gl==0)
elsebegingl=gl-1;
elsebeginrl=rl-1;
if(yl==0)
elsebeginyl=yl-1;
if(yl==3'
beginnum[3:
always@(num)
case(num)
4'
b0000:
counter<
=7'
b1111110;
//0
b0001:
b0110000;
//1
b0010:
b1101101;
//2
b0011:
b1111001;
//3
b0100:
b0110011;
//4
b0101:
b1011011;
//5
b0110:
b1011111;
//6
b0111:
b1110000;
//7
b1000:
b1111111;
//8
b1001:
b1111011;
//9
default:
b0000000;
endmodule
RTLviewer:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子技术 实验 报告 交通灯 设计