交通灯控制器课程设计.doc

上传人:精*** 文档编号:855563 上传时间:2023-09-17 格式:DOC 页数:20 大小:270.88KB
下载 相关 举报
交通灯控制器课程设计.doc_第1页
第1页 / 共20页
交通灯控制器课程设计.doc_第2页
第2页 / 共20页
交通灯控制器课程设计.doc_第3页
第3页 / 共20页
交通灯控制器课程设计.doc_第4页
第4页 / 共20页
交通灯控制器课程设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、电气与信息工程学院本科生课程设计目录一、 设计目的二、 设计要求三、 设计原理四、 设计程序五、设计心得19一、 设计目的1、用红、绿、黄三色发光二极管做信号灯,主干道A为东西向,设红、绿、黄三色灯为AR、AG、AY;支干道B喂南北向。三色灯为BR、BG、BY。2、主干道车辆较多,所以亮绿灯的时间设为50s;支干道亮绿灯的时间设为30s。当主干道允许通行亮绿灯时则支干道亮红灯;相反,支干道允许通行亮绿灯时则主干道亮红灯。每次由绿灯转变为红灯时,其间要亮5s的黄灯作为过渡,以便行驶中的车辆有时间停到禁止线以内。3、交通灯正常运行时,用4位数码管M1、M2、M3、M4显示主干道和支干道的倒计时时间

2、,M1、M2显示主干道在当前状态剩余时间;m3、m4显示支干道在当前状态的剩余时间。4、能实现系统总清0,清0后计数器由出事状态开始计数。指示灯指示主干道亮绿灯。5、具有一定的扩展功能: 它能实现特殊状态的功能先死,用开关S作为特殊信号传感器,S为1时进入特殊状态并实现下列特殊状态功能: 1)显示器M1、M2、M3、M4闪烁,即在全0和当前计时时间中交替显示。 2)计数器停止计数并保持原来的时间数据。 3)东西、南北方向的三色灯全显示为红色状态。 4)特殊状态解除后能继续返回正常工作状态。 5)进入特殊状态时,音响电路发出急促的“嘀嘟”声,以示警告。二、设计要求 1、分析设计任务,拟定多种设计

3、方案,根据当时的制作条件,选定其中的一种方案绘制系统框图和设计流程。 2、设计各部分单元电路或编写VHDL描述程序。计算元器件参数、确定元器件幸好和数量,提出元器件清单。 3、安装调试硬件电路,或制作以CPLD/FPGA为基础的专用集成电路芯片ASIC。 4、对制作的电路进行功能测试,分析各项技术指标;或对设计的电路进行功能仿真,分析仿真波形。对ASIC电路做硬件测试或脱机运行。 5、总结设计资料,打印包括原理电路(或VHDL描述)、仿真波形的设计报告,交验并演示电路装置三、设计原理 1、系统设计原理框图 交通灯控制器原理框图如下,包括置数模块、主控制器模块、译码器模块和数据选择器模块几个部分

4、。置数模块将交通灯的点亮时间初值预置到置数电路中,预置的具体数据则由控制器当前的状态决定,即点亮不同颜色的灯则置入不同的值。计数器电路则根据预置的初值做减1操作,当减到零时则预置时间到;又使主控制器的状态发生变化,启动计时电路进入下一个状态的倒计时。译码器模块将主控制电路的当前状态译码为红、绿、黄三色信号灯的点亮信号。整个电路的核心是主控制器。南北方向显示器东西方向显示器时钟信号1HZ清0(CR)特殊状态SBRBYBGAGAYAR主控制器十位个位译码器译码器MUX接地计数器A置数器A十位个位译码器译码器MUX接地计数器B置数器B分频器绿 黄 红 红 黄 绿交通灯控制器原理框图2、主控制器 主控

5、制器决定控制电路状态变化的顺序。主控制器的输入信号有:控制器目前状态S1S0,特殊情况输入信号S、50s计时时间到信号T50,30s计时时间到信号T30,输出信号是控制器的次态Z1Z0。可直接设计为时序电路,也可以先设计为组合电路后加接触发器,下图是主控电路的框图。主控制器原理框图FFC1FFC0S0 Z0S1 Z1 ST30T50 S0S1 ST30T50CPCLRD QC CLRD QC CLRZ0Z1四、设计程序 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC

