您的当前位置:首页正文

交通灯控制器的课程设计

来源:步旅网
=====WORD完整版----可编辑----专业资料分享=====

课程设计

课题:交通灯控制器的设计

一、设计目的:

学习QuartusII的使用方法,熟悉可编程逻辑器件的使用。通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。在现代化的大城市中, 十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理, 本系统就是基于此目的而开发的。

二、设计任务:

1.满足如下时序要求:

南北方向红灯亮时,东西方向绿灯亮,反之亦然。 2.每一方向的红(绿)黄灯共维持30秒。 3.当某一方向绿灯亮时,置显示器为30秒,然后以

每秒减1计数方式工作,直至减到数为3秒时,红绿灯熄灭,黄灯开始间隙闪耀3秒,减到为0,红绿灯交换,一次工作循环结束,进入下一步另一方向的工作循环。

4.红绿黄灯均采用发光二极管。

5.设计由晶振电路产生1Hz标准秒信号的单元电路。 6.要求对整体电路进行仿真,观察并记录下仿真波

形。

三、设计原理:

 交通灯有四个状态:

G1 Y1 R1 G2 Y2 R2

S1. 亮 灭 灭 灭 灭 亮 S2. 灭 闪 灭 灭 灭 亮 S3. 灭 灭 亮 亮 灭 灭 S4. 灭 灭 亮 灭 闪 灭

然后重复状态S1.

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

 分频器

分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。该分频器将时钟信号分频成1HZ和4HZ的时钟信号。  控制器

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。此外,当检测到为夜间模式时,手动控制点亮黄灯的二极管。  计数器

这里需要的计数器的计数范围为30-0。计到0后,下一个时钟沿回复到30,开始下一轮计数。此外,当检测到夜间模式时,计数器暂停计数,而系统复位信号使计数器异步清零。

四、电路设计

1、分频单元电路设计 2、30减计数单元电路设计 3、红黄绿灯控制单元电路设计 4、译码显示单元电路设计  设计流程

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

L 3020MH分频 减计数灯控制电路 译码显示

五、实验程序

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity jiaotong is

port(clk,clr:in std_logic;

clk1,clk2,clk3:buffer std_logic; ---分频信号

pout:out std_logic_vector(6 downto 1);---东西南北的红绿黄灯状态表示

C1:out std_logic_vector(3 downto 0);---BCD码高四位表示 C0:out std_logic_vector(3 downto 0));---BCD码低四位表示 end jiaotong;

architecture one of jiaotong is

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

signal g1,y1,r1,g2,y2,r2:STD_LOGIC;---1表示东西方向,2表示南北方向,g,y,r分别表示绿灯,黄灯,红灯

signal div:integer range 0 to 20000000; ---分频1

signal divn:integer range 0 to 4000000; ---分频2,用于控制黄灯闪烁 type st is(s1,s2,s3,s4);---分别表示红绿黄灯的四种组合状态 signal state:st; begin C:process(clk) begin

if clk'event and clk='1' then---对20HZ进行分频,1HZ if(div<19999999)then div<=div+1; clk1<='0';

else div<=0; clk1<='1'; end if;

if(divn<2499999)then ---用于黄灯闪烁 divn<=divn+1; clk2<='0';

else divn<=0; clk2<='1'; end if; end if; end process; process (clk1) is

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

variable t:integer :=31; ---初始赋值 begin

