交通灯控制系统终结版Word格式文档下载.docx

上传人:b****6 文档编号:19911126 上传时间:2023-01-12 格式:DOCX 页数:22 大小:228.78KB
下载 相关 举报
交通灯控制系统终结版Word格式文档下载.docx_第1页
第1页 / 共22页
交通灯控制系统终结版Word格式文档下载.docx_第2页
第2页 / 共22页
交通灯控制系统终结版Word格式文档下载.docx_第3页
第3页 / 共22页
交通灯控制系统终结版Word格式文档下载.docx_第4页
第4页 / 共22页
交通灯控制系统终结版Word格式文档下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

交通灯控制系统终结版Word格式文档下载.docx

《交通灯控制系统终结版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《交通灯控制系统终结版Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。

交通灯控制系统终结版Word格式文档下载.docx

ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。

而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。

在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所设置的功能。

因此,键信息输入是与软件结构密切相关的过程。

根据键盘的结构不同,采用不同的编码方法。

但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。

现在是一个知识爆炸的新时代。

新产品、新技术层出不穷,电子技术的发展更是日新月异。

可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。

在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。

因此我们需要一个定时系统来提醒这些忙碌的人。

数字化的钟表给人们带来了极大的方便。

近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。

多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。

2课程设计要求

随着各种交通工具的发展和交通指挥的需要,交通灯的诞生大大改善了城市交通状况。

要求设计一个交通灯控制器,控制十字路口主、支两条道路的红、绿、黄三色灯,指挥车辆和行人的安全通行。

具体要求:

设计一个十字路口的交通灯控制器,能显示十字路口东西、南北两个方向红、黄、绿灯的指示状态。

用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向红、黄、绿等。

变化规律为:

东西绿灯亮,南北红灯亮——东西黄灯亮,南北红灯亮——东西红灯亮,南北绿灯亮——东西红灯亮,南北黄灯亮——东西绿灯亮,南北红灯亮·

·

,这样循环下去。

南北方向是主干道车道,东西方向是支干道车道,要求两条交叉道路上的车辆交替运行,主干道每次通行时间为30秒,支干道每次通行时间为20秒,时间可设置修改。

绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。

要求交通灯控制器有复位功能,并要求所有交通灯的状态变化在时钟脉冲上升沿处。

3总体构思

根据交通灯系统设计要求,可以用一个有限状态机来实现这个交通灯控制器。

首先根据功能要求,明确两组交通灯的状态,这两组交通灯总共共有四种状态,我们用ST0,ST1,ST2,ST3来表示:

St0表示主路绿灯亮,支路红灯亮;

St1表示主路黄灯亮,支路红灯亮;

St2表示主路红灯亮,支路绿灯亮;

St3表示主路红灯亮,支路黄灯亮。

(1)根据上述四种状态描述列出的状态转换表如表3-1所示。

表3-1交通灯控制器状态转换表

当前状态

下一状态

转换条件

St0

St1

主路绿灯亮了25秒

St2

主路黄灯亮了5秒

St3

主路绿灯亮了15秒

支路黄灯亮了5秒

St0orst1orst2orst3

复位信号使能

(2)根据状态转换表得到交通灯控制器的状态转移图如图3-1所示。

图3-1交通灯控制器的状态转移图

(3)交通灯控制系统的本质就是一个如图3-2所示的控制器模块。

图3-2交通灯控制器结构示意图

其中,clk为时钟信号,时钟上升沿有效。

Rst为复位信号,高电平有效。

lgt1_red,lgt1_yellow、lgt1_green,分别表示主干道的红灯,黄灯,绿灯显示信号,高电平有效。

lgt2_red,lgt2_yellow,lgt2_green分别表示支路的红灯,黄灯,绿灯显示信号,

4硬件电路的设计

硬件电路的设计包括状态控制模块、分频器模块、转换器模块、TOP文件模块的图形设计。

(1)状态控制模块的图形符号如图4-1所示。

图4-1状态控制模块图形

(2)分频器的图形模块如图4-2所示。

图4-2分频器模块图形

实现频率由5MHZ到1Hz的转变,达到我们素需要的1S的要求。

(3)转换器的图形模块如图4-3所示。

图4-3转换器模块图形

实现BCD码转化成数码块中显示的数字。

(4)TOP文件的图形模块如图4-4所示。

图4-4TOP文件模块图形

5软件设计

软件的设计包括对控制状态模块、分频器、转换器和顶层模块的设计,以下分别为控制状态模块、分频器、转换器和顶层模块的代码。

(1)状态控制模块的代码如下。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYtraffic_ctrlIS

GENERIC(

green1_cnt:

INTEGER:

=25;

--定义主通道绿灯亮的时间,这里为25秒

yellow1_cnt:

=5;

--定义主通道黄灯亮的时间,这里为5秒

green2_cnt:

=15;

--定义支路绿灯亮的时间,这里为15秒

yellow2_cnt:

=5--定义支路黄灯亮的时间,这里为5秒

);

