交通灯控制器的课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通灯控制器的课程设计
课程设计
课题:交通灯控制器的设
计
一、设计目的:
学习QuartusII的使用方法,熟悉可编程逻辑器
件的使用。通过制作来了解交通灯控制系统,交
通灯控制系统主要是实现城市十字交叉路口红绿
灯的控制。在现代化的大城市中, 十字交叉路口
越来越多,在每个交叉路口都需要使用红绿灯进
行交通指挥和管理,红、黄、绿灯的转换要有一个
准确的时间间隔和转换顺序,这就需要有一个安
全、自动的系统对红、黄、绿灯的转换进行管理,
本系统就是基于此目的而开发的。
二、设计任务:
1.满足如下时序要求:
南北方向红灯亮时,东西方向绿灯亮,反之亦
然。
2.每一方向的红(绿)黄灯共维持30秒。
3.当某一方向绿灯亮时,置显示器为30秒,然
后以每秒减1计数方式工作,直至减到数为3
秒时,红绿灯熄灭,黄灯开始间隙闪耀3秒,
减到为0,红绿灯交换,一次工作循环结束,
进入下一步另一方向的工作循环。
4.红绿黄灯均采用发光二极管。
5.设计由晶振电路产生1Hz标准秒信号的单元电
路。
6.要求对整体电路进行仿真,观察并记录下仿真
波形。
三、设计原理:
●交通灯有四个状态:
G1 Y1 R1 G2 Y2 R2 S1. 亮灭灭灭灭亮
S2. 灭闪灭灭灭亮
S3. 灭灭亮亮灭灭
S4. 灭灭亮灭闪灭然后重复状态S1.
●分频器
分频器实现的是将高频时钟信号转换成底频的时钟
信号,用于触发控制器、计数器和扫描显示电路。
该分频器将时钟信号分频成1HZ和4HZ的时钟信
号。
●控制器
控制器的作用是根据计数器的计数值控制发光二极
管的亮、灭,以及输出倒计时数值给七段数码管的
分位译码电路。此外,当检测到为夜间模式时,手
动控制点亮黄灯的二极管。
●计数器
这里需要的计数器的计数范围为30-0。计到0后,
下一个时钟沿回复到30,开始下一轮计数。此外,
当检测到夜间模式时,计数器暂停计数,而系统复
位信号使计数器异步清零。
四、电路设计
1、分频单元电路设计
2、30减计数单元电路设计
3、红黄绿灯控制单元电路设计
4、译码显示单元电路设计
●设计流程
分频
30
减
计
数灯
控
制
电
路
译
码
L
显
示
20
五、实验程序
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
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
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