交通灯控制逻辑电路设计与总结报告.docx

上传人:b****5 文档编号:7884457 上传时间:2023-01-26 格式:DOCX 页数:13 大小:146.55KB
下载 相关 举报
交通灯控制逻辑电路设计与总结报告.docx_第1页
第1页 / 共13页
交通灯控制逻辑电路设计与总结报告.docx_第2页
第2页 / 共13页
交通灯控制逻辑电路设计与总结报告.docx_第3页
第3页 / 共13页
交通灯控制逻辑电路设计与总结报告.docx_第4页
第4页 / 共13页
交通灯控制逻辑电路设计与总结报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

交通灯控制逻辑电路设计与总结报告.docx

《交通灯控制逻辑电路设计与总结报告.docx》由会员分享,可在线阅读,更多相关《交通灯控制逻辑电路设计与总结报告.docx(13页珍藏版)》请在冰豆网上搜索。

交通灯控制逻辑电路设计与总结报告.docx

交通灯控制逻辑电路设计与总结报告

交通灯控制逻辑电路设计与总结报告

一、设计任务

用CPLD设计路口交通灯控制器

二、设计要求

1、满足一下时序要求:

南北方向红灯亮,东西方向绿灯亮;南北方向绿灯亮,东西方向红灯亮;

2、每一方向的红(绿)黄灯总共维持30秒;

3、十字路口要有时间显示,具体为:

当某一方向绿灯亮时,置显示器为30秒,然后以每秒减一技术方式工作,直至减到数为4秒时,红绿灯熄灭,黄灯开始间隙闪耀4秒,减到0时,红绿灯交换,一次工作循环结束,进入下一步另一方向的工作循环;

4、红绿灯均采用发光二极管;

5、设计由晶振电路产生1Hz标准秒信号的单元电路(实际秒脉冲由开发箱提供);

6、要求对整体电路进行仿真,观察并记录下仿真波形;

7、选作部分:

a、手动调整和自动控制,夜间为黄灯闪耀;

b、白天黄灯亮时,以2Hz的速度闪烁点亮四秒;

c、红绿灯循环点亮时间可以自由修改。

三、设计设备

含有Quartus软件的电脑一台,可下载的试验台;

四、设计方法

使用VHDL语言进行程序的设计运行和仿真,以及波形的运行仿真,最后进行下载仿真;

五、方案论证

方案1:

把整个流程分成几个进程来做;

方案2:

每个进程都使用if和case语句实现功能的实现;

方案3:

使用状态机来实现状态间的转换;

方案论证:

1、要实现整个流程,需要做的输出内容类型不同,如果放在一个进程里面就比较容易混淆,产生混乱。

而采用分成几个进程来做的方式就明确了每个模块的内容和分工,使其调理清晰,一目了然;

2、if语句是条件语句,是VHDL语言中常用的基本语句。

该流程中的变量比较繁多,而使用case语句分情况列出来,简洁明了。

3、状态机的使用格式简洁,使用简单方便,特别是在进行状态的转换时候。

并行的状态转换不易出错,可将状态转换、赋值、计数等多个功能封装在某一个状态中,并且更加便于为系统添加新的状态功能。

方案选定:

通过以上分析,确定用以上方案为本次设计的方案。

六、工作原理

先对所给时钟脉冲进行分频到标准时钟脉冲;设计两个时钟控制倒计时,倒计时的时间可自由修改,由输入决定;设计另一个时钟,用以控制白天与夜间模式的转换;在白天时,根据倒计时的数字进行红绿灯的状态转换;夜间时,红绿灯状态改为夜间模式:

黄灯闪烁。

七、程序设计

------交通灯控制系统所使用的库和包

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

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

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

------交通灯控制系统的实体

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

entityjtis

port(clk,reset:

instd_logic;------------------时钟脉冲clk由系统直接提供,需要进行分频;reset是启动键,当reset为1是,系统启动

t0:

integerrange0to30;------------------红绿灯循环点亮的时间,根据输入的不同系统运行的不同

r1,y1,g1,r2,y2,g2:

outstd_logic;------------------r1为东西方向红灯,y1为东西方向黄灯,g1为东西方向绿灯;r2为南北方向红灯,y2为南北方向黄灯,g2为南北方向绿灯

ec0,ec1,nc0,nc1:

outstd_logic_vector(3downto0));

------------------ec0,ec1分别为东西方向的倒计时间的个位和十位;nc0,nc1分别为南北方向的倒计时间的个位和十位

endjt;

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

------交通灯控制系统的结构体(5个进程)

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

architectureoneofjtis

typestate_typeis(s0,s1,s2,s3);------------------定义状态的类型

signalstate:

state_type;------------------使用状态机

signalk:

