交通灯控制器的课程设计共10页.docx
《交通灯控制器的课程设计共10页.docx》由会员分享,可在线阅读,更多相关《交通灯控制器的课程设计共10页.docx(7页珍藏版)》请在冰豆网上搜索。
交通灯控制器的课程设计共10页
课程设计
课题:
交通灯控制器的设计
一、设计目的:
学习QuartusII的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。
2、设计任务:
1.满足如下时序要求:
南北方向红灯亮时,东西方向绿灯亮,反之亦然。
2.每一方向的红(绿)黄灯共维持30秒。
3.当某一方向绿灯亮时,置显示器为30秒,然后以每秒减1计数方式工作,直至减到数为3秒时,红绿灯熄灭,黄灯开始间隙闪耀3秒,减到为0,红绿灯交换,一次工作循环结束,进入下一步另一方向的工作循环。
4.红绿黄灯均采用发光二极管。
5.设计由晶振电路产生1Hz标准秒信号的单元电路。
6.要求对整体电路进行仿真,观察并记录下仿真波形。
三、设计原理:
●交通灯有四个状态:
G1Y1R1G2Y2R2
S1.亮灭灭灭灭亮
S2.灭闪灭灭灭亮
S3.灭灭亮亮灭灭
S4.灭灭亮灭闪灭
然后重复状态S1.
●分频器
分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。
该分频器将时钟信号分频成1HZ和4HZ的时钟信号。
●控制器
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
此外,当检测到为夜间模式时,手动控制点亮黄灯的二极管。
●计数器
这里需要的计数器的计数范围为30-0。
计到0后,下一个时钟沿回复到30,开始下一轮计数。
此外,当检测到夜间模式时,计数器暂停计数,而系统复位信号使计数器异步清零。
四、电路设计
1、分频单元电路设计
2、30减计数单元电路设计
3、红黄绿灯控制单元电路设计
4、译码显示单元电路设计
●设计流程
●
20MHZ
五、实验程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjiaotongis
port(clk,clr:
instd_logic;
clk1,clk2,clk3:
bufferstd_logic;---分频信号
pout:
outstd_logic_vector(6downto1);---东西南北的红绿黄灯状态表示
C1:
outstd_logic_vector(3downto0);---BCD码高四位表示
C0:
outstd_logic_vector(3downto0));---BCD码低四位表示
endjiaotong;
architectureoneofjiaotongis
signalg1,y1,r1,g2,y2,r2:
STD_LOGIC;---1表示东西方向,2表示南北方向,g,y,r分别表示绿灯,黄灯,红灯
signaldiv:
integerrange0to20190000;---分频1
signaldivn:
integerrange0to4000000;---分频2,用于控制黄灯闪烁
typestis(s1,s2,s3,s4);---分别表示红绿黄灯的四种组合状态
signalstate:
st;
begin
C:
process(clk)
begin
ifclk'eventandclk='1'then---对20HZ进行分频,1HZ
if(div<20201999)then
div<=div+1;
clk1<='0';
elsediv<=0;clk1<='1';
endif;
if(divn<2499999)then---用于黄灯闪烁
divn<=divn+1;
clk2<='0';
elsedivn<=0;clk2<='1';
endif;
endif;
endprocess;
process(clk1)is
variablet:
integer:
=31;---初始赋值
begin
ifclr='1'then---夜间时为黄灯闪烁,且为手动控制
pout(6)<='0';pout(5)<=clk2and'1';pout(4)<='0';
pout(3)<='0';pout
(2)<=clk2and'1';pout
(1)<='0';
elseif(clk1'eventandclk1='1')then
t:
=t-1;
casestateis---四种组合状态转换
whens1=>
G1<='1';Y1<='0';R1<='0';G2<='0';Y2<='0';R2<='1';
if(t=3)thenstate<=s2;
elsestate<=s1;
endif;
whens2=>
G1<='0';Y1<='1';R1<='0';G2<='0';Y2<='0';R2<='1';
if(t=0)thenstate<=s3;t:
=30;
elsestate<=s2;
endif;
whens3=>
G1<='0';Y1<='0';R1<='1';G2<='1';Y2<='0';R2<='0';
if(t=3)thenstate<=s4;
elsestate<=s3;
endif;
whens4=>
G1<='0';Y1<='0';R1<='1';G2<='0';Y2<='1';R2<='0';
if(t=0)thenstate<=s1;t:
=30;
elsestate<=s4;
endif;
whenothers=>NULL;
endcase;
casetis---十进制数与BCD码一一对应赋值,输出时便于七段显示译码器显示
when0=>C1<="0000";C0<="0000";
when1=>C1<="0000";C0<="0001";
when2=>C1<="0000";C0<="0010";
when3=>C1<="0000";C0<="0011";
when4=>C1<="0000";C0<="0100";
when5=>C1<="0000";C0<="0101";
when6=>C1<="0000";C0<="0110";
when7=>C1<="0000";C0<="0111";
when8=>C1<="0000";C0<="1000";
when9=>C1<="0000";C0<="1001";
when10=>C1<="0001";C0<="0000";
when11=>C1<="0001";C0<="0001";
when12=>C1<="0001";C0<="0010";
when13=>C1<="0001";C0<="0011";
when14=>C1<="0001";C0<="0100";
when15=>C1<="0001";C0<="0101";
when16=>C1<="0001";C0<="0110";
when17=>C1<="0001";C0<="0111";
when18=>C1<="0001";C0<="1000";
when19=>C1<="0001";C0<="1001";
when20=>C1<="0010";C0<="0000";
when21=>C1<="0010";C0<="0001";
when22=>C1<="0010";C0<="0010";
when23=>C1<="0010";C0<="0011";
when24=>C1<="0010";C0<="0100";
when25=>C1<="0010";C0<="0101";
when26=>C1<="0010";C0<="0110";
when27=>C1<="0010";C0<="0111";
when28=>C1<="0010";C0<="1000";
when29=>C1<="0010";C0<="1001";
when30=>C1<="0011";C0<="0000";
whenothers=>NULL;
endcase;
endif;
pout(6)<=G1;pout(5)<=clk2andY1;pout(4)<=R1;---东西南北六盏灯对应
pout(3)<=G2;pout
(2)<=clk2andY2;pout
(1)<=R2;
endif;
endprocess;
endone;
六、测试方法与测试结果
1、测试仪器:
QUARTUSⅡ
2、测试方法:
FPGA下载验证与仿真验证
3、测试结果:
满足设计要求
以20HZ为基准仿真:
仿真结果:
C1:
显示30减计数的个位
C0:
显示30减计数的十位
POUT(6):
东西方向绿灯控制端
POUT(5):
东西方向黄灯控制端
POUT(4):
东西方向红灯控制端
POUT(3):
南北方向绿灯控制端
POUT
(2):
南北方向黄灯控制端
POUT
(1):
南北方向红灯控制端
●白天
●夜间黄灯闪烁(手动控制)
●设计满足了
1.30秒倒数显示
2.两个方向灯的交替
3.黄灯在最后3秒闪烁
七、讨论
该电路基本上满足了设计要求,电路简单,实现容易,节省器件。
在设计过程中发现的问题以及需改进的地方在下面予以讨论:
1.刚开始设置时黄灯在一个周期内闪烁五次导致连接硬件时黄灯不能正常工作,因为占空比太大,可以将其改正,使其在一个周期内闪烁十次。
2.黄灯在夜间亮即可,不需要闪烁,闪烁会造成对器件的耗损程度加大,该项设置可通过在CASE语句中对其赋值来实现。
3.手动控制可将减计数设为可控减计数器,红黄绿灯可在CASE语句的赋值中实现控制。
另外,手动控制在实际使用的过程中并不方便,可以在控制信号一端设置一个控制器使其能够达到自动控制的目的。
希望以上资料对你有所帮助,附励志名言3条:
1、理想的路总是为有信心的人预备着。
2、最可怕的敌人,就是没有坚强的信念。
——罗曼·罗兰
3、人生就像爬坡,要一步一步来。
——丁玲