⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtd1.txt

📁 交通灯的模拟
💻 TXT
字号:
交通控制灯的设计
一、任务与要求
    设计一个十字路口的红、绿、黄三色信号交通灯控制电路,具体要求如下:
    1)用红、绿、黄三色发光二极管作信号灯。主干道为东西向,有红、绿、黄三个灯;支干道为南北向,也有红、绿、黄三个灯。红灯亮禁止通行;绿灯亮允许通行;黄灯亮则给行驶中的车辆有时间停靠到禁行线之外;
    2)由于主干道车辆较多而支干道车辆较少,所以主干道绿灯时间较长。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯,两者交替重复。主干道每次放行50秒,支干道每次放行30秒;
在每次由亮绿灯变成亮红灯的转换过程中间,需要亮5秒的黄灯作为过渡,以使行驶中的车辆有时间停靠到禁行线以外。
3)能实现正常的、即时显示功能。用DE2上的四个七段数码管作为倒计时显示器。分别显示东西、南北方向的红灯、绿灯、黄灯时间;
4)能实现特殊状态的功能显示。设S为特殊状态的传感器信号,当S=1时,进入特殊状态。当S=0时,退出特殊状态。按S后,能实现特殊状态功能:
(1)显示器闪烁;
(2)计数器停止计数并保持在原来的数据;
(3)东西、南北路口均显示红灯状态;
(4)特殊状态结束后,能继续对时间进行计数。
5)能实现总体清零功能。按下清零键后,系统实现总清零,计数器由初始状态开始计数,对应状态的指示灯亮。
二,设计说明
在正常情况下,支路车较少,主路车多,所以设计的交通灯控制要求,在支路无车时,保证主路绿灯亮;而在支路有车时,主路和支路的绿灯交替亮。控制器结构如下图所示。
下面是端口说明:
Clk: 输入,系统输入时钟;
reset:输入,是复位信号,高电平有效;
sensor:输入,为传感器信号,是高电平有效;
flash:   输出,转换期间的闪烁信号;
reda:    输出,主干道路口显示红灯信号,高电平有效;
greena:  输出,主干道路口显示绿灯信号,高电平有效;
yellowa: 输出,主干道路口显示黄灯信号,高电平有效;
redb:    输出,支干道路口显示红灯信号,高电平有效;
greenb:  输出,支干道路口显示绿灯信号,高电平有效;
yellowb: 输出,支干道路口显示黄灯信号,高电平有效;
三、实验设计程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity controller is
port 
(clock:in std_logic;
  reset:in std_logic;
  sensor:in std_logic;
  flashut std_logic;
  numa,numbut integer range 0 to 90;
  reda,greena,yellowaut std_logic;
  redb,greenb,yellowbut std_logic
);
end;
architecture control of controller is 
signal countnum:integer range 0 to 90;
begin 
process(clock)
begin
if reset='1' then            ---复位信号,将记数器清零
countnum<=0;
elsif rising_edge(clock) then
if sensor='1' then
flash<='1';
else
flash<='0';
if countnum=89 then         ----记数到90秒时,记数器清零

countnum<=0;
else
countnum<=countnum+1;     ---正常记数,计脉冲上升沿
end if;
end if;
end if;
end process;
process(clock)
begin
if rising_edge(clock) then
if sensor='1' then             ---sensor信号有效期间,两组路灯都为红灯
reda<='1';
redb<='1';
greena<='0';
greenb<='0';
yellowa<='0';
yellowb<='0';
else        ---sensor无效期间,系统行为:按照一个记数周期时间(90秒)描述动作
if countnum<=49 then        ---前50秒,主干道的绿灯亮
numa<=50-countnum;
reda<='0';
greena<='1';
yellowa<='0';
elsif (countnum<=54) then      ---51-55秒,主干道的黄灯亮
numa<=55-countnum;
reda<='0';
greena<='0';
yellowa<='1';
else
numa<=90-countnum;         ---56-90秒,主干道的红灯亮
reda<='1';
greena<='0';
yellowa<='0';
end if;
if countnum<=54 then         ---0-55秒(主干道为绿,黄灯期间)支干道的红灯亮
numb<=55-countnum;
redb<='1';
greenb<='0';
yellowb<='0';
elsif countnum<=84 then      ---56-85秒,支干道为绿灯
numb<=85-countnum;
redb<='0';
greenb<='1';
yellowb<='0';
else
numb<=90-countnum;       ---86-90秒,支干道为黄灯
redb<='0';
greenb<='0';
yellowb<='1';
end if;
end if;
end if;
end process;
end ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -