实验五 交通灯实验.docx

上传人:b****3 文档编号:5484431 上传时间:2022-12-17 格式:DOCX 页数:21 大小:223.33KB
下载 相关 举报
实验五 交通灯实验.docx_第1页
第1页 / 共21页
实验五 交通灯实验.docx_第2页
第2页 / 共21页
实验五 交通灯实验.docx_第3页
第3页 / 共21页
实验五 交通灯实验.docx_第4页
第4页 / 共21页
实验五 交通灯实验.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验五 交通灯实验.docx

《实验五 交通灯实验.docx》由会员分享,可在线阅读,更多相关《实验五 交通灯实验.docx(21页珍藏版)》请在冰豆网上搜索。

实验五 交通灯实验.docx

实验五交通灯实验

南昌大学实验报告

学生姓名:

学号:

6100210173专业班级:

中兴101班

实验类型:

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

2012

实验五十字路口交通灯控制器设计

一、实验目的

1)熟悉状态机的使用;

2)熟悉多进程程序设计;

3)熟悉实验设备和软件,掌握实验操作。

二、实验内容和要求

1、一条主干道,一条乡间公路。

组成十字路口,要求优先保证主干道通行。

有MR(主红)、MY(主黄)、MG(主绿)、BR(乡红)、BY(乡黄)、BG(乡绿)六盏交通灯需要控制;交通灯由绿→红有5秒黄灯亮的间隔时间,由红→绿没有间隔时间;系统有MRBY、MRBG、MYBR、MGBR四个状态;

2、乡间公路右侧埋有一个传感器,当有车辆通过乡间公路时,发出请求信号SB=1,

余时间S=0;主干道也有一个,当有车经过的时候,发出请求信号SM=1;

3、平时系统停留在MGBR(主干道通行)状态,一旦SB信号有效,经MYBR(黄灯状态)转入MRBG(乡间公路通行)状态,但要保证MGBR的状态不得短于45s;一旦SB信号无效,系统脱离MRBG状态。

随即经MRBY(黄灯状态)进入MGBR状态,即使SB信号一直有效,MRBG状态也不得长于25秒钟。

三、设计思想

1、程序部共分为五大模块

1、五秒倒计时

2、二十五秒倒计时

3、四十五秒倒计时

4、状态机设计

5、数码管选择并分配

其中有一个问题,计时时钟和数码管选择不能使用一个时钟,因为数码管选择需要很高频率的时钟,而计时时钟需要1HZ时钟,因此在结构体中还有一个进程,用于把CLKS数码管选择时钟分频后得到CLK,把它用于计时时钟。

2、程序设计所要达到的效果

开始,SM=0、SB=0,处于主绿从红的状态,且这时数码管不计数。

若SM=1(主有车)、SB=0(从无车),状态不变;若SM=0、SB=1,此时主干道由绿变黄再变红,而从干道待主干道变红时即变绿;若SM=1、SB=1,此时数码管进行45s倒计时后,转入主黄从红的状态,计时5s后转入主红从绿的状态,计时25s后,在转入主红从黄的状态,最后计时5s后又从新回到主绿从黄的状态。

若在状态进行转换的时候SM、SB的状态发生了变化,即按上述SM、SB如何变化进行状态转换。

 

3、状态转移图如下(仅当SM=1时)

SB=0C<5

SB=1C>45s

MGBRMYBR

SB=1

5秒后5秒后

C<5

SB=1C<25

MRBYMRBG

SB=1C>25

 

四、

试验程序

实验总框图

 

--1000分频程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcou1IS

GENERIC(N:

INTEGER:

=4);--定义一个generic

PORT(CLK:

INSTD_LOGIC;

CLK1:

OUTSTD_LOGIC);

ENDcou1;

ARCHITECTUREbehavOFcou1IS

SIGNALCNT:

