资源描述:
《交通灯的设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、设计任务设计一个十字路口的红、绿、黄三色信号交通灯控制电路,具体要求如下:1)用红、绿、黄三色发光二极管作信号灯。主干道为东西向,有红、绿、黄三个灯;另一支干道为南北向,也有红、绿、黄三个灯。红灯亮禁止通行;绿灯亮允许通行;黄灯亮则给行驶中的车辆有时间停靠到禁行线之外。2)东西和南北每次绿灯放行26s,红灯禁止30s。在每次由亮绿灯变成亮红灯的转换过程中间,需要亮5s的黄灯作为过渡,以使行驶中的车辆有时间停靠到禁行线以外。3)能实现正常的、即时显示功能,用实验箱上的4个七段数码管作为到计时显示器,分别显示东
2、西、南北方向的红灯、绿灯、黄灯时间。二、设计原理首先要对时钟进行分频。由于系统时钟频率比较大,因此首先分频产生时钟,用于下面的电路的控制;然后是各种颜色之间的转换,在此在添加一个使能端en,当使能端en为1的时候,就开始进行状态循环以及倒计时,然后en就立即变为0;在状态机中一共有四个状态,如下图所示:然后,我们这里用了BCD码表示倒计时时间。灯亮或闪烁时间(绿、黄、红分别为26s、130s、5s)用BCD码表示(分别为26h、30h、5h),倒计时的时候个位和十位分别是BCD码的高四位和低四位,首先是低四位倒
3、数,当倒数到0时,给它重新赋值为9,且高四位减1,如此循环,直到这个数减到0,此时表示某一个灯亮的时间到,接着进行下一个状态,为了能使进入下一个状态,必须在时间减到0的时候,给使能端en赋值1;由于用的BCD码,高四位和低四位就分别是我们要在译码模块的要用数码管显示的十位和个位。用数据选择器来控制东西、南北的灯亮。三、程序流程图开始计数开始高电平个是否小于5M输出进行反向电平计数累加YN1.1分频器的设计流程图开始是否有清零信号个位是否为4计数开始继续累加NYNY个位输出01.25进制的设计流程图开始是否有清零
4、信号个位是否为9计数开始十位是否为2个位十位清零个位加一十位加一输出NYNNYY1.330进制的设计流程图开始是否有清零信号个位是否为9计数开始十位是否为2个位加一十位加一输出个位是否为5个位加一十位个位清零YNNNY1.426进制的设计流程图甲道行驶,乙道禁止状态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甲道禁止,乙道行驶状态
5、s2YC2是否为1甲道禁止,乙道停止Y状态s3NC1是否为1NR1=1,G1=0,Y1=0R2=0,G2=0,Y2=1Y1.5状态机的程序流程图四、程序设计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);end
6、jinzhi5;architecturebehavofjinzhi5isbeginprocess(clk,en)variablea,b:std_logic_vector(3downto0);beginif(rst='0')thena:="0101";b:="0000"elsifclk'eventandclk='1'thenif(en='1')thenif(a=0)thena:="0101";b:="0000",cout<='1';elsea:=a-1;b:="0000",cout<='0';endif;endi
7、f;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);endjinzh
8、i26;architecturebehavofjinzhi26isbeginprocess(clk,en)variablea:std_logic_vector(3downto0);variableb:std_logic_vector(3downto0);beginif(en='0')thena:="0010";b:="0101";elsifclk'eventandclk='1'then