实验五交通灯控制电路实验Word文件下载.docx
《实验五交通灯控制电路实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验五交通灯控制电路实验Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。
![实验五交通灯控制电路实验Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/e0365a79-caf3-4597-8ef3-809b4e688259/e0365a79-caf3-4597-8ef3-809b4e6882591.gif)
系统时钟选择时钟模块的1KHz时钟,黄灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次,在显示时间小于5秒的时候,通车方向的黄灯以2Hz的频率闪烁。
系统中用S1按键进行复位。
四、实验步骤
1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个VHDLFile,打开VHDL编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,本次实验共分为四个进程源程序,每个进程程序分别实现一定的功能。
其具体的功能如下表17-2:
文件名称
完成功能
P1
实现分频产生1Hz计数脉冲和2Hz的黄灯闪烁脉冲
P2
十进制计数模块,控制显示灯点亮的时间
P3
控制灯的循环亮灭功能
P4
七段码管的扫描驱动与显示输出
所需实现的循环功能显示如下所示:
MGCR1分钟MYCR5秒钟MRCG20秒MRCY
5秒钟
4、编写完VHDL程序后,保存起来。
各程序源代码如下所示:
-------------------------------------
--Title:
源程序p1
--Author:
参考自网上
--Data:
2012-12-8
-----------------------------------------------------------------------------------------------------------
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
--------------------------------------------------------------------
ENTITYP1IS
PORT(CLK:
INSTD_LOGIC;
--时钟输入
CLK2HZ:
OUTSTD_LOGIC;
--输出2Hz闪烁时钟
CLK1HZ:
OUTSTD_LOGIC--输出1Hz计数时钟
);
ENDP1;
--------------------------------------------------------------------
ARCHITECTUREBEHAVEOFP1IS
SIGNALCLK_COUNT1:
STD_LOGIC_VECTOR(9DOWNTO0);
BEGIN
PROCESS(CLK)
IF(CLK'
EVENTANDCLK='
1'
)THEN
IF(CLK_COUNT1<
1000)THEN
CLK_COUNT1<
=CLK_COUNT1+1;
ELSE
="
0000000001"
;
ENDIF;
ENDPROCESS;
CLK1HZ<
=CLK_COUNT1(9);
CLK2HZ<
=CLK_COUNT1(8);
ENDBEHAVE;
源程序P2
ENTITYP2IS
PORT(CLK1HZ:
--输入计数1Hz脉冲
RST:
INSTD_LOGIC;
--复位时钟
SEC1,SEC10:
BUFFERINTEGERRANGE0TO9;
--十进制计数值
DIR_FLAG:
BUFFERSTD_LOGIC--方向标志
);
ENDP2;
ARCHITECTUREBEHAVEOFP2IS
SIGNALDIR_FLAG1:
STD_LOGIC;
PROCESS(CLK1HZ,RST)
IF(RST='
0'
SEC1<
=0;
SEC10<
=6;
DIR_FLAG<
='
DIR_FLAG1<
ELSIF(CLK1HZ'
EVENTANDCLK1HZ='
)THEN--实现sel1与sel10的十进制计数
IF(SEC1=0)THEN
=9;
IF(SEC10=0)THEN
IF(DIR_FLAG1='
)THEN
=1;
ELSE
=5;
=SEC10-1;
=SEC1-1;
IF(SEC1=0ANDSEC10=0)THEN
=NOTDIR_FLAG;
DIR_FLAG1<
=NOTDIR_FLAG1;
源程序P3
ENTITYP3IS
PORT(CLK2HZ:
ININTEGERRANGE0TO9;
--方向标志
--复位输入
MR,CR:
--红灯输出
MY,CY:
--黄灯输出
MG,CG:
OUTSTD_LOGIC--绿灯输出
ENDP3;
ARCHITECTUREBEHAVEOFP3IS
BEGIN
PROCESS(CLK2HZ,RST)
MR<
MG<
CR<
CG<
ELSE--正常运行
IF(SEC10>
0ORSEC1>
3)THEN
IF(DIR_FLAG='
)THEN--横向通行
PROCESS(CLK2HZ)--控制黄灯的闪烁
MY<
CY<
ELSIF(DIR_FLAG='
=CLK2HZ;
-------------------------------------
源程序P4
2012-12-8------------------------------------------------------------------------------------------------------------
ENTITYP4IS
PORT(
DISPLAY:
STD_LOGIC_VECTOR(6DOWNTO0);
--七段码管显示输出
--待显示十进制计数值
INSTD_LOGIC;
CLK:
--扫描时钟
SEG_SEL:
BUFFERSTD_LOGIC_VECTOR(2DOWNTO0)--七段码管扫描驱动
ENDP4;
ARCHITECTUREBEHAVEOFP4IS
SIGNALDISP_TEMP:
INTEGERRANGE0TO15;
SIGNALDISP_DECODE:
SIGNALDIRECTION:
PROCESS(DIR_FLAG)
)THEN--横向
DIRECTION<
=10;
ELSE--纵向
=11;
PROCESS(SEG_SEL)
CASE(SEG_SEL+1)IS
WHEN"
000"
=>
DISP_TEMP<
=DIRECTION;
001"
010"
=SEC10;
011"
=SEC1;
100"
101"
110"
111"
ENDCASE;
PROCESS(CLK)
)THEN--扫描累加
SEG_SEL<
=SEG_SEL+1;
DISPLAY<
=DISP_DECODE;
PROCESS(DISP_TEMP)--显示转换
CASEDISP_TEMPIS
WHEN0=>
DISP_DECODE<
0111111"
--'
WHEN1=>
0000110"
WHEN2=>
1011011"
2'
WHEN3=>
1001111"
3'
WHEN4=>
1100110"
4'
WHEN5=>
1101101"
5'
WHEN6=>
1111101"
6'
WHEN7=>
0000111"
7'
WHEN8=>
1111111"
8'
WHEN9=>
1101111"
9'
WHEN10=>
1001000"
WHEN11=>
0010100"
||'
WHENOTHERS=>
0000000"
--全灭
5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
直到完全通过。
后将每个进程文件转化为图像文件,再新建一个bdf文件,按要求将各各图形文件连接起来。
各模块连接图如下所示:
6、对bdf文件进行编译仿真无误后,依照按键开关、数字信号源、数码管与FPGA的管脚连接表或参照附录进行管脚分配。
分配完成后,再进行全编译一次,以使管脚分配生效。
7、用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
观察实验结果是否与自己的编程思想一致。
五、实验结果与现象
当设计文件加载到目标器件后,将时钟设定为1KHz。
交通灯模块的红、绿、黄LED发光管会模拟实际中的交通信号灯的变化。
初始状态为主干道,乡干道红灯全亮,后转换为主干道可行,乡干道禁行模式,此时,数码管上显示通行时间的倒计时为1分钟。
当倒计时到5秒时,黄灯开始闪烁。
频率为2hz。
到0秒时红绿灯开始转换,倒计时的时间变至25秒。
如此循环往复。
按下按键开关S1则从头开始显示和计数。
六、仿真波形分析
1、数码管计数过程在重复1分钟——20秒——1分钟这一计数过程,代表主干道亮绿灯乡干道亮红灯时间为1分钟,主干道亮红灯,乡干道亮绿灯时间为20秒。
2、重复过程
3、当RST=0时,数码管计数恢复初始值60,交通灯恢复初始状态全红。
结果如下所示:
7、实验心得与体会
本次实验中,在观察实验现象时出现了一个问题,那就是当按下复位按钮时,系统会复位到初始状态,即横向全亮红灯,纵向全亮绿灯,但是当持续按下复位按钮不动时,则出现全亮绿灯的情况,这在实际中是不合理的,经分析,可能是在设置复位功能出现了问题,即在复位时,仍然有状态传送给显示模块,整个的模块间仍按照未加复位时进行工作,鉴于此,我又在模块p2、p3模块中增加了一个状态标志,功能为当按下计数模块时,其余工作停止,只进行复位操作,但不按下时,则正常工作。