std_logic;------------------分频后的1Hz的标准时钟脉冲

signalc1,c2:

integerrange0to30;------------------定义东西、南北方向的两个倒计时的计数

signalt1:

integerrange0to3600;

signalt2:

integerrange0to24;------------------定义一个时钟,用以控制白天与夜间模式

Begin

------该进程用以分频

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

q0:

process(clk)

variablett:

std_logic_vector(9downto0);------------------中间变量

begin

ifclk'eventandclk='1'then

iftt="1111101000"then----------------------把所给1kHz分频成1Hz的脉冲k,10000分频,仿真值用“0000000100”八分频

tt:

=(others=>'0');

k<='1';

else

tt:

=tt+1;

k<='0';

endif;

endif;

endprocessq0;

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

------该进程用以设计时钟

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

q1:

process(k,reset)

begin

ifreset='1'then------------------启动开关为1时,系统开始运行

t1<=0;

t2<=0;------------------从0点开始

elsifk='1'andk'eventthen

ift1=3599then------------------一个t1循环是一个秒,仿真值用“35”

ift2=23then-------------------一个t1循环是一个小时,一天24小时

t2<=0;

else

t2<=t2+1;

endif;

t1<=0;

else

t1<=t1+1;

endif;

endif;

endprocessq1;

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

------该进程用以控制白天黑天模式和红绿灯状态转换

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

q2:

process(k,reset,t2)

begin

ift2>=5andt2<=22then-------------------白天模式5:

00到22:

00之间

ifreset='1'then-------------------启动开关为1时,系统开始运行,进行状态转换

r1<='0';y1<='0';g1<='1';-------------------东西方向绿灯亮

r2<='1';y2<='0';g2<='0';-------------------南北方向红灯亮

state<=s0;-------------------红绿灯处于初始状态s0

c1<=t0;

c2<=t0;-------------------倒计时从自由输入值开始递减

elsifk='1'andk'eventthen

casestateis

whens0=>-------------------当处于第1状态时,讨论

ifc1=5then--------------由于进程内部的并列进行,当倒计时第4秒时,进入到第2状态s1

state<=s1;

c1<=c1-1;

c2<=c2-1;--------------倒计时递减

elsifc2=0then------------倒计时减到0时,再从初始值开始

c1<=t0;

c2<=t0;

else----------------否则继续保持第1状态s0

state<=s0;

c1<=c1-1;

c2<=c2-1;

endif;

whens1=>-------------------当处于第2状态时,讨论

ifc1=1then--------------由于进程内部的并列进行,当倒计时第t0秒时,进入到第3状态s2

state<=s2;

c1<=c1-1;

c2<=c2-1;

else----------------否则继续保持第2状态

state<=s1;

c1<=c1-1;

c2<=c2-1;

endif;

whens2=>-------------------当处于第3状态时,讨论

ifc2=5then--------------由于进程内部的并列进行,当倒计时第4秒时,进入到第4状态s3

state<=s3;

c1<=c1-1;

c2<=c2-1;

elsifc1=0then------------倒计时减到0时,再从初始值开始

c1<=t0;

c2<=t0;

else----------------否则继续保持第3状态

state<=s2;

c1<=c1-1;

c2<=c2-1;

endif;

whens3=>-------------------当处于第4状态时,讨论

ifc2=1then--------------由于进程内部的并列进行,当倒计时第t0秒时,进入到第1状态s0

state<=s0;

c1<=c1-1;

c2<=c2-1;

else----------------否则继续保持第4状态

state<=s3;

c1<=c1-1;

c2<=c2-1;

endif;

whenothers=>state<=s0;

endcase;

ifstate=s0then

r1<='0';y1<='0';g1<='1';

r2<='1';y2<='0';g2<='0';

elsifstate=s1then

r1<='0';g1<='0';

r2<='1';y2<='0';g2<='0';

ifc1=4orc1=2theny1<='1';

elsey1<='0';

endif;

elsifstate=s2then

r1<='1';y1<='0';g1<='0';

r2<='0';y2<='0';g2<='1';

elsifstate=s3then

r1<='1';y1<='0';g1<='0';

r2<='0';g2<='0';

ifc2=4orc2=2theny2<='1';

elsey2<='0';

endif;

endif;

---------------------------------各个状态的红绿灯变量的赋值,‘1’亮‘0’熄

endif;

else-------------------夜间模式22:

00到次日5:

00之间

c2<=0;c1<=0;

r1<='0';r2<='0';g1<='0';g2<='0';

y1<=k;y2<=k----------------红绿灯的状态:

脉冲k赋给黄灯变量,黄灯闪烁

endif;

endprocessq2;

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

------该进程用于东西方向倒计时的译码显示

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

q3:

process(c1)

begin

