交通灯控制系统设计报告Word格式.docx
《交通灯控制系统设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《交通灯控制系统设计报告Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
![交通灯控制系统设计报告Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/3/d32831e5-64c0-48f6-97ab-2ffee9df0a86/d32831e5-64c0-48f6-97ab-2ffee9df0a861.gif)
3.3倒计时模块(jtdtime)的设计
3.4数码管显示模块(jtdxs)的设计
3.5信号灯显示模块(jtdlight)的设计
3.6引脚锁定
4编程下载
设东西方向和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红灯45秒,黄灯5秒,绿灯40秒,同时用数码管指示当前状态(红、黄、绿灯)剩余时间。
另外,设计一个紧急状态,当紧急状态出现时,两个方向都禁止通行,指示红灯且数码管停止计时并闪烁。
根据交通灯控制器的功能与要求,将其总体电路分为状态控制,倒计时,数码管显示,信号灯显示模块(jtdctrl,jtdtime,jtdxs,jtdlight)。
jtdctrl实现逻辑和时序控制,外部两路脉冲振荡器的频率选为1kHz和1Hz的信号,1khz信号用于显示模块的扫描,1Hz信号用做倒计时模块的计数脉冲。
M为紧急状态和自动运行状态的控制端。
总体框图:
当M=“1”时,进入紧急状态,S输出为B"
100100"
即南北、东西向均为红灯亮。
且数码管停止计时并闪烁。
(数码管在当时时间与X“FF”之间来回切换)
当M=“0”时,交通即开始正常工作。
M=“0”时,经过40秒,S由B"
100010"
变为B"
100001"
,再经过5秒,S变为B"
010100"
,再经过40秒,S变为B"
001100"
……如此循环下去。
当M=“1”跳变到M=“0”时,数码管继续计时,恢复正常工作状态。
南北、东西方向的红绿灯按表一表二变化。
表一交通灯状态转换表
东西(A)方向
红灯
绿灯
黄灯
45秒
40秒
5秒
南北(B)方向
表二交通灯状态转换表
M
S
备注
1
100100
长时间亮红灯
状态1:
100010
持续40秒,转到状态2
状态2:
100001
持续5秒,转到状态3
状态3:
010100
持续40秒,转到状态4
状态4:
001100
持续5秒,转到状态1
注:
S的六位分别对应东西方向(A方向)的红绿黄和南北方向(B方向)的红绿黄。
‘1’表示亮,‘0’表示灭。
图2顶层原理图
顶层原理图设计可以依据系统框图进行,由反馈控制,倒计时,数码管显示,信号灯显示模块(jtdctrl,jtdtime,jtdxs,jtdlight)五部分组成。
其顶层原理图如图2所示。
顶层文件的仿真波形图如图3所示:
图3顶层文件的仿真波形
·
状态控制模块根据倒计时模块(jtdtime)的输出信号和1hz的时钟信号,产生系统的状态机,控制其他部分的协调工作。
该模块的源文件程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJTD_CTROLIS
PORT(CLK:
INSTD_LOGIC;
AT,BT:
INSTD_LOGIC_VECTOR(7DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(1DOWNTO0));
ENDJTD_CTROL;
ARCHITECTUREJTDOFJTD_CTROLIS
SIGNALQ:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
PROCESS(CLK,AT,BT)
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
IF(AT=X"
01"
)OR(BT=X"
)THENQ<
=Q+1;
——通过AT,BT的反馈信号控制倒计时模块和信号显示jtd_light模块的工作
ELSEQ<
=Q;
ENDIF;
ENDPROCESS;
S<
ENDJTD;
状态控制模块的仿真波形图如图4所示:
图4状态控制模块的仿真波形图
倒计时模块用来设定A和B两个方向计时器的初值,并为数码管显示模块提供倒计时时间。
倒计时模块源文件程序如下:
ENTITYJTD_TIMEIS
PORT(CLK:
INSTD_LOGIC;
M:
S:
INSTD_LOGIC_VECTOR(1DOWNTO0);
AT,BT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDJTD_TIME;
ARCHITECTUREJTD_1OFJTD_TIMEIS
SIGNALATI:
STD_LOGIC_VECTOR(7DOWNTO0):
=X"
;
SIGNALBTI:
SIGNALART,AGT,AYT:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALBRT,BGT,BYT:
sharedvariablebf:
std_logic:
='
0'
BEGIN——设定各个红绿黄的工作时间
ART<
45"
AGT<
40"
AYT<
05"
BRT<
BGT<
BYT<
process
begin
waituntilclk'
eventandclk='
ifM='
then
AT<
=ATI;
BT<
=BTI;
elsif(M='
andbf='
)then
AT<
="
11111111"
bf:
=notbf;
endif;
endprocess;
PROCESS(CLK,M,S)
IFM='
THEN
ATI<
BTI<
ELSE
EVENTANDCLK='
THEN
IF(ATI=X"
)OR(BTI=X"
)THEN
CASESIS——通过S的变化控制各个状态,给倒计时显示灯赋值
WHEN"
00"
=>
=ART;
=BGT;
BTI<
=BYT;
10"
=AGT;
=BRT;
11"
=AYT;
ENDCASE;
IFATI/=X"
THEN——A方向(东西方向)倒计时
IFATI(3DOWNTO0)="
0000"
ATI(3DOWNTO0)<
1001"
ATI(7DOWNTO4)<
=ATI(7DOWNTO4)-1;
ELSEATI(3DOWNTO0)<
=ATI(3DOWNTO0)-1;
ATI(7DOWNTO4)<
=ATI(7DOWNTO4);
IFBTI/=X"
THEN——B方向(南北方向)倒计时
IFBTI(3DOWNTO0)="
BTI(3DOWNTO0)<
BTI(7DOWNTO4)<
=BTI(7DOWNTO4)-1;
ELSEBTI(3DOWNTO0)<
=BTI(3DOWNTO0)-1;
BTI(7DOWNTO4)<
=BTI(7DOWNTO4);
--AT<
--BT<
ENDJTD_1;
倒计时模块的仿真波形图如图5所示为:
图5倒计时模块的仿真波形图
显示模块用来显示倒计时时间。
采用动态扫描显示,通过分位程序,控制四个数码管的显示时间。
数码管显示模块的源文件程序为:
ENTITYJTD_XSIS
PORT(CLK1K:
AT,BT:
INSTD_LOGIC_VECTOR(7DOWNTO0);
LED1,LED2,LED3,LED4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDJTD_XS;
ARCHITECTUREJTD_3OFJTD_XSIS
SIGNALOU1,OU2,OU3,OU4:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSL:
STD_LOGIC_VECTOR(1DOWNTO0);
PROCESS(CLK1K)
IFCLK1K'
EVENTANDCLK1K='
IFSL="
THENSL<
——扫描LED显示管
ELS