北邮数电综合实验--交通灯_第1页
北邮数电综合实验--交通灯_第2页
北邮数电综合实验--交通灯_第3页
北邮数电综合实验--交通灯_第4页
北邮数电综合实验--交通灯_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电路与逻辑设计实验 题目:交通灯控制器数字电路与逻辑设计实验报告一设计课题的任务要求设计制作一个用于十字路口的交通灯控制器(1)南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5秒和25秒; (2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行;(3)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间; 选做:增加左、右转弯显示控制功能;二系统设计(1)基本设计思路: 基本思路是采用状态机的设计方法,共设计了5个状态,具体状态列表如下:S0东西绿灯,南北红灯20sS1

2、东西黄灯,南北红灯5sS2东西红灯,南北绿灯20sS3东西红灯,南北黄灯5sS4东西红灯,南北红灯 状态图如下: (2)最终设计框图和模块化设计方案:最终设计的总体框图:模块化设计方案:模块名称文件名称完成功能分频器模块1Frequency1将1MHZ时钟分频输出1kz的信号分频器模块2Frequency2将1kz时钟分频输出1hz的信号Led控制模块Jiaotongled完成交通灯的控制,并输出计时信号倒计时显示1Shumaguan1倒计时显示倒计时显示2Shumaguan2将倒计时信号译码为对应的数码管信号三仿真波形及波形分析:(1)分频器1仿真波形及分析:分频器1元件图:仿真图: 参数设

3、置:End time=5ms f=50MHz仿真波形分析:从时间轴上可以看到,输出时钟间隔为1ms,输出时钟频率为1kz,达到要求。(2)分频器2的仿真波形及分析: 分频器2元件图:参数设置:End time=10s f=1khz仿真波形如图:仿真波形分析:从时间轴上可以看到,输出时间间隔变为1s,实现了将1kz分频为1hz.(3)LED控制模块的仿真波形及分析:Led的元件图:引脚说明:输入:clk:1hz的时钟。Reset:异步复位信号Emergency:同步紧急信号输出:east_green_led 东西方向绿灯 east_yellow_led 东西方向黄灯east_red_led 东西

4、方向红灯south_green_led 东西方向绿灯south_yellow_led 东西方向黄灯south_red_led 东西方向红灯counter:计数器信号仿真波形1(reset信号和emergency信号一直为0):波形分析:计数器冲1计数到50后,又变为1,东西交通灯在1到20为绿灯,21到25为黄灯,26到50为红灯南北交通灯在1到25为红灯,26到45为绿灯,46到50为黄灯,符合交通灯变化规律,仿真波形正确。仿真波形2(reset信号有效,emergency信号一直无效):注:本实验中复位信号为一部复位,紧急信号为同步信号观察更大范围:波形分析:当遇到异步复位信号后,计数器重

5、新变为1,且红绿灯工作正常。仿真波形2(emergency信号有效,reset信号一直无效):注:本实验中复位信号为一部复位,紧急信号为同步信号观察更大范围:波形分析:当遇到紧急信号时,计数器保持不变,暂停计数,当紧急信号解除时,计数器继续计数,且交通灯输出正常,达到预期要求。(4)倒计时控制模块的仿真波形: 由于倒计时模块设计比较简单,且仿真意义不大,在此仅将元件图列出:Shumaguan1:引脚说明:count:上一级jiaotongled的输出信号counter,计数信号 Clk:1kz的时钟信号 Numin: 输出7段数码管显示数字信号,输出到译码模块 CAT_TEMP: 7端数码管共

6、阴极输出控制信号Shumaguan2:引脚说明:NUM_IN:上一级shumaguan1输出地数字信号。 NUM::7端数码管输出最终总的模块连接图为:四.源程序(配注释):(1)分频器模块:分频器1 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY frequency1 ISPORT(CLK:IN STD_LOGIC;-输入时钟频率:50MHZCLK_OUT:OUT STD_LOGIC);END frequency1;ARCHITECTURE FREQ OF frequency1 I

7、SSIGNAL TEMP:INTEGER RANGE 0 TO 49999;-设置分频49999,则为1kHzBEGINPROCESS(CLK)BEGINIF(CLKEVENT AND CLK=1)THENIF(TEMP=49999)THENTEMP=0;ELSETEMP=TEMP+1;END IF;IF TEMP49999 THEN CLK_OUT=0; ELSE CLK_OUT=1; END IF; END IF;END PROCESS;END;分频器2:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED

8、.ALL;ENTITY frequency2 ISPORT(CLK:IN STD_LOGIC;-输入频率为1kzCLK_OUT:OUT STD_LOGIC);END frequency2;ARCHITECTURE FREQ OF frequency2 ISSIGNAL TEMP:INTEGER RANGE 0 TO 999;-设置分频999,则为1hzBEGINPROCESS(CLK)BEGINIF(CLKEVENT AND CLK=1)THENIF(TEMP=999)THENTEMP=0;ELSETEMP=TEMP+1;END IF;IF TEMP999 THEN CLK_OUT=0; EL

9、SE CLK_OUT=1; END IF; END IF;END PROCESS;END;(2)Led控制模块(jiaotongled):用library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity jiaotongLED is generic(-定义灯亮的时间 east_green_cnt:integer:=20;-东西方向主干道绿灯 east_yellow_cnt:integer:=5;-东西方向主干道黄灯 south_green_c

10、nt:integer:=20;-南北方向支干道绿灯 south_yellow_cnt:integer:=5);-南北方向支干道黄灯 port(clk:in std_logic; rst:in std_logic;-复位信号 exi_sign:in std_logic;-紧急车辆信号 east_green_led:out std_logic; east_yellow_led:out std_logic; east_red_led:out std_logic; south_green_led:out std_logic; south_yellow_led:out std_logic; south_

11、red_led:out std_logic; count:out std_logic_vector(5 downto 0);end jiaotongLED;-architecture ex of jiaotongLED istype states is(s0,s1,s2,s3,s4);-定义五个状态S0,S1,S2,S3,S4signal state1:states:=s0;signal state:states:=s0;-遇到紧急信号时,将当前状态暂存在state1中signal cnt:integer range 0 to 20;-利用cnt控制状态转换signal save_cnt:in

12、teger;-遇到紧急信号时,将cnt暂存在save_cnt中signal enable_cnt:std_logic:=0;signal tempcount:integer range 1 to 50:=1;-初始化计数器为1begin-u1:process(rst,clk)-信号灯的时间状态的转换begin if rst=1 then-异步复位 tempcount=1;state=s0;cnt=1; elsif clkevent and clk=1 then if exi_sign=1 then-遇到紧急信号,暂停计数tempcount=tempcount;cnt=cnt;elseif te

13、mpcount=50 then tempcount=1;-计数器tempcout达到50,重新从1开始计数else tempcount=tempcount+1;end if;if enable_cnt=1 then cnt=cnt+1;elsecnt if exi_sign=1 then-判断是否紧急车辆 save_cnt=cnt; state1=s0; state=s4; elsif(cnt=east_green_cnt)then state=s1; else state if exi_sign=1 then-判断是否紧急车辆 save_cnt=cnt; state1=s1; state=s

14、4; elsif(cnt=east_yellow_cnt)then state=s2; else state if exi_sign=1 then-判断是否紧急车辆 save_cnt=cnt; state1=s2; state=s4; elsif(cnt=south_green_cnt)then state=s3; else state if exi_sign=1 then-判断是否紧急车辆 save_cnt=cnt; state1=s3; state=s4; elsif(cnt=south_yellow_cnt)then state=s0; else state if exi_sign=1

15、then-判断是否紧急车辆 state=s4; elsif exi_sign=0 thenstate=state1;cnt=save_cnt+1; end if; end case; end if;end process u1;count-S0时,显示东西绿灯,南北红灯 east_green_led=1; east_yellow_led=0; east_red_led=0; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; if(cnt=east_green_cnt)then enable_cnt- S1

16、时,显示东西黄灯,南北红灯 east_green_led=0; east_yellow_led=1; east_red_led=0; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; if(cnt=east_yellow_cnt)then enable_cnt-S2时,显示东西红灯,南北绿灯 east_green_led=0; east_yellow_led=0; east_red_led=1; south_green_led=1; south_yellow_led=0; south_red_led=0;

17、 enable_cnt=1; if(cnt=south_green_cnt)then enable_cnt-S3时,显示东西红灯,南北黄灯 east_green_led=0; east_yellow_led=0; east_red_led=1; south_green_led=0; south_yellow_led=1; south_red_led=0; enable_cnt=1; if(cnt=south_yellow_cnt)then enable_cnt-紧急状态上时,显示东西红灯,南北红灯 east_green_led=0; east_yellow_led=0; east_red_le

18、d=1; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; end case;end process u2;end ex; (3)倒计时输出:Shumaguan1:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY shumaguan1 IS PORT( COUNT:IN STD_LOGIC_VECTOR(5 DOWNTO 0);-计数器输入

19、信号 CLK:IN STD_LOGIC;-时钟信号 NUMIN:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-输出7段数码管显示数字信号,输出到译码模块 CAT_TEMP:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);-7端数码管共阴极输出控制信号 NUMIN1:OUT STD_LOGIC_VECTOR (3 DOWNTO 0)-输出7段数码管显示数字信号(波形图观察) );END shumaguan1;ARCHITECTURE COUNTSHOW OF shumaguan1 ISSIGNAL TEMP:INTEGER RANGE 0 TO 3;SIG

20、NAL COUNTER:INTEGER RANGE 1 TO 50;SIGNAL CAT:STD_LOGIC_VECTOR(5 DOWNTO 0):=;SIGNAL NUM_IN:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP1:PROCESS(CLK)-内部时钟,控制7段数码管显示扫描内容BEGIN COUNTER=CONV_INTEGER(COUNT);IF(CLKEVENT AND CLK=1)THENIF(TEMP=3)THENTEMP=0;ELSETEMP=TEMP+1;END IF;END IF;END PROCESS P1;P2:PROCESS(COUNT

21、ER,TEMP) BEGIN COUNTERCASE TEMP IS-在每个状态内部设置数码管扫描过程,由于COUNTER和-扫描时钟不同 -则可在数码管上同时显示4个数字. WHEN 0=NUM_IN=0001;CATNUM_IN=1001;CATNUM_IN=0010;CATNUM_IN=0100;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=1000;CATNUM_IN=0010;CATNUM_IN=0011;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0111;CATNUM_IN=0010;CAT

22、NUM_IN=0010;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0110;CATNUM_IN=0010;CATNUM_IN=0001;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0101;CATNUM_IN=0010;CATNUM_IN=0000;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0100;CATNUM_IN=0001;CATNUM_IN=1001;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=001

23、1;CATNUM_IN=0001;CATNUM_IN=1000;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0010;CATNUM_IN=0001;CATNUM_IN=0111;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0001;CATNUM_IN=0001;CATNUM_IN=0110;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0000;CATNUM_IN=0001;CATNUM_IN=0101;CATCASE TEMP IS WHEN 0=NUM_I

24、N=0000;CATNUM_IN=1001;CATNUM_IN=0001;CATNUM_IN=0100;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=1000;CATNUM_IN=0001;CATNUM_IN=0011;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0111;CATNUM_IN=0001;CATNUM_IN=0010;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0110;CATNUM_IN=0001;CATNUM_IN=0001;CATCASE

25、TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0101;CATNUM_IN=0001;CATNUM_IN=0000;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0100;CATNUM_IN=0000;CATNUM_IN=1001;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0011;CATNUM_IN=0000;CATNUM_IN=1000;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0010;CATNUM_IN=0000;CAT

26、NUM_IN=0111;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0001;CATNUM_IN=0000;CATNUM_IN=0110;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0000;CATNUM_IN=0000;CATNUM_IN=0101;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0100;CATNUM_IN=0000;CATNUM_IN=0100;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=001

27、1;CATNUM_IN=0000;CATNUM_IN=0011;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0010;CATNUM_IN=0000;CATNUM_IN=0010;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0001;CATNUM_IN=0000;CATNUM_IN=0001;CATCASE TEMP IS WHEN 0=NUM_IN=0000;CATNUM_IN=0000;CATNUM_IN=0000;CATNUM_IN=0000;CATCASE TEMP IS WHEN 0=NUM_I

28、N=0001;CATNUM_IN=1001;CATNUM_IN=0010;CATNUM_IN=0100;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=1000;CATNUM_IN=0010;CATNUM_IN=0011;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0111;CATNUM_IN=0010;CATNUM_IN=0010;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0110;CATNUM_IN=0010;CATNUM_IN=0001;CATCASE

29、TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0101;CATNUM_IN=0010;CATNUM_IN=0000;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0100;CATNUM_IN=0001;CATNUM_IN=1001;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0011;CATNUM_IN=0001;CATNUM_IN=1000;CATCASE TEMP IS WHEN 0=NUM_IN=0001;CATNUM_IN=0010;CATNUM_IN=0001;CATNUM_IN=011

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论