当前位置:首页 > 基于VHDL的交通灯控制系统的设计
第4章 交通灯控制系统的设计
reset:系统内部自复位信号;
ena_scan:接收由时钟发生电路提供的250Hz的时钟脉冲信号; recount:接收由交通灯信号控制电路产生的重新计数的使能控制信号; sign_state:接收由交通灯信号控制电路产生的状态信号。 系统输出信号:
load:负责产生计数器所需要的计数数值。 经仿真后得到的时序图(见图7):
论文资料集中营
http://shop.paipai.com/15410938
图4-7 计数秒数选择电路时序图
由计数描述选择电路的时序图(见图7)可以看出这段程序中定义了在正常车流
量情况下,东西及南北方向红灯、黄灯和绿灯需要维持的秒数分别是15s、5s和25s。
architecture bhv of hld2 is
constant redew_time:integer:=15;---东西方向红灯设定为15s。 constant yellowew_time:integer:=5;--东西方向黄灯设定为5s。 constant greenew_time:integer:=25;--东西方向绿灯设定为25s。
13
constant redsn_time:integer:=15;--南北方向红灯设定为15s。 constant yellowsn_time:integer:=5;--南北方向黄灯设定为5s。 constant greensn_time:integer:=25;--南北方向绿灯设定为25s。 begin
process(reset,clk) begin
if reset='1' then load<=\ elsif (clk'event and clk='1') then if (ena_scan='1' and recount='1') then case sign_state is
when \ --sign_state=“000”时,南北方向绿灯亮25s。
when \ --sign_state=“001”时,南北方向黄灯亮5s。
when \ --sign_state=“010”时,南北方向红灯亮15s。 when \ --sign_state=“011”时,东西方向红灯亮15s。
14
第4章 交通灯控制系统的设计
when \ --sign_state=“100”时,东西方向黄灯亮5s。
when \ --sign_state=“101”时,东西方向绿灯亮25s。
when others=>load<=conv_std_logic_vector(yellowsn_time,8); end case;
当外部信号发生器提供了1kHZ的时钟信号,并且重新计数信号(recount)为“1”时,load信号就会按照预先设置的数值逐1递减,直至减到零为止,当下一个重新计数信号(recount)再次为“1”时,会重复此过程。
在这段程序的设计中用到了conv_std_logic_vector(value,n)语句,它的用法就是将已经定义的数值 (value)转换成n位(bit)的表示方法。例如程序中:when \就是将十进制的25转换成十六进制的19,这就使设计减少了很多不必要的麻烦。程序代码见附录2.计数秒数选择电路程序代码 4.3.3 倒计时控制电路
通过日常生活中的观察,我发现在一些交通路口已经开始使用倒计时显示器,它们的作用就是用来提示车辆行人目前还有多长时间信号灯会发生变化,这样车辆行人就可以提前判断是否有足够的时间通过路口,进而就可以避免很多意外事故的发生。例如:南北方向绿灯,车辆处于正常行驶中,东西方向红灯,车辆处于等待中,若南北方向行驶的车辆看到倒计时显示器上可以通行的时间很短,可能就会放慢速度等待下一次通行,这样在东西方向绿灯时,车辆就能够正常行驶,不会为等待南北方向强行的车辆而耽误更多的时间。如此循环下去,道路就会畅通无阻了。考虑到有些路口的交通拥堵现象较为严重,车辆会在道路上排成很长的一队,这样排在较远距离的司机就很难看清楚倒计时显示器上变化的数字,有可能会影响到车辆之间的正常行驶。因此,如果采用发光二极管作为倒计时的显
15
示装置就会使司机和行人一目了然,同样也能够起到很好的提示作用。所以,hld3倒计时控制电路(见图8)最主要的功能就是负责接收hld2电路输出的值,然后将其转换成BCD码,并利用发光二极管显示出来,让车辆行人能够清楚地知道再过多久信号灯就会发生变化。
图4-8 倒计时控制电路
系统输入信号:
clk:由外部信号发生器提供1kHz的时钟信号; reset:系统内部自复位信号;
ena_1hz:接收由时钟发生电路提供的1Hz的脉冲信号; recount:重新计数的使能控制信号; load:负责接收计数器所需要的计数数值。 系统输出信号:
led:负责将计数数值转换成BCD码,并利用发光二极管显示倒计时状态; next_state:当计数器计时完毕后,负责产生一个脉冲信号,作为下一个状态的触发信号。
16
共分享92篇相关文档