1、摘要本系统采用本系统采用EDAEDA实验箱设计交通灯控制器,模拟实验箱设计交通灯控制器,模拟实现了红、绿、黄灯指挥交通的功能。它直接采实现了红、绿、黄灯指挥交通的功能。它直接采用用240C8240C8芯片开发,用芯片开发,用VHDLVHDL语言编程和语言编程和QUARTUSQUARTUS 7.2 7.2设计。交通灯控制器设计,系统设计。交通灯控制器设计,系统的阐述了用的阐述了用240C8240C8芯片实现数字电路的设计过程,芯片实现数字电路的设计过程,展示了展示了240C8240C8芯片的强大功能和非凡特性。本交通芯片的强大功能和非凡特性。本交通灯控制器适用东西和南北方向的车流量大致相同灯控制
2、器适用东西和南北方向的车流量大致相同的路口,同时用数码管指示当前状态(红、绿、的路口,同时用数码管指示当前状态(红、绿、黄、左拐灯)的剩余时间。另有一个紧急状态,黄、左拐灯)的剩余时间。另有一个紧急状态,当特殊情况发生时,两个方向都禁止通行,指示当特殊情况发生时,两个方向都禁止通行,指示红灯,紧急状态解除后,重新计时并指示时间。红灯,紧急状态解除后,重新计时并指示时间。n n基本要求:基本要求:n n(1)(1)东西方向(甲道)循环为绿灯东西方向(甲道)循环为绿灯 45s,45s,黄灯黄灯 5s5s,左,左拐灯拐灯 15s15s,黄灯,黄灯 5s5s,红灯,红灯 40s40s,黄灯,黄灯 5s
3、 5s n n(2)(2)南北方向(乙道)循环为红灯南北方向(乙道)循环为红灯 65s65s,黄灯,黄灯 5s5s,绿,绿灯灯 20s20s,黄灯,黄灯 5s5s,左拐灯,左拐灯 15s15s,黄灯,黄灯 5s 5s n n(3)(3)在数码管上倒计时间显示各道剩余时间;发挥在数码管上倒计时间显示各道剩余时间;发挥部分:部分:n n(4)(4)增加指示灯闪烁(绿灯最后增加指示灯闪烁(绿灯最后 5s5s和黄灯显示时间)和黄灯显示时间)及特殊紧急情况的处理;及特殊紧急情况的处理;n n(5)(5)增加根据不同方向车流量的大小调节各灯显示增加根据不同方向车流量的大小调节各灯显示时间长度的功能;时间长
4、度的功能;交通灯工作原理交通灯工作原理 根据交通灯控制器的功能与要求,将其总体电路分为状态控制信号灯显示,数码管倒计时显示模块。外部两路脉冲振荡器的频率选为1 kHz和1 Hz的信号,1khz信号用于显示模块的扫描,1 Hz信号用做倒计时模块的计数脉冲。较易交通灯控制器的实现 为了让大家更易理解,我为了让大家更易理解,我们先来看看十字路口简单们先来看看十字路口简单控制器显示。右图为两交控制器显示。右图为两交通灯的运行状态,东西、通灯的运行状态,东西、南北方向的不同状态组合南北方向的不同状态组合(红绿、红黄、绿红、黄(红绿、红黄、绿红、黄红四个状态)红四个状态)。但我们可。但我们可以简单地将其看
5、成两个以简单地将其看成两个(东西、南北)减(东西、南北)减1 1的计数的计数器,通过监测两个方向的器,通过监测两个方向的计数值,可以检测红黄绿计数值,可以检测红黄绿灯组合的跳变。灯组合的跳变。(此图不包此图不包括左拐灯括左拐灯)。题目要求回顾:设计一个简单十字路口交通灯控制器。该控制器控制东西南北两道的红、黄、绿三色灯,指挥交通和行人安全通行,本次实验只要求做出倒计时时间显示模块的VHDL程序,和黄灯闪烁。复杂十字路口交通灯控制器要比简单交通灯控制器增加一些功能,如倒计时时间显示,左转弯(左拐)、指示灯闪烁及特殊紧急情况的处理等。下面以下面的十字路口交通灯系统为例,来说明上述功能的实现:本次交
6、通灯控制器的实现东西方向 南北方向S(0)S(0)S(1)S(1)S(2)S(2)S(3)S(3)S(4)S(4)S(5S(5S(6)S(6)S(7S(7)S(8)S(8)S(9)S(9)S S(10)(10)S S(11)(11)绿绿灯灯45s 45s 黄黄灯灯5s 5s 左左拐拐灯灯15s 15s 黄黄灯灯5s 5s 红红灯灯40s 40s 黄黄灯灯5s5s红红灯灯65s 65s 黄黄灯灯5s 5s 绿绿灯灯20s 20s 黄黄灯灯5s 5s 左左拐拐灯灯15s 15s 黄黄灯灯5s 5s 一个周期划分成以下一个周期划分成以下8种状态:种状态:n nS0S0:cnt=0-44cnt=0-4
7、4:甲道通行,乙道禁止;:甲道通行,乙道禁止;n nS1S1:cnt=45-49cnt=45-49:甲道停车,乙道禁止;:甲道停车,乙道禁止;n nS2S2:cnt=50-64cnt=50-64;甲道左拐,乙道禁止;甲道左拐,乙道禁止;n nS3S3:cnt=65-69cnt=65-69;甲道停车,乙道禁止;甲道停车,乙道禁止;n nS4S4:cnt=70-89cnt=70-89;甲道禁止,乙道通行;甲道禁止,乙道通行;n nS5S5:cnt=90-94cnt=90-94;甲道禁止,乙道停车;甲道禁止,乙道停车;n nS6S6:cnt=95-109cnt=95-109;甲道禁止,乙道左拐;甲道
8、禁止,乙道左拐;n nS7S7:cnt=110-114cnt=110-114;甲道禁止,乙道停车;甲道禁止,乙道停车;一、倒计时时间显示模块的处理n n1 1、各路口倒计时时间的计算、各路口倒计时时间的计算、各路口倒计时时间的计算、各路口倒计时时间的计算n n在各个阶段,各路口倒计时时间显示值与当前计在各个阶段,各路口倒计时时间显示值与当前计数值存在一定的关系:数值存在一定的关系:n nS0S0:cnt=0-44cnt=0-44:甲道时间显示:甲道时间显示:disp1disp14545cntcnt;乙道时间显示:乙道时间显示:disp2=65disp2=65cntcnt;n nS1S1:cnt
9、=45-49cnt=45-49:甲道时间显示:甲道时间显示:disp1disp15050cntcnt;乙道时间显示:乙道时间显示:disp2=65disp2=65cntcnt;n nS2S2:cnt=50-64cnt=50-64;甲道时间显示:;甲道时间显示:disp1disp16565cntcnt;乙道时间显示:乙道时间显示:disp2=65disp2=65cntcnt;n nS3S3:cnt=65-69cnt=65-69;甲道时间显示:;甲道时间显示:disp1disp17070cntcnt;乙道时间显示:乙道时间显示:disp2=70disp2=70cntcnt;n nS4S4:cnt=
10、70-89cnt=70-89;甲道时间显示:;甲道时间显示:disp1disp1110110cntcnt;乙道时间显示:;乙道时间显示:disp2=90disp2=90cntcnt;n nS5S5:cnt=90-94cnt=90-94;甲道时间显示:;甲道时间显示:disp1disp1110110cntcnt;乙道时间显示:;乙道时间显示:disp2=95disp2=95cntcnt;n nS6S6:cnt=95-109cnt=95-109;甲道时间显示:;甲道时间显示:disp1disp1110110cntcnt;乙道时间显示:;乙道时间显示:disp2=110disp2=110cntcnt
11、;n nS7S7:cnt=110-114cnt=110-114;甲道时间显示:;甲道时间显示:disp1disp1115115cntcnt;乙道时间显示:;乙道时间显示:disp2=115disp2=115cntcnt;2 2、倒计时时间的显示、倒计时时间的显示根据上述关系得到的disp1和disp2 是十六进制数,在送到数码管显示之前,先要将它们转换成二位BCD码表示。为此,需要定义一个转换函数Bin_to_BCD,用来实现从7位二进制数2位 BCD码的转换。利用自定义程序包调用到主程序上就可使用。交通灯控制器主程序交通灯控制器主程序 library ieee;use ieee.std_lo
12、gic_1164.all;use ieee.std_logic_unsigned.all;use work.bintoBCD.all;entity jtd2 isport(clk,reset:in std_logic;r1,r2,y1,y2,l1,l2,g1,g2:out std_logic;disp11,disp22:out std_logic_vector(7 downto 0);end entity jtd2;architecture behav of jtd2 issignal cnt:std_logic_vector(6 downto 0);signal disp1,disp2:st
13、d_logic_vector(6 downto 0);beginprocess(clk,reset)beginif reset=1 then cnt0);elsif clkevent and clk=1 then if cnt=114 then cnt0);else cntr1=0;g1=1;y1=0;l1=0;r2=1;g2=0;y2=0;l2=0;disp1=45-cnt;disp2r1=0;g1=clk;y1=0;l1=0;r2=1;g2=0;y2=0;l2=0;disp1=45-cnt;disp2r1=0;g1=0;y1=clk;l1=0;r2=1;g2=0;y2=0;l2=0;dis
14、p1=50-cnt;disp2r1=0;g1=0;y1=0;l1=1;r2=1;g2=0;y2=0;l2=0;disp1=65-cnt;disp2r1=0;g1=0;y1=clk;l1=0;r2=0;g2=0;y2=clk;l2=0;disp1=70-cnt;disp2r1=1;g1=0;y1=0;l1=0;r2=0;g2=1;y2=0;l2=0;disp1=110-cnt;disp2r1=1;g1=0;y1=0;l1=0;r2=0;g2=clk;y2=0;l2=0;disp1=110-cnt;disp2r1=1;g1=0;y1=0;l1=0;r2=0;g2=0;y2=clk;l2=0;dis
15、p1=110-cnt;disp2r1=1;g1=0;y1=0;l1=0;r2=0;g2=0;y2=0;l2=1;disp1=110-cnt;disp2r1=0;g1=0;y1=clk;l1=0;r2=0;g2=0;y2=clk;l2=0;disp1=115-cnt;disp2null;end case;3 软件仿真 本实验仿真应用的是QUARTUS 7.2软件的内部仿真程序,在仿真过程中高电平置1,有效状态也为高电平1,若红绿黄灯置1时则证明其工作处于亮的状态。在东西南北方向的数码管显示的数字是由BCD码转换的,如00000000则显示是00,00011001显示为19。仿真图仿真图仿真时各输入端的端口对应表仿真时各输入端的端口对应表仿真时各输入端的端口对应表仿真时各输入端的端口对应表结束语结束语 本次实验我们受益良多,在写和更改程序的过程中,我们对VHDL语言有了更深一步的了解,并且在与组员探讨的过程中,加深了对十字路口交通灯的状态转换的了解,明白了绿红、黄红、左红、黄黄、红绿、红黄、红左、黄黄8个状态之间的循环往复,也加深了团队之间的友谊.