哪位好心人帮我设计一个交通灯的VHDL程序,只需要程序,最好每句后面加上注释(可加分),谢了! 20

设计要求是:(1)路口交通灯:东西路有交通灯R(红)、Y(黄)、G(绿),东西人行安全通道灯:RXR(红)、RXG(绿)。南北路有交通灯r1(红)、y1(黄)、g1(绿)... 设计要求是:(1)路口交通灯:东西路有交通灯R(红)、Y(黄)、G(绿),东西人行安全通道灯:RXR(红)、RXG(绿)。南北路有交通灯r1(红)、y1(黄)、g1(绿),南北人行安全通道灯:rxr1(红)、rxg1(绿),设所有灯均为高电平点亮。设置45s的通行时间和5s转换时间的定时电路。
(2)实现东西、南北两路可调交通控制系统,达到既能自动控制又能手动控制的两种控制要求;应设有特殊情况按键并能实现特殊的功能,计数器停止计数时保持原来的状态,显示红灯状态。 特殊状态解除后能继续计数.。
(3)通过键盘实现参数的更改与显示,复位按键实现总体计数清零功能。
(4)实现正常的倒计时功能. 用数码管作为倒计时显示。
展开
 我来答
百度网友898286a
2011-05-17 · TA获得超过167个赞
知道小有建树答主
回答量:150
采纳率:100%
帮助的人:173万
展开全部
设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。要求:
(1) 交通灯从绿变红时,有4秒黄灯亮的间隔时间;
(2) 交通灯红变绿是直接进行的,没有间隔时间;
(3) 主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;
(4) 在任意时间,显示每个状态到该状态结束所需的时间。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY traffic IS
PORT (clk:in std_logic;
led7s1:out std_logic_vector(6 downto 0);
led7s2:out std_logic_vector(6 downto 0);
comb_out:out std_logic_vector(5 downto 0));
END;

ARCHITECTURE one OF traffic IS
TYPE dm IS (s0,s1,s2,s3);
SIgnal current_state,next_state:dm;
SIGNAL FULL : STD_LOGIC;
SIGNAL tl :STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL th:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL tm :STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL TIME :STD_LOGIC_VECTOR(6 DOWNTO 0);
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF CNT8 = "11111111" THEN
CNT8:="01111111";
FULL<='1';
ELSE CNT8 := CNT8+1;
FULL <= '0';
END IF; END IF;
END PROCESS P_REG;

PROCESS(full)
BEGIN
IF full'EVENT AND full='1' THEN
IF TIME<"1000011" THEN
TIME<=TIME+1;
ELSe TIME <="0000000";
END IF;
END IF;
END PROCESS;
REG:process( full,current_state)
BEGIN
IF full='1' AND full'EVENT THEN
current_state<=next_state;
END IF;
END process;
COM:process(current_state, time)
begin
case current_state is
when s0=>comb_out<="001100";tm<=39-time;
if time=39 then next_state<=s1;
else next_state<=s0;
end if;
when s1=>comb_out<="010100";tm<=43-time;
if time=43 then next_state<=s2;
else next_state<=s1;
end if;
when s2=>comb_out<="100010";tm<=63-time;
if time=63 then next_state<=s3;
else next_state<=s2;
end if;
when s3=>comb_out<="100001";tm<=67-time;
if time=67 then next_state<=s0;
else next_state<=s3;
end if;
end case;
end process;
PROCESS(tm)
BEGIN
IF tm>=30 THEN th<="11";tl<=tm-30;
ELSIF tm>=20 THEN th<="10";tl<=tm-20;
ELSIF tm>=10 THEN th<="01";tl<=tm-10;
ELSE th<="00";tl<=tm;
END IF;
END PROCESS;

process(th,tl)
begin
case th is
when"00"=>led7s1<="0111111";
when"01"=>led7s1<="0000110";
when"10"=>led7s1<="1011011";
when"11"=>led7s1<="1001111";
when others=>null;
end case;
case tl is
when "0000000"=>led7s2<="0111111";
when"0000001"=>led7s2<="0000110";
when "0000010"=>led7s2<="1011011";
when"0000011"=>led7s2<="1001111";
when"0000100"=>led7s2<="1100110";
when "0000101"=>led7s2<="1101101";
when "0000110"=>led7s2<="1111101";
when"0000111"=>led7s2<="0000111";
when "0001000"=>led7s2<="1111111";
when "0001001"=>led7s2<="1101111";
when others=>null;
end case;
end process;
end;
配合楼主的问题,自己可以再改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式