实验五交通灯控制电路实验.docx

上传人:b****4 文档编号:6144268 上传时间:2023-05-09 格式:DOCX 页数:14 大小:91.80KB
下载 相关 举报
实验五交通灯控制电路实验.docx_第1页
第1页 / 共14页
实验五交通灯控制电路实验.docx_第2页
第2页 / 共14页
实验五交通灯控制电路实验.docx_第3页
第3页 / 共14页
实验五交通灯控制电路实验.docx_第4页
第4页 / 共14页
实验五交通灯控制电路实验.docx_第5页
第5页 / 共14页
实验五交通灯控制电路实验.docx_第6页
第6页 / 共14页
实验五交通灯控制电路实验.docx_第7页
第7页 / 共14页
实验五交通灯控制电路实验.docx_第8页
第8页 / 共14页
实验五交通灯控制电路实验.docx_第9页
第9页 / 共14页
实验五交通灯控制电路实验.docx_第10页
第10页 / 共14页
实验五交通灯控制电路实验.docx_第11页
第11页 / 共14页
实验五交通灯控制电路实验.docx_第12页
第12页 / 共14页
实验五交通灯控制电路实验.docx_第13页
第13页 / 共14页
实验五交通灯控制电路实验.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验五交通灯控制电路实验.docx

《实验五交通灯控制电路实验.docx》由会员分享,可在线阅读,更多相关《实验五交通灯控制电路实验.docx(14页珍藏版)》请在冰点文库上搜索。

实验五交通灯控制电路实验.docx

实验五交通灯控制电路实验

南昌大学实验报告

学生姓名:

学号:

专业班级:

实验类型:

□验证□综合▉设计□创新实验日期:

12.14__实验成绩:

实验五交通灯控制电路实验

一、实验目的

1、了解交通灯的燃灭规律。

2、了解交通灯控制器的工作原理。

3、熟悉VHDL语言编程,了解实际设计中的优化方案。

二、实验原理

交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂,本设计实验仅针对最简单的南北和东西直行的情况。

要完成本实验,首先必须了解交通路灯的燃灭规律。

本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。

依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。

其交通灯的燃灭规律为:

初始态是两个路口的红灯全亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。

闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。

闪烁若干次后,再切换到东西路口方向,重复上述过程。

在实验中使用8个七段码管中的任意两个数码管显示时间。

东西路和南北路的通车时间分别设定为1分钟和25s。

在显示时间小于5秒的时候,通车方向的黄灯闪烁。

三、实验内容

本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和数码管模块。

系统时钟选择时钟模块的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)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IF(CLK_COUNT1<1000)THEN

CLK_COUNT1<=CLK_COUNT1+1;

ELSE

CLK_COUNT1<="0000000001";

ENDIF;

ENDIF;

ENDPROCESS;

CLK1HZ<=CLK_COUNT1(9);

CLK2HZ<=CLK_COUNT1(8);

ENDBEHAVE;

-------------------------------------

--Title:

源程序P2

--Author:

参考自网上

--Data:

2012-12-8

-----------------------------------------------------------------------------------------------------------

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

--------------------------------------------------------------------

ENTITYP2IS

PORT(CLK1HZ:

INSTD_LOGIC;--输入计数1Hz脉冲

RST:

INSTD_LOGIC;--复位时钟

SEC1,SEC10:

BUFFERINTEGERRANGE0TO9;--十进制计数值

DIR_FLAG:

BUFFERSTD_LOGIC--方向标志

);

ENDP2;

--------------------------------------------------------------------

ARCHITECTUREBEHAVEOFP2IS

SIGNALDIR_FLAG1:

STD_LOGIC;

BEGIN

PROCESS(CLK1HZ,RST)

BEGIN

IF(RST='0')THEN

SEC1<=0;

SEC10<=6;

DIR_FLAG<='0';DIR_FLAG1<='0';