STD_LOGIC_VECTOR(9DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN--产生一个占空比为50%的方波

IFCNT>=N/2-1THENCLK1<='1';CNT<=CNT+1;

IFCNT=N-1THENCLK1<='0';CNT<="0000000000";

ENDIF;

ELSECLK1<='0';CNT<=CNT+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREbehav;

--状态控制程序

--JTDKZ.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYJTDKZIS

PORT(CLK,SM,SB:

INSTD_LOGIC;--MR:

主干道红灯MY:

主黄MG:

主绿

MR,MY,MG,BR,BY,BG:

OUTSTD_LOGIC);--BR:

从干道红灯BY:

从黄BG:

从绿

--以上信号为1时点亮相应的灯

ENDENTITYJTDKZ;--SM=1主干道有车SM=0主干道无车

ARCHITECTUREARTOFJTDKZIS--SB=1从干道有车SB=0从干道无车

TYPESTATE_TYPEIS(A,B,C,D);

SIGNALSTATE:

STATE_TYPE;

BEGIN

CNT:

PROCESS(CLK)IS

VARIABLES:

INTEGERRANGE0TO45;

VARIABLECLR,EN:

BIT;

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IFCLR='0'THEn

S:

=0;

ELSIFEN='0'THEN

S:

=S;

ELSE

S:

=S+1;

ENDIF;

CASESTATEIS

WHENA=>MR<='0';MY<='0';MG<='1';--状态一:

主绿从红

BR<='1';BY<='0';BG<='0';

IF(SBANDSM)='1'THEN--主从干道都有车时进行45s倒

IFS=45THEN--计时,计完后转入状态二

STATE<=B;CLR:

='0';EN:

='0';

ELSE

STATE<=A;CLR:

='1';EN:

='1';

ENDIF;

ELSIF(SBAND(NOTSM))='1'THEN--主干道无车,从干道有车转到状态二

STATE<=B;CLR:

='0';EN:

='0';

ELSE

STATE<=A;CLR:

='1';EN:

='1';

ENDIF;

WHENB=>MR<='0';MY<='1';MG<='0';--状态二:

主黄从红

BR<='1';BY<='0';BG<='0';

IFS=5THEN--5s倒计时,计完转入状态三

STATE<=C;CLR:

='0';EN:

='0';

ELSE

STATE<=B;CLR:

='1';EN:

='1';

ENDIF;

WHENC=>MR<='1';MY<='0';MG<='0';--状态三:

主红从绿

BR<='0';BY<='0';BG<='1';

IF(SMANDSB)='1'THEN--主从干道都有车,25s倒计时后转入

IFS=25THEN--状态四

STATE<=D;CLR:

='0';EN:

='0';

ELSE

STATE<=C;CLR:

='1';EN:

='1';

ENDIF;

ELSIFSB='0'THEN--若从干道此时无车,直接转入状态四

STATE<=D;CLR:

='0';EN:

='0';

ELSE

STATE<=C;CLR:

='1';EN:

='1';

ENDIF;

WHEND=>MR<='1';MY<='0';MG<='0';--状态四:

主红从黄

BR<='0';BY<='1';BG<='0';

IFS=5THEN--5s倒计时后转入状态一

STATE<=A;CLR:

='0';EN:

='0';

ELSE

STATE<=D;CLR:

='1';EN:

='1';

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESSCNT;

ENDARCHITECTUREART;

 

--45s延时

--CNT45S.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT45SIS

PORT(SB,CLK,EN45:

INSTD_LOGIC;

DOUT45M,DOUT45B:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDENTITYCNT45S;

ARCHITECTUREARTOFCNT45SIS

SIGNALCNT6B:

STD_LOGIC_VECTOR(5DOWNTO0);

BEGIN

PROCESS(SB,CLK,EN45)IS

BEGIN

IFSB='0'THENCNT6B<=CNT6B-CNT6B-1;--若从干道无车,不计时

ELSIF(CLK'EVENTANDCLK='1')THEN

IFEN45='1'THENCNT6B<=CNT6B+1;

ELSIFEN45='0'THENCNT6B<=CNT6B-CNT6B-1;--若主干道不是绿灯不计时

ENDIF;

ENDIF;

ENDPROCESS;----将顺序计数转化为倒序45sBCD码计数

PROCESS(CNT6B)IS----DOUT45M从45到0;DOUT45B从50到5,然后从5直接变到0,

BEGIN----因为在状态二的时候有5S黄灯时间需要在从干道上显示,从干道

CASECNT6BIS--上的人累计等待时间50s

WHEN"000000"=>DOUT45M<="01000101";DOUT45B<="01010000";

WHEN"000001"=>DOUT45M<="01000100";DOUT45B<="01001001";

WHEN"000010"=>DOUT45M<="01000011";DOUT45B<="01001000";

WHEN"000011"=>DOUT45M<="01000010";DOUT45B<="01000111";

WHEN"000100"=>DOUT45M<="01000001";DOUT45B<="01000110";

WHEN"000101"=>DOUT45M<="01000000";DOUT45B<="01000101";

WHEN"000110"=>DOUT45M<="00111001";DOUT45B<="01000100";

WHEN"000111"=>DOUT45M<="00111000";DOUT45B<="01000011";

WHEN"001000"=>DOUT45M<="00110111";DOUT45B<="01000010";

WHEN"001001"=>DOUT45M<="00110110";DOUT45B<="01000001";

WHEN"001010"=>DOUT45M<="00110101";DOUT45B<="01000000";

WHEN"001011"=>DOUT45M<="00110100";DOUT45B<="01101001";

WHEN"001100"=>DOUT45M<="00110011";DOUT45B<="00111000";

WHEN"001101"=>DOUT45M<="00110010";DOUT45B<="00110111";

WHEN"001110"=>DOUT45M<="00110001";DOUT45B<="00110110";

WHEN"001111"=>DOUT45M<="00110000";DOUT45B<="00110101";

WHEN"010000"=>DOUT45M<="00101001";DOUT45B<="00110100";

WHEN"010001"=>DOUT45M<="00101000";DOUT45B<="00110011";

WHEN"010010"=>DOUT45M<="00100111";DOUT45B<="00110010";

WHEN"010011"=>DOUT45M<="00100110";DOUT45B<="00110001";

WHEN"010100"=>DOUT45M<="00100101";DOUT45B<="00110000";

WHEN"010101"=>DOUT45M<="00100100";DOUT45B<="00101001";

WHEN"010110"=>DOUT45M<="00100011";DOUT45B<="00101000";

WHEN"010111"=>DOUT45M<="00100010";DOUT45B<="00100111";

WHEN"011000"=>DOUT45M<="00100001";DOUT45B<="00100110";

WHEN"011001"=>DOUT45M<="00100000";DOUT45B<="00100101";

WHEN"011010"=>DOUT45M<="00011001";DOUT45B<="00100100";

WHEN"011011"=>DOUT45M<="00011000";DOUT45B<="00100011";

WHEN"011100"=>DOUT45M<="00010111";DOUT45B<="00100010";

WHEN"011101"=>DOUT45M<="00010110";DOUT45B<="00100001";

WHEN"011110"=>DOUT45M<="00010101";DOUT45B<="00100000";

WHEN"011111"=>DOUT45M<="00010100";DOUT45B<="00011001";

WHEN"100000"=>DOUT45M<="00010011";DOUT45B<="00011000";

WHEN"100001"=>DOUT45M<="00010010";DOUT45B<="00010111";

WHEN"100010"=>DOUT45M<="00010001";DOUT45B<="00010110";

WHEN"100011"=>DOUT45M<="00010000";DOUT45B<="00010101";

WHEN"100100"=>DOUT45M<="00001001";DOUT45B<="00010100";

WHEN"100101"=>DOUT45M<="00001000";DOUT45B<="00010011";

WHEN"100110"=>DOUT45M<="00000111";DOUT45B<="00010010";

WHEN"100111"=>DOUT45M<="00000110";DOUT45B<="00010001";

WHEN"101000"=>DOUT45M<="00000101";DOUT45B<="00010000";

WHEN"101001"=>DOUT45M<="00000100";DOUT45B<="00001001";

WHEN"101010"=>DOUT45M<="00000011";DOUT45B<="00001000";

WHEN"101011"=>DOUT45M<="00000010";DOUT45B<="00000111";

WHEN"101100"=>DOUT45M<="00000001";DOUT45B<="00000110";

WHENOTHERS=>DOUT45M<="00000000";DOUT45B<="00000000";

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREART;

--25s延时(与45s延时编程思想一样,这里不做说明了)

--CNT25S.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT25SIS

PORT(SB,SM,CLK,EN25:

INSTD_LOGIC;

DOUT25M,DOUT25B:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDENTITYCNT25S;

ARCHITECTUREARTOFCNT25SIS

SIGNALCNT5B:

STD_LOGIC_VECTOR(4DOWNTO0);

BEGIN

PROCESS(SB,SM,CLK,EN25)IS

BEGIN

IFSB='0'ORSM='0'THEN

CNT5B<=CNT5B-CNT5B-1;

ELSIF(CLK'EVENTANDCLK='1')THEN

IFEN25='1'THEN

CNT5B<=CNT5B+1;

ELSIFEN25='0'THEN

CNT5B<=CNT5B-CNT5B-1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CNT5B)IS

BEGIN

CASECNT5BIS

WHEN"00000"=>DOUT25B<="00100101";DOUT25M<="00110000";

WHEN"00001"=>DOUT25B<="00100100";DOUT25M<="00101001";

WHEN"00010"=>DOUT25B<="00100011";DOUT25M<="00101000";

WHEN"00011"=>DOUT25B<="00100010";DOUT25M<="00100111";

WHEN"00100"=>DOUT25B<="00100001";DOUT25M<="00100110";

WHEN"00101"=>DOUT25B<="00100000";DOUT25M<="00100101";

WHEN"00110"=>DOUT25B<="00011001";DOUT25M<="00100100";

WHEN"00111"=>DOUT25B<="00011000";DOUT25M<="00100011";

WHEN"01000"=>DOUT25B<="00010111";DOUT25M<="00100010";

WHEN"01001"=>DOUT25B<="00010110";DOUT25M<="00100001";

WHEN"01010"=>DOUT25B<="00010101";DOUT25M<="00100000";

WHEN"01011"=>DOUT25B<="00010100";DOUT25M<="00011001";

WHEN"01100"=>DOUT25B<="00010011";DOUT25M<="00011000";

WHEN"01101"=>DOUT25B<="00010010";DOUT25M<="00010111";

WHEN"01110"=>DOUT25B<="00010001";DOUT25M<="00010110";

WHEN"01111"=>DOUT25B<="00010000";DOUT25M<="00010101";

WHEN"10000"=>DOUT25B<="00001001";DOUT25M<="00010100";

WHEN"10001"=>DOUT25B<="00001000";DOUT25M<="00010011";

WHEN"10010"=>DOUT25B<="00000111";DOUT25M<="00010010";

WHEN"10011"=>DOUT25B<="00000110";DOUT25M<="00010001";

WHEN"10100"=>DOUT25B<="00000101";DOUT25M<="00010000";

WHEN"10101"=>DOUT25B<="00000100";DOUT25M<="00001001";

WHEN"10110"=>DOUT25B<="00000011";DOUT25M<="00001000";

WHEN"10111"=>DOUT25B<="00000010";DOUT25M<="00000111";

WHEN"11000"=>DOUT25B<="00000001";DOUT25M<="00000110";

WHENOTHERS=>DOUT25B<="00000000";DOUT25M<="00000000";

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREART;

--5s延时(与45s类似)

--CNT05S.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT05SIS

PORT(CLK,EN05M,EN05B:

INSTD_LOGIC;

DOUT5:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDENTITYCNT05S;

ARCHITECTUREARTOFCNT05SIS

SIGNALCNT3B:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

PROCESS(CLK,EN05M,EN05B)IS

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IFEN05M='1'OREN05B='1'THEN

CNT3B<=CNT3B+1;

ELSE

CNT3B<="000";

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CNT3B)IS

BEGIN

CASECNT3BIS

WHEN"000"=>DOUT5<="00000101";

WHEN"001"=>DOUT5<="00000100";

WHEN"010"=>DOUT5<="00000011";

WHEN"011"=>DOUT5<="00000010";

WHEN"100"=>DOUT5<="00000001";

WHENOTHERS=>--DOUT5<="00000000";

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREART;

--数码管显示控制程序

--XSKZ.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_11

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

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1