当前位置:首页 > 基于VHDL的交通灯控制系统的设计
第4章 交通灯控制系统的设计
经仿真后得到的时序图(见图9):
图4-9 倒计时控制电路时序图
由倒计时控制电路的时序图(见图9)可以看出,当clk时钟信号来临后,在ena_1hz脉冲信号的同时激励下,led会按照预先设置好的时间开始逐1递减,进行倒计时显示。
process(clk,reset) begin
if (reset='1') then cnt_ff<=\
led<=\当reset=1,则将cnt_ff与led清零。 elsif (clk'event and clk='1') then if ena_1hz='1' then if (recount='1') then
cnt_ff<=load-1;--当reset=0,clk为上升沿触发,且ena_1hz与recount
论文资料集中营
http://shop.paipai.com/15410938
17
为1时,load将减1的数值赋给cnt_ff。
else cnt_ff<=cnt_ff-1;-- 当reset=0,clk为上升沿触发,且ena_1hz为1时,recount为0时,cnt_ff减1。
end if; end if;
case conv_integer(cnt_ff) is
when 0=>led(24 downto 0)<=\ when 1=>led(24 downto 0)<=\ when 2=>led(24 downto 0)<=\ when 3=>led(24 downto 0)<=\ ??
when 23=>led(24 downto 0)<=\ when 24=>led(24 downto 0)<=\ when others=>led(24 downto 0)<=\ end case;
这段程序是采用的就是查表的方法并且利用发光二极管进行倒计时显示,如图9所示:当绿灯点亮开始计数后,load就会将减1后的值赋给cnt_ff,之后cnt_ff又会从case语句中查找到相对应的值再赋给led显示所剩余的时间。在程序编写过程中运用到了conv_integer()语句,它可以将cnt_ff所赋的值转换成整数。由图可知led是25位的系统输出信号,负责控制发光二极管的输出,所以25位的输出信号可以分成七组控制发光二极管的显示,其中“1”为点亮,“0”为熄灭。程序代码见附录3倒计时控制电路。
18
第4章 交通灯控制系统的设计
4.3.4 红绿灯信号控制电路
在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通。但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制,即让交通警察自行指挥交通。因此,hld4红绿灯信号控制电路(见图10)除了负责监控路口红绿灯之外,最主要的功能就是能够利用开关来切换手动与自动的模式,让交通警察
能够通过外部输入的方式来控制红绿灯交通信号系统的运做。
图4-10 红绿灯信号控制电路
系统输入信号:
clk:由外部信号发生器提供1kHZ的时钟信号; reset:系统内部自复位信号;
ena_scan:接收由时钟发生电路提供的250Hz的时钟脉冲信号; ena_1hz:接收由时钟发生电路提供的1Hz的脉冲信号; flash_1hz:接收由时钟发生电路提供的1Hz的脉冲时钟信号; a_m:手动、自动切换按钮(1:自动、0:手动);
st_butt: 红绿灯状态切换按钮(在手动操作下,每按一次按钮就变换一个状
19
态);
next_state:接收由倒计时控制电路提供的下一个状态的触发信号。 系统输出信号:
recount:产生重新计数的输出使能控制信号;
sign_state:产生输出状态信号;red:负责红色信号灯的显示; green:负责绿色信号灯的显示;yellow:负责黄色信号灯的显示。 经仿真后得到的时序图(见图11):
论文资料集中营
http://shop.paipai.com/15410938
图4-11 红绿灯信号控制电路时序图
从图上可以看到:当a_m=1,处于自动状态时,在next_state的触发下, Red,Green,Yellow为01,10,00时,对应state.rewgsn=1,表明东西方向红灯亮(red=01),南北方向绿灯亮(green=10)
Red,Green,Yellow为01,00,10时,对应state.rewysn=1,表明东西方向红灯亮(red=01),南北方向黄灯亮(yellow=10)
Red,Green,Yellow为10,01,00时,对应state.gewrsn=1,表明东西方向绿灯亮(Green=01),南北方向红灯亮(red=10)
20
共分享92篇相关文档