if clr='1' then ---夜间时为黄灯闪烁,且为手动控制 pout(6)<='0'; pout(5)<=clk2 and '1'; pout(4)<='0'; pout(3)<='0'; pout(2)<=clk2 and '1'; pout(1)<='0'; else if(clk1'event and clk1='1') then t:=t-1;

case state is ---四种组合状态转换 when s1 =>

G1<='1'; Y1<='0'; R1<='0'; G2<='0';Y2<='0';R2<='1'; if(t=3) then state<=s2; else state<=s1; end if; when s2 =>

G1<='0';Y1<='1';R1<='0';G2<='0';Y2<='0';R2<='1'; if(t=0) then state<=s3;t:=30; else state<=s2; end if; when s3 =>

G1<='0';Y1<='0';R1<='1';G2<='1';Y2<='0'; R2<='0'; if(t=3) then state<=s4; else state<=s3; end if;

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

when s4 =>

G1<='0';Y1<='0';R1<='1';G2<='0';Y2<='1';R2<='0'; if(t=0) then state<=s1;t:=30; else state<=s4; end if;

when others =>NULL; end case;

case t is ---十进制数与BCD码一一对应赋值,输出时便于七段显示译码器显示 when 0 => C1<=\"0000\";C0<=\"0000\"; when 1 => C1<=\"0000\";C0<=\"0001\"; when 2 => C1<=\"0000\";C0<=\"0010\"; when 3 => C1<=\"0000\";C0<=\"0011\"; when 4 => C1<=\"0000\";C0<=\"0100\"; when 5 => C1<=\"0000\";C0<=\"0101\"; when 6 => C1<=\"0000\";C0<=\"0110\"; when 7 => C1<=\"0000\";C0<=\"0111\"; when 8 => C1<=\"0000\";C0<=\"1000\"; when 9 => C1<=\"0000\";C0<=\"1001\"; when 10=> C1<=\"0001\";C0<=\"0000\"; when 11=> C1<=\"0001\";C0<=\"0001\"; when 12=> C1<=\"0001\";C0<=\"0010\";

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

when 13=> C1<=\"0001\";C0<=\"0011\"; when 14=> C1<=\"0001\";C0<=\"0100\"; when 15=> C1<=\"0001\";C0<=\"0101\"; when 16 =>C1<=\"0001\";C0<=\"0110\"; when 17 =>C1<=\"0001\";C0<=\"0111\"; when 18 =>C1<=\"0001\";C0<=\"1000\"; when 19 =>C1<=\"0001\";C0<=\"1001\"; when 20 =>C1<=\"0010\";C0<=\"0000\"; when 21 =>C1<=\"0010\";C0<=\"0001\"; when 22 =>C1<=\"0010\";C0<=\"0010\"; when 23 =>C1<=\"0010\";C0<=\"0011\"; when 24 =>C1<=\"0010\";C0<=\"0100\"; when 25 =>C1<=\"0010\";C0<=\"0101\"; when 26 =>C1<=\"0010\";C0<=\"0110\"; when 27 =>C1<=\"0010\";C0<=\"0111\"; when 28 =>C1<=\"0010\";C0<=\"1000\"; when 29 =>C1<=\"0010\";C0<=\"1001\"; when 30 =>C1<=\"0011\";C0<=\"0000\"; when others =>NULL; end case; end if;

pout(6)<=G1; pout(5)<=clk2 and Y1;pout(4)<=R1; 对应

----完整版学习资料分享----

---东西南北六盏灯 =====WORD完整版----可编辑----专业资料分享=====

pout(3)<=G2; pout(2)<=clk2 and Y2;pout(1)<=R2; end if; end process ; end one;

六、测试方法与测试结果 1、测试仪器:QUARTUSⅡ

2、测试方法:FPGA下载验证与仿真验证 3、测试结果:满足设计要求 以20HZ为基准仿真: 仿真结果:

C1:显示30减计数的个位 C0:显示30减计数的十位 POUT(6):东西方向绿灯控制端 POUT(5):东西方向黄灯控制端 POUT(4):东西方向红灯控制端 POUT(3):南北方向绿灯控制端 POUT(2):南北方向黄灯控制端 POUT(1):南北方向红灯控制端  白天

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

 夜间黄灯闪烁(手动控制)

 设计满足了 1.30秒倒数显示 2.两个方向灯的交替 3.黄灯在最后3秒闪烁 七、讨论

该电路基本上满足了设计要求,电路简单,实现容易,节省器件。

----完整版学习资料分享----

=====WORD完整版----可编辑----专业资料分享=====

在设计过程中发现的问题以及需改进的地方在下面予以讨论: 1. 刚开始设置时黄灯在一个周期内闪烁五次导致连接硬件时黄灯不能正常工作,因为占空比太大,可以将其改正,使其在一个周期内闪烁十次。

2.黄灯在夜间亮即可,不需要闪烁,闪烁会造成对器件的耗损程

度加大,该项设置可通过在CASE语句中对其赋值来实现。 3.手动控制可将减计数设为可控减计数器,红黄绿灯可在CASE语句的赋值中实现控制。

另外,手动控制在实际使用的过程中并不方便,可以在控制信号一端设置一个控制器使其能够达到自动控制的目的。

----完整版学习资料分享----

因篇幅问题不能全部显示,请点此查看更多更全内容