ELSIF(CLK1HZ'EVENTANDCLK1HZ='1')THEN--实现sel1与sel10的十进制计数

IF(SEC1=0)THEN

SEC1<=9;

IF(SEC10=0)THEN

IF(DIR_FLAG1='0')THEN

SEC10<=1;

ELSE

SEC10<=5;

ENDIF;

ELSE

SEC10<=SEC10-1;

ENDIF;

ELSE

SEC1<=SEC1-1;

ENDIF;

IF(SEC1=0ANDSEC10=0)THEN

DIR_FLAG<=NOTDIR_FLAG;

DIR_FLAG1<=NOTDIR_FLAG1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDBEHAVE;

-------------------------------------

--Title:

源程序P3

--Author:

参考自网上

--Data:

2012-12-8

-----------------------------------------------------------------------------------------------------------

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

--------------------------------------------------------------------

ENTITYP3IS

PORT(CLK2HZ:

INSTD_LOGIC;--时钟输入

SEC1,SEC10:

ININTEGERRANGE0TO9;

DIR_FLAG:

INSTD_LOGIC;--方向标志

RST:

INSTD_LOGIC;--复位输入

MR,CR:

OUTSTD_LOGIC;--红灯输出

MY,CY:

OUTSTD_LOGIC;--黄灯输出

MG,CG:

OUTSTD_LOGIC--绿灯输出

);

ENDP3;

--------------------------------------------------------------------

ARCHITECTUREBEHAVEOFP3IS

BEGIN

PROCESS(CLK2HZ,RST)

BEGIN

IF(RST='0')THEN

MR<='1';

MG<='0';

CR<='1';

CG<='0';

ELSE--正常运行

IF(SEC10>0ORSEC1>3)THEN

IF(DIR_FLAG='0')THEN--横向通行

MR<='0';

MG<='1';

CR<='1';

CG<='0';

ELSE

MR<='1';

MG<='0';

CR<='0';

CG<='1';

ENDIF;

ELSE

IF(DIR_FLAG='0')THEN--横向通行

MR<='0';

MG<='0';

CR<='1';

CG<='0';

ELSE

MR<='1';

MG<='0';

CR<='0';

CG<='0';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK2HZ)--控制黄灯的闪烁

BEGIN

IF(SEC10>0ORSEC1>3)THEN

MY<='0';

CY<='0';

ELSIF(DIR_FLAG='0')THEN

MY<=CLK2HZ;

CY<='0';

ELSE

MY<='0';

CY<=CLK2HZ;

ENDIF;

ENDPROCESS;

ENDBEHAVE;

-------------------------------------

--Title:

源程序P4

--Author:

参考自网上

--Data:

2012-12-8------------------------------------------------------------------------------------------------------------

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

--------------------------------------------------------------------

ENTITYP4IS

PORT(

DISPLAY:

STD_LOGIC_VECTOR(6DOWNTO0);--七段码管显示输出

SEC1,SEC10:

ININTEGERRANGE0TO9;--待显示十进制计数值

DIR_FLAG:

INSTD_LOGIC;--方向标志

CLK:

INSTD_LOGIC;--扫描时钟

SEG_SEL:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0)--七段码管扫描驱动

);

ENDP4;

--------------------------------------------------------------------

ARCHITECTUREBEHAVEOFP4IS

SIGNALDISP_TEMP:

INTEGERRANGE0TO15;

SIGNALDISP_DECODE:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALDIRECTION:

INTEGERRANGE0TO15;

BEGIN

PROCESS(DIR_FLAG)

BEGIN

IF(DIR_FLAG='0')THEN--横向

DIRECTION<=10;

ELSE--纵向

DIRECTION<=11;

ENDIF;

ENDPROCESS;

PROCESS(SEG_SEL)

BEGIN

CASE(SEG_SEL+1)IS

WHEN"000"=>DISP_TEMP<=DIRECTION;

WHEN"001"=>DISP_TEMP<=DIRECTION;

WHEN"010"=>DISP_TEMP<=SEC10;

WHEN"011"=>DISP_TEMP<=SEC1;

WHEN"100"=>DISP_TEMP<=DIRECTION;

WHEN"101"=>DISP_TEMP<=DIRECTION;

WHEN"110"=>DISP_TEMP<=SEC10;

WHEN"111"=>DISP_TEMP<=SEC1;

ENDCASE;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN--扫描累加

SEG_SEL<=SEG_SEL+1;

DISPLAY<=DISP_DECODE;

ENDIF;

ENDPROCESS;

PROCESS(DISP_TEMP)--显示转换

BEGIN

CASEDISP_TEMPIS

WHEN0=>DISP_DECODE<="0111111";--'0'

WHEN1=>DISP_DECODE<="0000110";--'1'

WHEN2=>DISP_DECODE<="1011011";--'2'

WHEN3=>DISP_DECODE<="1001111";--'3'

WHEN4=>DISP_DECODE<="1100110";--'4'

WHEN5=>DISP_DECODE<="1101101";--'5'

WHEN6=>DISP_DECODE<="1111101";--'6'

WHEN7=>DISP_DECODE<="0000111";--'7'

WHEN8=>DISP_DECODE<="1111111";--'8'

WHEN9=>DISP_DECODE<="1101111";--'9'

WHEN10=>DISP_DECODE<="1001000";--'='

WHEN11=>DISP_DECODE<="0010100";--'||'

WHENOTHERS=>DISP_DECODE<="0000000";--全灭

ENDCASE;

ENDPROCESS;

ENDBEHAVE;

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模块中增加了一个状态标志,功能为当按下计数模块时,其余工作停止,只进行复位操作,但不按下时,则正常工作。

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

当前位置:首页 > 自然科学 > 物理

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

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