6、_UNSIGNED.ALL;entity tr_m is Port ( rst : in STD_LOGIC; clk : in STD_LOGIC; s : in STD_LOGIC; speak:out std_logic; BCD_out : out STD_LOGIC_VECTOR (7 downto 0); BCDout : out STD_LOGIC_VECTOR (7 downto 0); led: out STD_LOGIC_VECTOR (7 downto 0);end tr_m;architecture Behavioral of tr_m istype numstate

7、is (S1GR,S2YR,S3RG,S4RY,S5RR,S6RR);signal state : numstate;signal SBCD_out : STD_LOGIC_VECTOR (7 downto 0);constant c1: STD_LOGIC_VECTOR (7 downto 0) :=X55;constant c3: STD_LOGIC_VECTOR (7 downto 0) :=X35;signal state_tem: numstate;signal sled : STD_LOGIC_VECTOR (7 downto 0) ;signal n:std_logic;begi

8、nled=sled;process(clk,rst)begin if(rst=1) then n=1; elsif(rising_edge(clk) then if(sBCD_out=x55) then BCD_out=x50; BCDout=x55; elsif sBCD_out=x35 then BCD_out=x35; BCDout=x0 and sBCD_out(3 downto 0)=x4) then BCD_out = SBCD_out-x6-5; else BCD_out = SBCD_out-5; end if; BCDout = SBCD_out; elsif(sled=x2

9、1) then BCD_out = SBCD_out; BCDout =x0 and sBCD_out(3 downto 0)=x4) then BCDout = SBCD_out-x6-5; else BCDout = SBCD_out-5; end if; BCD_out = SBCD_out; elsif(sled=x12) then BCD_out = SBCD_out; BCDout = SBCD_out; elsif(sled=x11 and n=1 and s=1) then n=0; BCD_out = x00; BCDout = x00; elsif(sled=x11 and

10、 n=0 and s=1) then n=x0 and sBCD_out(3 downto 0)=x4) then BCDout = SBCD_out-x6-5; else BCDout = SBCD_out-5; end if; BCD_out =x0 and sBCD_out(3 downto 0)=x4) then BCD_out = SBCD_out-x6-5; else BCD_out = SBCD_out-5; end if; BCDout = SBCD_out; else BCD_out = SBCD_out; BCDout =x0 and sBCD_out(3 downto 0

11、)=x4) then BCDout = SBCD_out-x6-5; else BCDout = SBCD_out-5; end if; BCD_out =x0 and sBCD_out(3 downto 0)=x4) then BCD_out = SBCD_out-x6-5; else BCD_out = SBCD_out-5; end if; BCDout = SBCD_out; else BCD_out = SBCD_out; BCDout = SBCD_out; end if; end if; end if;end process;cntproc: process(rst,clk,st

12、ate_tem)beginif rst=1 then SBCD_out=c1;elsif rising_edge(clk) then if s=1 then SBCD_out=SBCD_out; elsif SBCD_out=1 then if sled=x12 then SBCD_out=c1; elsif sled=x21 then SBCD_out=c3; end if; elsif SBCD_out(3 downto 0)=0 then SBCD_out = SBCD_out-7; else SBCD_out = SBCD_out-1; end if;end if;end proces

13、s;stateproc: process(rst,clk)begin if rst=1 then state=S1GR; state_tem=S1GR; elsif rising_edge(clk) then if s=1 and n=1 then state=S5RR; elsif s=1 and n=0 then state=S6RR; elsif sled=x11 then state=state_tem; elsif SBCD_out=X06 then if sled=x41 then state=S2YR; state_tem=S2YR; elsif sled=x14 then st

14、ate=S4RY; state_tem=S4RY; end if; elsif SBCD_out=X01 then if sled=x21 then state=S3RG; state_tem=S3RG; elsif sled=x12 then state=S1GR; state_tem sled=x41; speak sled=x21; speak sled=x14; speak sled=x12; speak sled=x11; speak sled=x11; speak null;end case;end if;end process;end Behavioral; - Company:

15、- Engineer:- Create Date: 14:56:21 05/13/2012- Design Name:- Module Name: jiaotongdeng - Behavioral- Project Name:- Target Devices:- Tool versions:- Description:- Dependencies:- Revision:- Revision 0.01 - File Created- Additional Comments:-library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_

16、ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity jiaotongdeng is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; s : in STD_LOGIC; ar : out STD_LOGIC; ag : ou

17、t STD_LOGIC; ay : out STD_LOGIC; br : out STD_LOGIC; bg : out STD_LOGIC; by : out STD_LOGIC; bcd_out : out STD_LOGIC_VECTOR (7 downto 0); sound : out STD_LOGIC);end jiaotongdeng;architecture Behavioral of jiaotongdeng istype numstate is (S1gr,S2yr,S3rg,S4ry);signal state: numstate;signal sbcd_out: S

18、TD_LOGIC_VECTOR (7 downto 0);signal sar : STD_LOGIC;signal sag : STD_LOGIC;signal say : STD_LOGIC;signal sbr : STD_LOGIC;signal sbg : STD_LOGIC;signal sby : STD_LOGIC;signal ssound:STD_LOGIC;beginbcd_out=sbcd_out;ar=sar;ag=sag;ay=say;br=sbr;bg=sbg;by=sby;sound=ssound;out_process:process(state,clk,s)

19、beginif s=1 then sar=1; sag=0; say=0; sbr=1; sbg=0; sby=0; ssound=1;elsif rising_edge(clk) then if state=s1gr then sar=0; sag=1; say=0; sbr=1; sbg=0; sby=0; ssound=0; elsif state=s2yr then sar=0; sag=0; say=1; sbr=1; sbg=0; sby=0; ssound=0; elsif state=s3rg then sar=1; sag=0; say=0; sbr=0; sbg=1; sb

