交通信号灯控制系统_对交通信号灯的控制
交通信号灯控制系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“对交通信号灯的控制”。
交通信号控制系统
1.设计任务
设计一个十字路口交通控制系统,要求:(1)东西(用A表示)、南北(用B表示)方向均有绿灯、黄灯、红灯指示,其持续时间分别是30秒、3秒和30秒,交通灯运行的切换示意图如图1-1所示。
(2)系统设有时钟,以倒计时方式显示每一路允许通行的时间。
(3)
当东西或南北两路中任意一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止记时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。
2.总体框图
本系统主要由分频计、计数器和控制器等电路组成,总体框图如1-2所示。分频计将晶振送来的信号变为1Hz时钟信号;当紧急制动信号无效时,选择开关将1Hz脉冲信号送至计数器进行倒计时计数,并使控制器同步控制两路红、黄、绿指示灯时序切换;当紧急制动信号有效时,选择开关将紧急制动信号送至计数器使其停止计数,同时控制器控制两路红灯全亮,所有车辆停止运行。
2-1 交通灯总体结构框图模块设计
(1)分频器
设晶振产生的信号为2MHz,要求输出1Hz时钟信号,则分频系数为2M,需要21位计数器。用VHDL设计的2M分频器文本文件如下:
LIBRARY
IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fenpin2m IS
PORT(clk:IN STD_LOGIC;
reset:IN STD_LOGIC;
--时钟输入
clk_out:out STD_LOGIC);END ENTITY fenpin2m;
ARCHITECTURE one OF fenpin2m IS signal count:integer range 0 to 1999999;
BEGIN
PROCESS(clk)
BEGIN
if reset='1' then
count
clk_out
else
if clk'EVENT and clk='1'THEN
IF count
count
clk_out
ELSif count
count
clk_out
else
count
END IF;
END IF;
END IF;
END PROCESS;END one;
(2)模30倒计时计数器 采用原理图输入法,用两片74168实现。74168为十进制可逆计数器,当U/DN=0时实现9~0减法计数,记到0时TCN=0;当U/DN=1时实现0~9加法计数,计到9时TCN=0;ENTN+ENPN=0时执行计数,否则计数器保持。该电路执行减法计数,当两片计数器计到0时同步置数,因此该计数器的计数范围是29~0,当系统检测到紧急制动信号有效时,CP=0计数器停止计数。
图3-1 模30减法计数器电路图
图3-2 模30减法计数器仿真波形
(3)显示译码器
显示译码器为动态显示,用VHDL文本输入法设计的七子段译码器如下:
图3-3 显示译码器的仿真波形
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--调用库文件
ENTITY xianshi IS
--实体开始
PORT(CLK:IN STD_LOGIC;
datain1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
datain2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
--扫描时钟信号
SEL:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--数码管选择信号
q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--数码管八端输入 end xianshi;
--实体结束 ARCHITECTURE one OF xianshi IS
--结构体开始 begin
PROCESS(CLK)
--进程开始 VARIABLE TMP:STD_LOGIC_vector(1 downto 0);VARIABLE d:STD_LOGIC_VECTOR(3 DOWNTO 0);--中间变量
begin
IF(CLK'EVENT AND CLK='1')THEN
--时钟上升沿有效
IF(TMP=“00”)THEN
TMP:=“01”;
d:=datain2;
CASE d IS
WHEN“0000”=>q
--0
WHEN“0001”=>q
--1
WHEN“0010”=>q
--2
WHEN“0011”=>q
--3 WHEN“0100”=>q
--4 WHEN“0101”=>q
--5 WHEN“0110”=>q
--6
WHEN“0111”=>q
--7
WHEN“1000”=>q
--8
WHEN“1001”=>q
--9
WHEN OTHERS=>q
END CASE;
elsif(tmp=“01”)then
TMP:=“00”;
--如果tmp为“001”即第2个数码管显示b输入
d:=datain1;
CASE d IS
WHEN“0000”=>q
--0
WHEN“0001”=>q
--1
WHEN“0010”=>q
--2
WHEN“0011”=>q
--3
WHEN“0100”=>q
--4
WHEN“0101”=>q
--5
WHEN“0110”=>q
--6
WHEN“0111”=>q
--7
WHEN“1000”=>q
--8
WHEN“1001”=>q
--9
WHEN OTHERS=>q
END CASE;
end if;
end if;sel
--把tmp的值赋予sel
end proce;
--进程结束
end one;
(4)控制器
该模块输入为1Hz时钟,和紧急制动信号PE,输出为两路红、黄、绿指示灯,当紧急制动信号无效(PE=1)时,两路红、黄、绿灯时序切换。当紧急制动信号有效时,选项开关将紧急制动信号送至计数器使其停止计数,同时使控制器控制两路红灯全亮,所有车辆停止通行。用VHDL文本输入法设计的控制器如下;
图3-4控制器的仿真波形
LIBRARY
IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY contr IS
PORT(cp1:IN STD_LOGIC;
pe:IN STD_LOGIC;
chan:IN STD_LOGIC;
ra,ga,ya,rb,gb,yb:out STD_LOGIC);END ENTITY contr;ARCHITECTURE one OF contr IS signal count:integer range 0 to 59;
BEGIN
proce(cp1)
begin
if pe='0'then
count
else
IF(cp1'EVENT AND cp1='1')THEN
if count
count
else
count
end if;
end if;end if;END PROCESS;PROCESS BEGIN
if pe='1'then
if chan='1' then
if count
rb
gb
yb
ra
if count
ga
ya
else
ga
ya
end if;
else
rb
ga
ya
ra
if count
gb
yb
else
gb
yb
end if;
end if;
else
if count
rb
ga
ya
ra
if count
gb
yb
else
gb
yb
end if;
else
rb
gb
yb
ra
if count
ga
ya
else
ga
ya
end if;
end if;
end if;
else
rb
ra
gb
yb
ga
ya
end if;end proce;end one;交通灯原理图
图4-1 交通灯原理图