交通灯实验报告Word文件下载.docx
- 文档编号:16408965
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:12
- 大小:64.77KB
交通灯实验报告Word文件下载.docx
《交通灯实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《交通灯实验报告Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
支干道上的绿灯亮6秒、闪烁3秒及黄灯亮2秒,主干道上的红灯亮11秒。
5、主干道上绿灯亮的时间为8秒,数码管显示起始时间7秒,然后依次递减至0,绿灯闪烁3秒,黄灯亮的时间为2秒(这段时间数码管不显示)。
支干道红灯亮的时间为13秒,数码管显示起始时间为12秒,然后依次递减至0。
6、支干道上绿灯亮的时间为6秒,数码管显示起始时间5秒,然后依次递减至0,绿灯闪烁3秒,黄灯亮的时间为2秒(这段时间数码管不显示),主干道红灯亮的时间为11秒,数码管显示起始时间为10秒,然后依次递减至0。
三、设计方案
1、对频率输入的考虑
交通灯等所需的频率只有两种:
1Hz和2Hz。
利用4M频率经过20、21次分频后可得到。
2、对交通灯控制部分的考虑
利用24个状态作为一个周期,可采用真值表法进行列写。
3、建一个七段译码的模块益以及一个点阵显示模块,根据真值表,确立24个状态。
四、程序设计
1、设计思路:
首先,建一个24进制的计数器,每一次计数间隔均为一秒。
对每一秒确立主干道以及支干道上点阵的状态(红灯亮、绿灯亮、绿灯闪烁、黄灯亮)、以及两组数码管上的显示时数(具体数字或熄灭)。
其次进行分步实现:
对于点阵部分,以主干道交通灯为例,输入有时钟信号、二十四进制计数器的输出、红灯信号、绿灯信号、闪烁信号以及发光信号(常亮),输出有红灯显示和绿灯显示两部分。
建立if语句的逻辑关系,根据输入产生相应的输出。
如果输入信号表明此时为红灯显示时间,则输出部分红灯亮而绿灯灭;
如果输入信号表明此时为黄灯显示时间,则输出部分红等绿灯都需要点亮;
如果输入信号表明此时为红灯闪烁,则还需借助2Hz的时钟信号,当时钟为高电平,绿灯灭;
反之则绿灯亮。
对于数码管部分,以主干道交通灯为例,输入有二十四进制计数器的输出和2位时钟信号,因为主干道交通灯倒计时的状态仅仅与当前处在24个状态的哪一个相关。
数码管采用扫描方式,因为最多需要同时显示四位,则需要2位不同频率的高频的时钟信号。
举例来说,当2种信号都为高电平是,则显示个位数据,同时选定第一个数码管,以此类推。
最后对于本次实验暂不使用的二极管接上高电平使其熄灭。
2、程序清单:
24进制计数器count3.tdf
subdesign
count3
(
clk:
input;
q[4..0]:
output;
)
variable
count[4..0]:
dff;
begin
count[].clk=clk;
if
count[].q==23
then
count[].d=0;
else
count[].d=count[].q+1;
end
if;
q[]=count[];
end;
中央处理模块
main.tdf
main
incount[4..0]:
state[2..0]:
out1[3..0]:
out2[3..0]:
out3[3..0]:
out4[3..0]:
tringle:
digselect1:
%总共要点亮四个数码管,两个作为主干道,两个作为支干道%
digselect2:
begin
table
incount[4..0]=>
state[2..0],out1[3..0],out2[3..0],out3[3..0],out4[3..0],tringle,digselect1,digselect2;
h"
0"
=>
1,h"
h"
7"
1"
2"
0,1,1;
6"
5"
3"
4"
9"
8"
2,h"
1,0,1;
%主干道绿灯开始闪烁%
A"
B"
3,h"
0,0,1;
%黄灯亮%
C"
D"
4,h"
%主干道红灯亮%
E"
f"
10"
11"
12"
13"
5,h"
1,1,0;
14"
15"
16"
6,h"
0,1,0;
17"
table;
数码管编码模块
digselector.tdf
digselector
%主干道交通灯显示使能信号%
%支干道交通灯显示使能信号%
%时钟输入%
clk1:
digin1[3..0]:
%主干道十位数字%
digin2[3..0]:
%主干道各位数字%
digin3[3..0]:
%支干道十位数字%
digin4[3..0]:
%支干道个位数字%
out[3..0]:
%四个数码管的使能输入%
digout1[3..0]:
%主干道的数字输入%
!
clk
and
clk1
digselect1
out[0]=vcc;
digout1[3..0]
=
digin1[3..0];
elsif
out[1]=vcc;
digin2[3..0];
digselect2
out[2]=vcc;
digin3[3..0];
then
out[3]=vcc;
digin4[3..0];
8段译码器:
7segment.tdf
7segment
i[3..0]:
a,b,c,d,e,f,g,h:
i[3..0]=>
a,b,c,d,e,f,g,h;
0,0,0,0,0,0,1,1;
1,0,0,1,1,1,1,1;
0,0,1,0,0,1,0,1;
0,0,0,0,1,1,0,1;
1,0,0,1,1,0,0,1;
0,1,0,0,1,0,0,1;
0,1,0,0,0,0,0,1;
0,0,0,1,1,1,1,1;
0,0,0,0,0,0,0,1;
0,0,0,0,1,0,0,1;
点阵显示编码模块
state.tdf
state
instate[2..0]:
inputclk[2..0]:
row[8..1]:
outstate[16..1]:
green:
red:
case
instate[]
is
when
1
inputclk[2..0]=>
row[8..1],outstate[16..1],green,red;
%第一个状态,主干道绿灯亮,支干道红灯亮%
ffff"
0,0;
fffb"
0,1;
ffdd"
1,0;
20"
40"
80"
2
%第二个状态,主干道绿灯闪烁,支干道红灯亮%
3
%第三个状态,主干道黄灯亮,支干道红灯亮%
1,1;
4=>
%第四个状态,主干道红灯亮,支干道绿灯亮%
fff7"
5=>
%第五个状态,主干道红灯亮,支干道绿灯闪烁.%
6=>
%第六个状态,主干道红灯亮,支干道黄灯亮%
ffef"
case;
输出模块
expand.tdf
expand
instate[16..1]:
inputclk:
%用来闪烁%
dataout1[16..1]:
%输出红色%
dataout2[16..1]:
%输出绿色%
tringle
green
red
inputclk
dataout1[16..1]=h"
;
dataout2[16..1]=instate[16..1];
dataout2[16..1]=h"
dataout1[16..1]=instate[16..1];
and!
3、顶层逻辑设计图(管脚未锁定)
五、调试过程
应该说调试过程中遇到的最大困难就是让四位数码管正常显示了。
虽然在之前的实验二中有遇到过数码管,但当时只是随着教材依样画葫芦,一知半解,范例也相对简单,只要显示两位即可。
当时自己第一遍做的数码管也只能简单显示两位数字,一用上四位,立刻就乱套了,只有在主/支干道上亮黄灯即单独显示两位数字才正确。
通过一遍又一遍翻阅教材,在了解数码管扫描显示方式后,我明白了只有一位高频时钟信号对于显示4位数字是不够的。
所以我加了频率相近的高频时钟信号,使得在短时期内能顺利扫描4位。
之后的调试结果十分顺利,包括点阵的显示。
虽然在编译过程中,遇到错误,但基本能按照系统提示及时找到错误的根源并改正。
六、实验心得
在数字电路实验课上,我们学习了运用AHDL语言进行简单的逻辑器件编程,并对其语法、功能、应用范围以及其与软件之间的关系有了初步的了解。
俗话说,师傅领进门,修行在自身。
相比实验教材上的三个验证性实验,大作业要求的设计部分有一定难度。
考虑到想进一步提升对LED、点阵以及数码管的运用,我选择了实验四——十字路口交通管理信号灯的控制。
实验的基本要求与增强功能在此不在赘述。
虽然在实践中碰了不少壁,走了许多弯路,但回过头来,觉得收益颇多,不论是纠错能力还是思维的严密性。
是实践出真知,对于工科学生,在求学阶段多动手,多思考,哪怕是多遇到点困难也是非常重要的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 实验 报告