已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 说 明 书 题 目:十字路口交通灯控制系统 系 别:计 算 机 科 学 与 技 术 班 级: 10 计 科 2 姓 名: 王维 指导老师: 郑 朝 霞 同组成员:白雪峰 黄贵强 湖 北 工 业 大 学二O一二 年 十二 月 二十一 日目 录1、 概述设计任务与要求32、 系统分析电路工作原理及设计思路43、 总体和模块框图总体框图6具体模块框图64、 功能模块设计各模块原理及其程序95、 程序代码设计与分析程序代码126、 运行仿真 197、 心得体会 228、 参考文献 221、 概述在熙熙攘攘的都市中,为了保证城市道路的畅通与行人的安全,交通灯是城市交通监管的重要组成部分。但由于目前很多城市的交通灯实行的是定时控制,在时间和空间方面的应变性能较差,在一定程度上造成了交通资源的浪费,加重了道路交通压力。而设计周全的交通灯考虑了车流量等因素,有较大的可变性。在一定程度上改变了城市交通的现状,减少交通事故发生的概率。EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。设计任务与要求:1. 设计任务设计一个十字路口交通控制器,分为手动操作、自动操作和复位系统,假设南北方向和东西方向,两个方向分别设置左拐、绿、黄和红四盏灯,每个方向设置一组倒计时显示器,用以指挥车辆和行人有序的通行。红灯亮表示左转和直行车辆禁行;绿灯亮表示直行车辆可以通行;黄灯亮表示左转或直行车辆即将禁行;左拐灯亮表示左转车辆可以通行;倒计时显示器用来显示允许通行或禁止通行的时间 。2. 设计要求1) 在十字路口南北和东西两个方向各设一组红灯、绿灯、黄灯和左拐灯。显示顺序:绿灯 黄灯 红灯 左拐 黄灯 红灯。在南北和东西两个方向各设一组倒计时显示器。2) 自动控制:设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,南北方向为主干道,左拐、绿灯、黄灯和红灯显示时间分别是20s、20s、5s和20s。东西方向为次干道,左拐、绿灯、黄灯和红灯显示时间分别为15s、15s、5s和25s。3) 手动控制:按按钮依次执行以上显示状态,绿灯 黄灯 红灯 左拐 黄灯 红灯,倒计时显示为“0”。4) 系统设有总复位开关,可在任意时间内对系统进行复位。5) 通过开关按钮切换交通灯的工作状态。2、 系统分析2.1交通灯工作流程分析 十字路口的交通灯指挥着行人和各种车辆的安全运行。实现红绿灯的自动指挥是城市交通管理自动化的重要课题。在一个具有主、支干道的十字路口,设计一个交通灯自动控制装置,实现如下功能: 1.由主干道和支干道汇合成十字路口,在入口处设置 红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。 2.当主干道与支干道均无车辆要求通行时,主干道应保持畅通,亮绿灯;支干道亮红灯。 3.如果主干道无车,支干道有车,则允许支干道通行,主干道亮红灯,支干道亮绿灯。 4.如果主干道和支干道均有车要求通行,则两者应交替通行,并要求主干道每次通行30秒钟,支干道每次通行20秒钟。 5.每次绿灯变红,黄灯应先亮5秒。 2.2设计思路:1硬件:由设计任务要求可知,总体输入电路有:(1)在开始计时之前的等待状态,复位键reset接低电位,接通电源后,首先要将它接高电位,表示计时开始。(2)当按一下(on_off)键,表示紧急情况发生,两个方向均为红灯亮,计时停止,当再次按下(on_off)键时,控制器恢复原来状态,正常工作。输出电路:(1)由于东西和南北方向都要显示时间,因此需要4个数码管,这样在设计中就需要四条输出线choose4,用来选通指定一个LED七段显示数码管。(2)显示器的每一位都采用LED七段显示数码管进行显示,每一个LED七段显示数码管都要有七条输出线控制,一共使用4个七段数码管,故输出电路使用四个七位输出信号:showtime1,showtime2,showtime3,showtime4。(3)东西和南北方向都有交通灯亮的情况,故输出电路中要有两个状态控制信号state1,state2分别控制东西和南北的灯,每个方向上有4个灯(增加了左、右转弯显示控制功能),所以state1,state2的类型应该是4位数组型的。2软件:(1)在VHDL设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:复位开关信号reset;紧急情况控制信号on_off;外部时钟信号clk。输出信号:LED七段显示数码管的选通信号choose4(3 downto 0);LED七段显示数码管的输出信号showtime1(6 downto 0),showntime2(6 downto 0),showtime3(6 downto 0),showtome4(6 downto 0);交通灯状态控制信号state1(3 downto 0),state2(3 downto 0)。(2)在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。由于紧急情况控制信号是采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面安排一个消抖和同步化电路模块,以保证系统能捕捉到输入脉冲,故需要有防抖动的模块。由于外部时钟信号clk的频率为1MHz,而实际需要的内部计时时钟频率为1Hz,提供给消抖同步电路的频率为50Hz(满足按键)和提供给产生选通信号电路的时钟频率为200Hz(满足视觉暂留效应)。当正常计时开始后,需要进行定时计数操作,由于东西和南北两个方向上的时间显示器是由两个LED七段显示数码管组成的,因此需要产生两个2位的计时信息:2个十位信号,2个个位信号,这个定时计数操作可以由一个定时计数器来完成,又因为交通灯的状态变化是在计时为0的情况下才能进行的,因此需要一个计时电路来产生使能信号,因此定时计数的功能就是用来产生2个2位计时信息和使能信号。另外还需要将时间显示出来,为了节省资源,我采用了循环点亮LED七段显示数码管的方法来显示计时输出。通过信号choose4(3 downto 0)来对4个LED七段显示数码管进行选择。由于不能使用7448自动译码集成电路,故在LED七段显示数码管显示时间时,要把计时结果转换为七段码输出到相应的LED七段显示数码管上,因此还需要一个转换电路。交通灯状态控制也需要一个电路,当有使能信号及无紧急情况下,交通灯状态不发生变化,有紧急情况时,两个方向上均为红灯亮,紧急情况消除后,回到原来状态,无使能信号时,交通灯状态不变。通过上面的分析,不难得知可以把交通灯控制系统划分为6个模块:键输入模块,时钟分频模块,计时模块,选通模块,显示模块,控制模块。各个模块之间的连接关系如下:3、 总体和模块框图:总体框图:发光二极管控制器分频电路分位电路计数器七段数码管译码电路倒计时数字显示ResetdClkd计数值Con1dCond具体模块框图:1.时钟分频模块 系统的动态扫描需要1HZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。分频模块主要为系统提供所需的时钟计时脉冲。该模块将1kHZ的脉冲信号进行分频,产生1S的方波,作为系统时钟计时信号。其实体模块如下: 将END TIME改为5S CLK采用系统的1KHZ的时钟脉冲 2.交通灯控制及计时模块 控制模块根据外部输入信号和计时模块产生的输出信号,产生系统的状态机,控制其他部分协调工作。计时模块用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间。控制及计时模块采用状态机进行设计,可以定义出5种状态,分别为S0:主干道绿灯,支干道红灯且没有车辆行驶;S1:主干道绿灯,支干道红灯或支干道有车辆驶入;S2:主干道黄灯,支干道红灯;S3:主干道红灯,支干道绿灯;S4:主干道红灯,支干道黄灯。利用CASE语句定义状态的转换方式及时间的变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求。其实体模块如下: CAR为支干道车辆检测开关在支干道有车的情况下,模块可以进行减计时CLK1S为1S的时钟脉冲TIME1H、TIME1L、TIME2H、TIME2L分别为主干道时钟高位、主干道时钟低位、支干道时钟高位、支干道时钟低位LED为LED灯发光情况,分别为主干道绿灯、主干道黄灯、主干道红灯、支干道绿灯、主干道黄灯、主干道红灯Count的总的系统时间,用来改变系统的状态3.扫描显示译码模块扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。其实体模块如下: CLK为1KHZ的系统时钟脉冲CLK1S为1S时钟脉冲CAR为支干道车辆检测开关SEL为数码管位码扫描SEG为数码管段码TIME1H、TIME1L、TIME2H、TIME2L为数码管计时的时间,由控制及计时模块为其赋值4.顶层文件的编写将以上各个单元模块仿真成功后,再进行顶层文件的编写。将各个单元模块的变量赋值给顶层文件,从而将各个单元模块连接起来,统一调配。得到顶层文件的实体模块: CLK为1KHZ系统时钟脉冲CAR为支干道车辆行驶情况,高电平为有车行驶,低电平为无车行驶LED为交通灯发光情况SEL为数码管位码扫描SEG为数码管段码4、 功能模块设计:各模块的原理及其程序1 分频模块设计a. 实体:entity clk_10 isport( clk : in std_logic; clk_div10 : out std_logic); end clk_10;b. 功能:实现十分频c. 接口:clk脉冲输入 clk-div10十分频后脉冲输出2 计数模块设计a. 实体:entity counter is port( clk0:in std_logic; con:in std_logic; reset:in std_logic; countnum:buffer integer range 0 to 89); end counter;b. 功能:实现0到89的计数 clk0脉冲输入 con手动控制信号 reset复位信号 countnum计数输出3 控制模块设计a. 实体:entity controller isport ( clk1 : in std_logic; con1 : in std_logic; con2 : in std_logic; countnum : in integer range 0 to 89; numa,numb : out integer range 0 to 25; ra,ga,ya,ga1 : out std_logic; rb,gb,yb,gb1: out std_logic); end controller;b. 功能:控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。 clk1脉冲信号输入 con1手动控制信号 con2状态控制信号 countnum计数输入 numa,numb两个方向的倒计时数值输出 ra,ga,ya,ga1,rb,gb,yb,gb1发光二极管输出4 分位模块设计a. 实体:entity fenwei is port (numin:in integer range 0 to 25; numa,numb:out integer range 0 to 9 ); end fenwei;b. 功能:把倒计时的数值分成2个1位的十进制数。 numin:倒计时数值输入 numa,numb将数值分为2个1位的十进制输出5 译码模块设计a. 实体:entity display is port(clk2:in std_logic; bb: in std_logic_vector(3 downto 0); ya:out std_logic; yb:out std_logic; yc:out std_logic; yd:out std_logic; ye:out std_logic; yf:out std_logic; yg:out std_logic); end display;b. 功能:根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管。 bb3.0-BCD码输入 clk2脉冲输入 ya,yb,yc,yd,ye,yf,yg七段数码管显示输出6 顶层模块的设计a. 实体:entity dingceng isport(clkd,resetd,cond,con1d:in std_logic;count1:out std_logic_vector(6 downto 0);count2:out std_logic_vector(6 downto 0);count3:out std_logic_vector(6 downto 0);count4:out std_logic_vector(6 downto 0);reda,greena,yellowa,greena1: out std_logic;redb,greenb,yellowb,greenb1: out std_logic); end entity dingceng;b. 功能:clkd脉冲输入 resetd复位信号 con手动控制信号 con1d状态控制信号 count1,count2,count3,count4七段数码管显示 reda,greena,yellowa,greena1,redb,greenb,yellowb,greenb1发光二极管输出5、 程序代码设计与分析:程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dingceng isport(clkd,resetd,cond,con1d:in std_logic;count1:out std_logic_vector(6 downto 0);count2:out std_logic_vector(6 downto 0);count3:out std_logic_vector(6 downto 0);count4:out std_logic_vector(6 downto 0);reda,greena,yellowa,greena1: out std_logic;redb,greenb,yellowb,greenb1: out std_logic);end entity dingceng;architecture one of dingceng iscomponent clk_10port(clk:in std_logic; clk_div10 : out std_logic);end component;component counterport (clk0:in std_logic; con:in std_logic; reset:in std_logic; countnum:buffer integer range 0 to 89);end component;component controllerport ( clk1 : in std_logic; con1 : in std_logic;con2: in std_logic; countnum : in integer range 0 to 89; numa,numb : out integer range 0 to 25; ra,ga,ya,ga1: out std_logic; rb,gb,yb,gb1 : out std_logic);end component;component fenwei port ( numin:in integer range 0 to 25; numa,numb:out integer range 0 to 9 );end component;component yimaport(clk2:in std_logic; bb: in integer range 0 to 9; ya:out std_logic; yb:out std_logic; yc:out std_logic; yd:out std_logic; ye:out std_logic; yf:out std_logic; yg:out std_logic);end component;signal a,b,c:std_logic;signal ww:integer range 0 to 89;signal yy1,yy2:integer range 0 to 25;signal tt1,tt2,tt3,tt4:integer range 0 to 9;beginu0: clk_10 port map(clk=clkd,clk_div10=a);u1: clk_10 port map(clk=clkd,clk_div10=b);u2: clk_10 port map(clk=b,clk_div10=c);u3:counter port map(clk0=c,con=cond,reset=resetd,countnum=ww);u4:controller port map (clk1=c,con1=cond,con2=con1d,countnum=ww,numa=yy1,numb=yy2,ra=reda,ga=greena,ya=yellowa,ga1=greena1,rb=redb,gb=greenb,yb=yellowb,gb1=greenb1);u5:fenwei port map(numin=yy1,numa=tt1,numb=tt2);u6:fenwei port map (numin=yy2,numa=tt3,numb=tt4);u7:yimaport map(clk2=b,bb=tt1,ya=count1(0),yb=count1(1),yc=count1(2),yd=count1(3),ye=count1(4),yf=count1(5),yg=count1(6);u8:yima port map (clk2=b,bb=tt2,ya=count2(0),yb=count2(1),yc=count2(2),yd=count2(3),ye=count2(4),yf=count2(5),yg=count2(6);u9:yima port map(clk2=b,bb=tt3,ya=count3(0),yb=count3(1),yc=count3(2),yd=count3(3),ye=count3(4),yf=count3(5),yg=count3(6);u10:yima port map(clk2=b,bb=tt4,ya=count4(0),yb=count4(1),yc=count4(2),yd=count4(3),ye=count4(4),yf=count4(5),yg=count4(6);end architecture one;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_10 isport( clk : in std_logic; clk_div10 : out std_logic);end clk_10;architecture one of clk_10 issignal clk_temp : std_logic;beginprocess(clk)variable counter : std_logic_vector(2 downto 0);constant md : std_logic_vector(2 downto 0) := 101;beginif(clkevent and clk=1) thenif(counter = md)thencounter := (others =0);clk_temp = not clk_temp;end if;counter := counter + 1 ;end if; end process;clk_div10 = clk_temp;end one;library ieee;use ieee.std_logic_1164.all;entity counter is port ( clk0:in std_logic; con:in std_logic; reset:in std_logic; countnum:buffer integer range 0 to 89);end counter;architecture one of counter is begin process (reset,clk0) begin if reset=1 then countnum = 0; elsif rising_edge( clk0 ) then if con=1 then countnum = 0; else if countnum=89 then countnum = 0; else countnum = 65then numb=90-countnum; numa = 70 then aa := 00011000; else aa := 00101000; numa= 45 then numb = 65-countnum;numa = 50 then aa := 10000100; else aa := 10000010; numb= 20 then numa = 45-countnum;numb = 25 then aa := 01001000; else aa := 00101000; numa = 0 then numa = 20-countnum;numb = 5 then aa := 10000100; else aa := 10000010; numb = 5-countnum; end if;end if;elseif con1= 1 then numa = 0;numb = 0; if con2 = 1 thenif m = 7 then m = 0;elsem = m + 1;end if;end if;if m = 0 then aa := 01001000;elsif m= 1 then aa := 00101000; elsif m=2 then aa :=10000100; elsif m=3 then aa := 10000010; elsif m=4 then aa := 00011000; elsif m=5 then aa := 00
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水表物业购买协议书
- 没正式签订合同协议
- 江苏电车购车协议书
- 沙棘产业合作协议书
- 法人连带担保合同范本
- 洗浴中心转包协议书
- 消杀防治采购合同范本
- 社区护理学题库专科题及答案解析
- 淘宝信用贷款合同协议
- 玉米模具购买合同协议
- 亚投行贷款项目管理办法
- 全国大学生职业规划大赛《电子信息工程》专业生涯发展展示
- 学校意识形态领域风险防控机制意识形态领域风险
- 严重精神障碍患者家庭护理-培训课件
- 承插型盘扣式钢管脚手架体设备设施风险分级管控清单
- 脑出血患者营养治疗讲课件
- 十五五学校发展规划中期自评报告
- 成都高新辅警心理测试题及答案
- DLT5210.1-2021电力建设施工质量验收规程第1部分-土建工程
- 律师执业行为规范的重要性与心得体会
- DB22-T3572-2023-间歇管饲操作及护理规范-吉林省
评论
0/150
提交评论