交通灯控制器

一、实验目的

  1. 掌握交通灯控制器的工作原理;
  2. 学习较复杂的数字系统设计方法;
  3. 进一步学习掌握状态机的设计方法。

二、实验内容及要求

  1. 设计位于十字路口的交通灯,在A方向和B方向各有红、黄和绿3盏灯,二个路口的红绿灯交叉循环显示,当一个路口红灯时,另一个路口才能绿灯,绿灯变成红灯前,需先亮一会黄灯。二个路口的显示时间可以一样,也可以不一样。
  2. 用发光二极管当做交通灯,并要求颜色一致。

三、实验连线

  1. 下载前将适配板上的JP3用二十芯排线与实验板左上侧JC02相连接。
  2. 彩灯控制实验

四、实验现象

在数码管和发光管上看到结果。

我的vhdl代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity traffic is
port ( clk: in std_logic;
dataout: out std_logic_vector(11 downto 0));
end traffic;
architecture q1 of traffic is
type state_type is(s1,s2,s3,s4);
signal state:state_type;
signal ti:integer range 0 to 5:=0;
begin
process(clk)
begin
if (clk'event and clk='1') then
case state is
when s1=>if ti=5 then
ti<=0;
state<=s2;
else state<=s1;
ti<=ti+1;
end if;
when s2=>if ti=3 then
ti<=0;
state<=s3;
else state<=s2;
ti<=ti+1;
end if;
when s3=>if ti=5 then
ti<=0;
state<=s4;
else state<=s3;
ti<=ti+1;
end if;
when s4=>if ti=3 then
ti<=0;
state<=s4;
else state<=s1;
ti<=ti+1;
end if;
when others=>state<=s1;
end case;
end if;
end process;
process(state)
begin
case state is
when s1=>dataout<="100001100001";
when s2=>dataout<="100010100010";
when s3=>dataout<="001100001100";
when s4=>dataout<="010100010100";
end case;
end process;
end q1;

引脚连接如下:
dataout11-0:64 60 59 54 55 58 53 52 51 46 49 50
clk:89