PORT(

CLK:

INSTD_LOGIC;

--时钟信号

rst:

--复位信号

lgt1_red:

OUTSTD_LOGIC;

--主通道红灯控制信号

lgt1_yellow:

--主通道黄灯控制信号

lgt1_green:

--主通道绿灯控制信号

lgt2_red:

--支路红灯控制信号

lgt2_yellow:

--支路黄灯控制信号

lgt2_green:

OUTSTD_LOGIC--支路绿灯控制信号

ENDENTITYtraffic_ctrl;

ARCHITECTURErt1OFtraffic_ctrlIS--定义结构体

TYPESTATESIS

(st0,st1,st2,st3);

--定义控制器各种状态

SIGNALstate:

states:

=st0;

--初始化状态

SIGNALcnt:

integerrange0to30:

=1;

--定义计数器

SIGNALcnt_enb:

std_logic:

='

0'

;

--初始化计数器使能信号

BEGIN

PROCESS(CLK,rst)

BEGIN

IF(rst='

1'

)THEN--复位信号为高电平则执行复位操作

state<

cnt<

ELSIF(rising_edge(CLK))THEN--时钟上升沿

IF(cnt_enb='

)THEN--计数器计数

=cnt+1;

ELSE

ENDIF;

CASEstateIS

WHENst0=>

--主通道绿灯亮了一段时间适时转换状态st1

IF(cnt=green1_cnt)THEN

=st1;

WHENst1=>

--主通道黄灯亮了一段时间适时转换状态st2

IF(cnt=yellow1_cnt)THEN

=st2;

WHENst2=>

--支路绿灯亮了一段时间适时转换状态st3

IF(cnt=green2_cnt)THEN

=st3;

WHENst3=>

--支路黄灯亮了一段时间适时转换状态st0

IF(cnt=yellow2_cnt)THEN

ENDCASE;

ENDPROCESS;

PROCESS(state)

--st0表示主路绿灯亮,支路红灯亮

lgt1_red<

lgt1_yellow<

lgt1_green<

lgt2_red<

lgt2_yellow<

lgt2_green<

cnt_enb<

--st1表示主路黄灯亮,支路红灯亮

--st2表示主路红灯亮,支路绿灯亮

--st3表示主路红灯亮,支路黄灯亮

ENDrt1;

(2)分频器的代码:

USEIEEE.STD_LOGIC_ARITH.ALL;

ENTITYfenpinIS

PORT(CLK:

INSTD_LOGIC;

OUTCLK:

BUFFERSTD_LOGIC);

ENDfenpin;

ARCHITECTUREoneOFfenpinIS

SIGNALCLK1,CLK2:

STD_LOGIC;

BEGIN

PROCESS(CLK)

VARIABLEcnt:

INTEGERrange0to4;

--500khz50M/500k=100

IFclk'

eventANDclk='

THEN

IFcnt=4THENOUTCLK<

=notOUTCLK;

cnt:

=0;

ELSEcnt:

ENDPROCESS;

--PROCESS(CLK1)

--VARIABLEcnt:

INTEGERrange0to49;

--5khz500k/5k=100

--BEGIN

--IFCLK1'

eventANDCLK1='

--IFcnt=49THENCLK2<

=notCLK2;

--ELSEcnt:

--ENDIF;

--ENDIF;

--ENDPROCESS;

--PROCESS(CLK2)

--variablecnt:

integerrange0to49;

--50hz5k/50=100

--IFCLK2'

eventANDCLK2='

--IFcnt=49THENCLK4<

=notCLK4;

--ELSEcnt:

--PROCESS(CLK3)

integerrange0to24;

--1hz50/50=1

--IFCLK3'

eventANDCLK3='

--IFcnt=24THENOUTCLK<

--ELSEcnt:

--ENDIF;

ENDone;

(3)转换器的代码:

USEIEEE.STD_LOGIC_arith.ALL;

ENTITYzhuanhuanIS

PORT(clk:

instd_logic;

zhitime:

inSTD_LOGIC_VECTOR(6DOWNTO0);

zhutime:

outtime:

outSTD_LOGIC_VECTOR(7DOWNTO0);

scan:

outSTD_LOGIC_VECTOR(0to7));

ENDzhuanhuan;

ARCHITECTUREbehaviorOFzhuanhuanIS

SIGNALdata1:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALdata2:

SIGNALdata:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALdatatime1:

SIGNALdatatime10:

SIGNALdatatime2:

SIGNALdatatime20:

datatime10<

=data1(7downto4);

datatime1<

=data1(3downto0);

datatime20<

=data2(7downto4);

datatime2<

=data2(3downto0);

WITHzhitimeSELECT

data1<

="

00000000"

WHEN"

0000000"

"

00000001"

0000001"

00000010"

0000010"

"

00000011"

0000011"

00000100"

0000100"

00000101"

0000101"

00000110"

0000110"

00000111"

0000111"

00001000"

0001000"

00001001"

0001001"

00010000"

0001010"

00010001"

0001011"

00010010"

0001100"

00010011"

0001101"

00010100"

0001110"

00010101"

0001111"

00010110"

0010000"

00010111"

0010001"

00011000"

0010010"

00011001"

0010011"

00100000"

0010100"

00100001"

0010101"

00100010"

0010110"

00100011"

0010111"

00100100"

0011000"

00100101"

0011001"

00100110"

0011010"

00100111"

0011011"

00101000"

0011100"

00101001"

0011101"

00110000"

WHENothers;

WITHzhutimeSELECT

data2<

process(clk,datatime20,datatime2,datatime10,datatime1)

variablecnt:

std_logic_vector(1downto0);

begin

ifclk'

eventandclk='

then

endif;

casecntis

when"

00"

=>

data<

=datatime2;

scan<

11111110"

01"

=datatime20;

11111101"

10"

=datatime1;

10111111"

11"

=datatime10;

01111111"

endcase;

endprocess;

process(data)

casedatais

0000"

outtime<

11111100"

0001"

01100000"

0010"

11011010"

0011"

11110010"

0100"

01100110"

0101"

10110110"

0110"

10111110"

0111"

11100000"

1000"

1001"

11110110"

whenothers=>

ENDbehavior;

(4)顶层模块的代码:

USEIEEE.

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

当前位置:首页 > 工程科技 > 电子电路

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

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