20、y=0; ssound=0; elsif state=s4ry then sar=1; sag=0; say=0; sbr=0; sbg=0; sby=1; ssound=0; end if;end if;end process;sbcd_process:process(clk,rst,s)beginif s=1 then sbcd_out=sbcd_out;elsif rst=1 then sbcd_out=X55;elsif rising_edge(clk) then if sbcd_out=1 then if state=S4ry then sbcd_out=X55; elsif sta

21、te=S2yr then sbcd_out=X35; end if; elsif sbcd_out(3 downto 0)=0 then sbcd_out = sbcd_out-7; else sbcd_out = sbcd_out-1; end if;end if;end process;state_process:process(clk,rst)beginif rst=1 then state=s1gr;elsif rising_edge(clk) then if sbcd_out=X06 then if state=S1gr then state=S2yr; elsif state=S3

22、rg then state=S4ry; end if; elsif sbcd_out=X01 then if state=S2yr then state=S3rg; elsif state=S4ry then state=S1gr; end if; end if;end if;end process;end Behavioral; LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity alarm isport( clk,rst: in std_logic; alarm : in std_l

23、ogic; div : out std_logic);end alarm;architecture arct of alarm issignal cnt : natural range 0 to 200000 ;signal div_r : std_logic;beginprocess(div_r)begindiv = div_r;end process;process(Clk,rst)beginif(rst = 1) then cnt = 0; div_r = 0;elsif(rising_edge(clk) then if(alarm = 1) then if(cnt = 200000)

24、then div_r = not div_r; cnt = 0; else cnt = cnt + 1; end if; else if(alarm=0) then div_r=0; end if; end if;end if;end process;end arct;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity JTDLCD is port (CPIN,R,BUSY :IN STD_LOGIC; EW,SN :IN STD_LOGIC_VECTOR(7 DOWNTO 0); EW

25、RYG,SNRYG : IN STD_LOGIC_VECTOR(2 DOWNTO 0); CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC; DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );end entity ;architecture JGT of JTDLCD is TYPE STATES IS (S0,S1,S2,S3,S4); SIGNAL S: STATES; SIGNAL LCDPT : INTEGER RANGE 0 TO 10; S

26、IGNAL CPCT : INTEGER RANGE 0 TO 65535; SIGNAL CP: STD_LOGIC; SIGNAL ASCEW,ASCSN : STD_LOGIC_VECTOR(7 DOWNTO 0);beginPROCESS(CPIN,R)BEGINCLK=CPIN;IF R=1 THEN CPCT=65535;ELSIF CPIN=1 AND CPIN EVENT THEN IF CPCT=0 THEN CPCT=65535;CP=NOT CP; ELSE CPCT=CPCT-1; END IF;END IF;END PROCESS; PROCESS(CP,R)BEGI

27、NIF R=1 THEN S=S0;LCDPT=0;RST S=S1;LCDPT=0;RST RST=0;STROBE=0; IF BUSY=0 THEN LCDPT=LCDPT+1; IF LCDPT=5 THEN S=S3; ELSE S S=S1;STROBE STROBE=0; IF BUSY=0 THEN IF LCDPT=10 THEN LCDPT=5; ELSE LCDPT=LCDPT+1; END IF; S STROBE=1;S NULL; END CASE;END IF; END PROCESS;PROCESS(LCDPT)BEGINCASE LCDPT ISWHEN 0

28、= NULL;WHEN 1= DATA=01000101;ADDR=0101;OUTLINE DATA=01010111;ADDR=0110;OUTLINE DATA=01010011;ADDR=1001;OUTLINE DATA=01001110;ADDR=1010;OUTLINEDATA=0011&EW(7 DOWNTO 4);ADDR=0101;OUTLINEDATA=0011&EW(3 DOWNTO 0);ADDR=0110;OUTLINEDATA=ASCEW;ADDR=0100;OUTLINEDATA=0011&SN(7 DOWNTO 4);ADDR=1001;OUTLINEDATA

29、=0011&SN(3 DOWNTO 0);ADDR=1010;OUTLINEDATA=ASCSN;ADDR=1000;OUTLINE NULL;END CASE;END PROCESS;PROCESS(EWRYG)BEGINCASE EWRYG ISWHEN 100 = ASCEW ASCEW ASCEW NULL;END CASE;END PROCESS;PROCESS(SNRYG)BEGINCASE SNRYG ISWHEN 100 = ASCSN ASCSN ASCSN NULL;END CASE;END PROCESS; end architecture JGT;library IEE

30、E;use IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;- Uncomment the following library declaration if using- arithmetic functions with Signed or Unsigned values-use IEEE.NUMERIC_STD.ALL;- Uncomment the following library declaration if instantiating- any Xilinx primitives in this code.-library UNISIM;-use UNISIM.VComponents.all;entity fengmingming_main is Port ( clk_1 : in STD_LOGIC;

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 技术资料 > 课程设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922