交通灯的设计与实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、设计任务设计一个十字路口的红、绿、黄三色信号交通灯控制电路,具体要求如下:1)用红、绿、黄三色发光二极管作信号灯。主干道为东西向,有红、绿、黄三个灯;另一支干道为南北向,也有红、绿、黄三个灯。红灯亮禁止通行;绿灯亮允许通行;黄灯亮则给行驶中的车辆有时间停靠到禁行线之外。2)东西和南北每次绿灯放行26s,红灯禁止30s。在每次由亮绿灯变成亮红灯的转换过程中间,需要亮5s的黄灯作为过渡,以使行驶中的车辆有时间停靠到禁行线以外。3)能实现正常的、即时显示功能,用实验箱上的4个七段数码管作为到计时显示器,分别显示东西、南北方向的红灯、绿灯、黄灯时间。二、设计原理首先要对时钟进行分频。由于系统时钟频率比较大,因此首先分频产生时钟,用于下面的电路的控制;然后是各种颜色之间的转换,在此在添加一个使能端en,当使能端en为1的时候,就开始进行状态循环以及倒计时,然后en就立即变为0;在状态机中一共有四个状态,如下图所示:然后,我们这里用了BCD码表示倒计时时间。灯亮或闪烁时间(绿、黄、红分别为26s、130s、5s)用BCD码表示(分别为26h、30h、5h),倒计时的时候个位和十位分别是BCD码的高四位和低四位,首先是低四位倒数,当倒数到0时,给它重新赋值为9,且高四位减1,如此循环,直到这个数减到0,此时表示某一个灯亮的时间到,接着进行下一个状态,为了能使进入下一个状态,必须在时间减到0的时候,给使能端en赋值1;由于用的BCD码,高四位和低四位就分别是我们要在译码模块的要用数码管显示的十位和个位。用数据选择器来控制东西、南北的灯亮。三、程序流程图1.1分频器的设计流程图1.25进制的设计流程图开始是否有清零信号个位是否为4计数开始继续累加NYNY个位输出0开始计数开始高电平个是否小于5M输出进行反向电平计数累加YN1.330进制的设计流程图开始是否有清零信号个位是否为9计数开始十位是否为2个位十位清零个位加一十位加一输出NYNNYY1.426进制的设计流程图开始是否有清零信号个位是否为9计数开始十位是否为2个位加一十位加一输出个位是否为5个位加一十位个位清零YNNNY1.5状态机的程序流程图甲道行驶,乙道禁止状态s0R1=0,G1=1,Y1=0R2=0,G2=0,Y2=0C2是否为1NY甲道停止,乙道禁止R1=0,G1=0,Y1=1R2=0,G2=0,Y2=0C1是否为1N状态s1R1=1,G1=0,Y1=0R2=0,G2=1,Y2=0甲道禁止,乙道行驶状态s2YC2是否为1甲道禁止,乙道停止Y状态s3NC1是否为1NR1=1,G1=0,Y1=0R2=0,G2=0,Y2=1Y四、程序设计1、5进制的设计libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjinzhi5isport(clk,en,rst:instd_logic;ge,shi:outstd_logic_vector(3downto0);cout:outstd_logic);endjinzhi5;architecturebehavofjinzhi5isbeginprocess(clk,en)variablea,b:std_logic_vector(3downto0);beginif(rst='0')thena:=0101;b:=0000elsifclk'eventandclk='1'thenif(en='1')thenif(a=0)thena:=0101;b:=0000,cout='1';elsea:=a-1;b:=0000,cout='0';endif;endif;endif;ge=a;shi=b;endprocess;endbehav;仿真结果2、26进制的程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjinzhi26isport(clk,en:instd_logic;ge:outstd_logic_vector(3downto0);shi:outstd_logic_vector(3downto0);cout:outstd_logic);endjinzhi26;architecturebehavofjinzhi26isbeginprocess(clk,en)variablea:std_logic_vector(3downto0);variableb:std_logic_vector(3downto0);beginif(en='0')thena:=0010;b:=0101;elsifclk'eventandclk='1'thenif(a=0andb=0)thena:=0010;b:=0101;cout='1';elseif(b=0)thenb:=1001;a:=a-1;elseb:=b-1;cout='0';endif;endif;endif;ge=b;shi=a;endprocess;endbehav;仿真结果3、30进制的程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjinzhi30isport(clk,en,rst:instd_logic;ge:outstd_logic_vector(3downto0);shi:outstd_logic_vector(3downto0);cout:outstd_logic);endjinzhi30;architecturebehavofjinzhi30isbeginprocess(clk,en)variablea:std_logic_vector(3downto0);variableb:std_logic_vector(3downto0);beginif(rst='0')thena:=0000;b:=0000;elsifclk'eventandclk='1'thenifen='1'thenif(a=0andb=0)thena:=0011;b:=0000;cout='1';elseif(b=0)thenb:=1001;a:=a-1;elseb:=b-1;cout='0';endif;endif;endif;endif;ge=b;shi=a;endprocess;endbehav;仿真结果4、10M分频器的设计libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfenpin20isport(clk:instd_logic;c:outstd_logic);endfenpin10;architectureartoffenpin10issignalm:std_logic_vector(31downto0);signalc1:std_logic;beginprocess(clk)beginifrising_edge(clk)thenifm4999999thenm=m+1;elsem=(others='0');c1=notc1;endif;endif;c=c1;endprocess;endart;仿真结果5、译码器的程序设计电路中需要4个译码器来显示东西、南北的亮灯时间。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityyimaisport(qi:instd_logic_vector(3downto0);qout:outstd_logic_vector(6downto0));endyima;architecturebehavofyimaissignalq:std_logic_vector(6downto0);beginprocess(qi)begincaseqiiswhen0000=q=0111111;when0001=q=0000110;when0010=q=1011011;when0011=q=1001111;when0100=q=1100110;when0101=q=1101101;when0110=q=1111101;when0111=q=0000111;when1000=q=1111111;when1001=q=1101111;whenothers=null;endcase;endprocess;qout=q;endbehav;仿真波形6、四选一数据分配器的程序数据选择器中,Y1,Y2,Y2是从状态机中输出的控制信号,sshi,sge分别代表30进制的十位和各位,eshi,ege分别代表26进制的十位和各位,wshi,wge分别代表5进制的十位和各位。jshi,jge分别连接着甲道的数码管来显示时间。Yshi,yge分别连接着甲道的数码管来显示时间。由于仿真时候设置的数据太多了,在这里就不进行波形仿真了。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityxuanzeqiisport(Y1,Y2,Y3,rst:instd_logic;sshi,sge,eshi,ege,wu:instd_logic_vector(3downto0);jshi,jge,yshi,yge:outstd_logic_vector(3downto0));endxuanzeqi;architecturebehavofxuanzeqiissignalyy:std_logic_vector(2downto0);beginyy=Y1&Y2&Y3;process(yy)beginifrst='0'thenjshi=0000;jge=0000;yshi=0000;yge=0000;elsecaseyyiswhen001=jshi=eshi;jge=ege;yshi=sshi;yge=sge;when010=jshi=0000;jge=wu;yshi=sshi;yge=sge;when011=jshi=sshi;jge=sge;yshi=eshi;yge=ege;when100=jshi=sshi;jge=sge;yshi=0000;yge=wu;whenothers=null;endcase;endif;endprocess;endbehav;7、状态机的设计w1,w2,w3分别为5、26、30进制的进位输出信号,c1,c2,c3分别连接着5、26、30进制的使能端,控制计数器输出信号。Y1,g1,r1分别为甲道的黄灯、绿灯、红灯。,y2,g2,r2分别为乙道的黄灯、绿灯、红灯。Z0,z1,z2连接数据选择器输入端,控制数据选择器的输出数码管。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityzhuangtaijiisport(reset,clk:instd_logic;w1,w2,w3:instd_logic;c1,c2,c3:outstd_logic;y1,y2:outstd_logic;g1,g2:outstd_logic;r1,r2:outstd_logic;z0,z1,z2:outstd_logic);endzhuangtaiji;architecturebehvofzhuangtaijiistypefsm_stis(s0,s1,s2,s3);signalc_st,next_state:fsm_st;beginreg:process(reset,clk)beginifreset='0'thenc_st=

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功