中易网

急!求解:j今天就要 用VHDL做交通信号灯

答案:1  悬赏:20  
解决时间 2021-01-18 23:40
  • 提问者网友:动次大次蹦擦擦
  • 2021-01-18 19:54
急!求解:j今天就要 用VHDL做交通信号灯
最佳答案
  • 二级知识专家网友:枭雄戏美人
  • 2021-01-18 20:22
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity light is
port(clk:in std_logic;--输入的100KHz的时钟信号
en:in std_logic;--出现交通事故的控制信号
re:in std_logic;--复位信号
Q,Y:out integer range 0 to 9;--通过数码管显示,Q表示东西路的时间,Y表示南北路的时间
r1:out std_logic;--东西方向红灯状态
y1:out std_logic;--东西方向黄灯状态
g1:out std_logic;--东西方向绿灯状态
r2:out std_logic;--南北方向红灯状态
y2:out std_logic;--南北方向黄灯状态
g2:out std_logic--南北方向绿灯状态
);
end;

architecture control of light is

signal Q1:integer range 0 to 20000;--用于M20000的计数器的计数
signal Q2:integer range 0 to 100;--用于交通灯的总时间计数
signal clk1:std_logic;--5Hz的时钟信号

signal QS:integer range 0 to 9;--东西路的时间计数
signal YS:integer range 0 to 9;--南北路的时间计数
signal r3,y3,g3,r4,y4,g4:std_logic;--记录东西方向红黄绿灯状态,南北方向红黄绿灯状态

begin
process(clk)--M20000的计数器
begin
if(clk' event and clk ='1') then
if(Q1=19999) then
clk1<='1';Q1<=0;
else clk1<='0';Q1<=Q1+1;
end if;
end if;
end process;

process(en,clk1,re)
begin
if(re='1') then Q2<=1;QS<=0;YS<=0;r3<='0';g3<='0';y3<='0';r4<='0';y4<='0';g4<='0';--"复位":东西南
北方向的所有灯都熄灭
else
if(en='1') then QS<=0;YS<=0;Q2<=Q2;r3<='1';g3<='0';y3<='0';r4<='1';y4<='0';g4<='0';--出现紧急事故,
东西和南北方向红灯亮,其余灯熄灭
else
if(clk1' event and clk1='1') then
if(Q2=76) then Q2<=6;--循环,执行整个完成后重新开始
elsif(Q2>=1 and Q2<6) then
QS<=0;YS<=0;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='1';y4<='0';g4<='0';--初始化,东西南北方向红灯亮一秒
elsif(Q2>=6 and Q2<11) then
QS<=5;YS<=7;Q2<=Q2+1;r3<='0';g3<='1';y3<='0';r4<='1';y4<='0';g4<='0';--第一秒,东西绿灯亮,南北红灯亮
elsif(Q2>=11 and Q2<16) then
QS<=4;YS<=6;Q2<=Q2+1;r3<='0';g3<='1';y3<='0';r4<='1';y4<='0';g4<='0';--第二秒,东西绿灯亮,南北红灯亮
elsif(Q2>=16 and Q2<21) then
QS<=3;YS<=5;Q2<=Q2+1;r3<='0';g3<='1';y3<='0';r4<='1';y4<='0';g4<='0';--第三秒,东西绿灯亮,南北红灯亮
elsif(Q2>=21 and Q2<26) then
QS<=2;YS<=4;Q2<=Q2+1;r3<='0';g3<='1';y3<='0';r4<='1';y4<='0';g4<='0';--第四秒,东西绿灯亮,南北红灯亮
elsif(Q2>=26 and Q2<=31) then
QS<=1;YS<=3;Q2<=Q2+1;r3<='0';g3<='1';y3<='0';r4<='1';y4<='0';g4<='0';--第五秒,东西绿灯亮,南北红灯亮
elsif(Q2>=31 and Q2<41) then--第六秒和第七秒,东西黄灯闪烁,南北红灯亮
case Q2 is
when 31 =>QS<=2;YS<=2;Q2<=Q2+1;r3<='0';g3<='0';y3<='1';r4<='1';g4<='0';y4<='0';
when 32 =>QS<=2;YS<=2;Q2<=Q2+1;r3<='0';g3<='0';y3<='0';r4<='1';g4<='0';y4<='0';
when 33 =>QS<=2;YS<=2;Q2<=Q2+1;r3<='0';g3<='0';y3<='1';r4<='1';g4<='0';y4<='0';
when 34 =>QS<=2;YS<=2;Q2<=Q2+1;r3<='0';g3<='0';y3<='0';r4<='1';g4<='0';y4<='0';
when 35 =>QS<=2;YS<=2;Q2<=Q2+1;r3<='0';g3<='0';y3<='1';r4<='1';g4<='0';y4<='0';
when 36 =>QS<=1;YS<=1;Q2<=Q2+1;r3<='0';g3<='0';y3<='0';r4<='1';g4<='0';y4<='0';
when 37 =>QS<=1;YS<=1;Q2<=Q2+1;r3<='0';g3<='0';y3<='1';r4<='1';g4<='0';y4<='0';
when 38 =>QS<=1;YS<=1;Q2<=Q2+1;r3<='0';g3<='0';y3<='0';r4<='1';g4<='0';y4<='0';
when 39 =>QS<=1;YS<=1;Q2<=Q2+1;r3<='0';g3<='0';y3<='1';r4<='1';g4<='0';y4<='0';
when 40 =>QS<=1;YS<=1;Q2<=Q2+1;r3<='0';g3<='0';y3<='0';r4<='1';g4<='0';y4<='0';
when others=>null;
end case;
elsif(Q2>=41 and Q2<46) then
Q2<=Q2+1;QS<=7;YS<=5;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='1';--第八秒,东西红灯亮,南北绿灯亮
elsif(Q2>=46 and Q2<51) then
Q2<=Q2+1;QS<=6;YS<=4;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='1';--第九秒,东西红灯亮,南北绿灯亮
elsif(Q2>=51 and Q2<56) then
Q2<=Q2+1;QS<=5;YS<=3;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='1';--第十秒,东西红灯亮,南北绿灯亮
elsif(Q2>=56 and Q2<61) then
Q2<=Q2+1;QS<=4;YS<=2;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='1';--第十一秒,东西红灯亮,南北绿灯亮
elsif(Q2>=61 and Q2<66) then
Q2<=Q2+1;QS<=3;YS<=1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='1';--第十二秒,东西红灯亮,南北绿灯亮
elsif(Q2>=66 and Q2<76) then--第十三秒和第十四秒,东西红灯亮,南北黄灯闪烁
case Q2 is
when 66
=>QS<=2;YS<=2;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='1';g4<='0';
when 67
=>QS<=2;YS<=2;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='0';
when 68
=>QS<=2;YS<=2;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='1';g4<='0';
when 69
=>QS<=2;YS<=2;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='0';
when 70
=>QS<=2;YS<=2;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='1';g4<='0';
when 71
=>QS<=1;YS<=1;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='0';
when 72
=>QS<=1;YS<=1;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='1';g4<='0';
when 73
=>QS<=1;YS<=1;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='0';
when 74
=>QS<=1;YS<=1;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='1';g4<='0';
when 75
=>QS<=1;YS<=1;Q2<=Q2+1;r3<='1';g3<='0';y3<='0';r4<='0';y4<='0';g4<='0';
when others=>null;
end case;
end if;
end if;
end if;
end if;
end process;

Q<=QS;
Y<=YS;
r1<=r3;
y1<=y3;
g1<=g3;
r2<=r4;
y2<=y4;
g2<=g4;

end control;

我刚刚才做完的。。。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息