casec1is

when0=>ec0<="0000";ec1<="0000";

when1=>ec0<="0001";ec1<="0000";

when2=>ec0<="0010";ec1<="0000";

when3=>ec0<="0011";ec1<="0000";

when4=>ec0<="0100";ec1<="0000";

when5=>ec0<="0101";ec1<="0000";

when6=>ec0<="0110";ec1<="0000";

when7=>ec0<="1000";ec1<="0000";

when9=>ec0<="1001";ec1<="0000";

when10=>ec0<="0000";ec1<="0001";

when11=>ec0<="0001";ec1<="0001";

when12=>ec0<="0010";ec1<="0001";

when13=>ec0<="0011";ec1<="0001";

when14=>ec0<="0100";ec1<="0001";

when15=>ec0<="0101";ec1<="0001";

when16=>ec0<="0110";ec1<="0001";

when17=>ec0<="0111";ec1<="0001";

when18=>ec0<="1000";ec1<="0001";

when19=>ec0<="1001";ec1<="0001";

when20=>ec0<="0000";ec1<="0010";

when21=>ec0<="0001";ec1<="0010";

when22=>ec0<="0010";ec1<="0010";

when23=>ec0<="0011";ec1<="0010";

when24=>ec0<="0100";ec1<="0010";

when25=>ec0<="0101";ec1<="0010";

when26=>ec0<="0110";ec1<="0010";

when27=>ec0<="0111";ec1<="0010";

when28=>ec0<="1000";ec1<="0010";

when29=>ec0<="1001";ec1<="0010";

when30=>ec0<="0000";ec1<="0011";

----------------------------当在设定范围内时,分别为个位十位译码并显示

whenothers=>ec0<="0000";ec1<="0000";

--------------------------------------------------------否则,LED灯显示0

endcase;

endprocessq3;

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

------该进程用于南北方向倒计时的译码显示

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

q4:

process(c2)

begin

casec2is

when0=>nc0<="0000";nc1<="0000";

when1=>nc0<="0001";nc1<="0000";

when2=>nc0<="0010";nc1<="0000";

when3=>nc0<="0011";nc1<="0000";

when4=>nc0<="0100";nc1<="0000";

when5=>nc0<="0101";nc1<="0000";

when6=>nc0<="0110";nc1<="0000";

when7=>nc0<="0111";nc1<="0000";

when8=>nc0<="1000";nc1<="0000";

when9=>nc0<="1001";nc1<="0000";

when10=>nc0<="0000";nc1<="0001";

when11=>nc0<="0001";nc1<="0001";

when12=>nc0<="0010";nc1<="0001";

when13=>nc0<="0011";nc1<="0001";

when14=>nc0<="0100";nc1<="0001";

when15=>nc0<="0101";nc1<="0001";

when16=>nc0<="0110";nc1<="0001";

when17=>nc0<="0111";nc1<="0001";

when18=>nc0<="1000";nc1<="0001";

when19=>nc0<="1001";nc1<="0001";

when20=>nc0<="0000";nc1<="0010";

when21=>nc0<="0001";nc1<="0010";

when22=>nc0<="0010";nc1<="0010";

when23=>nc0<="0011";nc1<="0010";

when24=>nc0<="0100";nc1<="0010";

when25=>nc0<="0101";nc1<="0010";

when26=>nc0<="0110";nc1<="0010";

when27=>nc0<="0111";nc1<="0010";

when28=>nc0<="1000";nc1<="0010";

when29=>nc0<="1001";nc1<="0010";

when30=>nc0<="0000";nc1<="0011";

---------------------------当在设定范围内时,分别为个位十位译码并显示

whenothers=>nc0<="0000";nc1<="0000";

----------------------------------------------------------否则,LED灯显示0

endcase;

endprocessq4;

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

endarchitectureone;-----------------------------------所有进程结束

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

八、仿真结果

1、clk为输入脉冲;开始令reset为’1’,启动系统,系统正常工作后值为’0;t0为红绿灯循环时间,可自由修改,如果输入值为’0010000’,则为16秒倒计时。

如下图:

系统从0点开始运行,处于夜间模式时,倒计时都为“00”,两个方向都为黄灯闪烁,红绿灯都熄灭。

2、5:

00之后,进入到白天模式:

从第1状态(东西方向绿灯亮、南北方向红灯)开始,倒计时从16秒开始递减。

倒计时第4秒后进入第2状态(东西方向黄灯闪烁,南北方向红灯亮)。

3、倒计时第0秒后进入第3状态(东西方向红灯亮,南北方向绿灯亮),倒计时再从16秒开始递减;倒计时第4秒后进入第4状态(东西方向红灯亮,南

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

当前位置:首页 > 总结汇报 > 其它

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

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