交通灯控制器的设计
基于单片机的智能交通灯控制器设计

基于单片机的智能交通灯控制器设计一、本文概述随着城市化进程的加快,交通拥堵问题日益严重,智能交通系统的应用与发展成为解决这一问题的关键。
其中,智能交通灯控制器作为交通系统的重要组成部分,对于提高道路通行效率、保障行车安全具有重要意义。
本文旨在设计一种基于单片机的智能交通灯控制器,通过优化算法和硬件设计,实现交通灯的智能控制,以适应不同交通场景的需求,提升城市交通的整体运行效率。
本文将首先介绍智能交通灯控制器的研究背景和意义,阐述现有交通灯控制系统的不足和改进的必要性。
接着,文章将详细介绍基于单片机的智能交通灯控制器的设计方案,包括硬件电路的设计、控制算法的选择与优化等方面。
在此基础上,本文将探讨如何通过软件编程实现交通灯的智能控制,并讨论如何在实际应用中调试和优化系统性能。
文章将总结研究成果,展望智能交通灯控制器在未来的发展方向和应用前景。
通过本文的研究,旨在为城市交通管理提供一种新的智能化解决方案,为缓解交通拥堵、提高道路通行效率提供有力支持。
本文的研究也有助于推动单片机技术和智能交通系统的发展,为相关领域的研究和实践提供有益的参考和借鉴。
二、单片机技术概述单片机,即单片微型计算机(Single-Chip Microcomputer),是一种集成电路芯片,它采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O 口和中断系统、定时器/计时器等功能集成到一块硅片上,构成一个小而完善的微型计算机系统。
单片机以其体积小、功能强、成本低、可靠性高、应用广泛等特点,广泛应用于工业控制、智能仪表、家用电器、医疗设备、航空航天、军事装备等领域。
单片机作为智能交通灯控制器的核心部件,具有不可替代的重要作用。
它负责接收来自传感器的交通信号输入,根据预设的交通规则和算法,快速作出判断,并输出相应的控制信号,以驱动交通信号灯的亮灭和变化,从而实现交通流量的有序控制和疏导。
智能交通灯控制系统的设计与实现

智能交通灯控制系统的设计与实现随着城市化进程的加速,城市道路交通越来越拥堵,交通管理成为城市发展的一个重要组成部分。
传统的交通信号灯只具备固定时序控制交通流量的功能,但随着技术的进步和智能化应用的出现,要求交通信号灯具备实时性、自适应性和智能化,因此,智能交通信号灯控制系统应运而生。
本文将从软硬件系统方面,详细介绍智能交通灯控制系统的设计与实现。
一、硬件设计智能交通灯控制系统的硬件部分由四个部分组成:单片机系统、交通灯控制器、传感器及联网模块。
1. 单片机系统单片机是智能交通灯控制系统的核心,该系统选用了8位单片机,主要实现红绿灯状态的自适应和切换。
在设计时,需要根据具体情况选择型号和板子,选择时需要考虑其开发环境、风险和稳定性等因素。
2. 交通灯控制器交通灯控制器是智能交通灯控制系统中的另一个重要部分,主要实现交通信号的灯光控制。
在控制器的设计时,需要考虑网络连接、通信、数据传输等多方面因素,确保系统的稳定性和可靠性。
3. 传感器传感器主要负责采集道路交通信息,包括车辆数量、速度、方向和道路状态等,从而让智能交通灯控制系统更好地运作。
传感器有多种类型,包括磁感应传感器、摄像头、光电传感器等,需要根据实际需求选择。
4. 联网模块联网模块主要负责智能交通灯控制系统的联网和数据传输,包括存储和处理车流数据、上传和下载数据等。
在设计时,需要考虑网络连接的稳定性、数据安全等因素,确保智能交通灯控制系统的连续性和可靠性。
二、软件设计智能交通灯控制系统的软件部分主要由两部分组成:嵌入式系统和上位机系统。
1. 嵌入式系统嵌入式系统是智能交通灯控制系统的主体,主要设计车流量检测、信号灯状态切换等程序。
为了保证系统的自适应性和实时性,需要采用实时操作系统,如FreeRTOS等。
在软件设计阶段,需要注意设计合理的算法和模型,确保系统的准确性和稳定性。
2. 上位机系统上位机系统主要实现智能交通灯控制系统的监控和管理,包括车流量监控、灯光状态监控、信号灯切换和日志记录等。
(完整word版)数电——交通灯控制器设计

(完整word版)数电——交通灯控制器设计大连交通大学电气信息学院综合设计报告设计名称:数字逻辑综合设计设计题目:交通灯控制器学生学号:专业班级:学生姓名:第一章课题背景1。
1 背景如今随着人们生活水平的提高,车辆越来越多,交通事故频繁发生。
交通信号灯的出现,使交通得以有效管制,对于疏通交通流量,提高道路通行能力,减少交通事故有明显效果。
交通灯在城市交通中起着重要的作用,它与人们日常生活密切相关,是人们出行的安全保障。
因此提供一个问题、安全、便捷的多功能交通灯控制系统有着现实的必要性.为了解决这些问题,我们更应该提高交通控制和管理水平,合理使用现有交通设施,充分发挥其能力,提高交通效率,促进和谐交通的建立.目前交通灯控制系统的设计软件也种类繁多,有基于EDA设计的,基于单片机设计的,基于DSP设计的,基于ARM嵌入式的等。
还有用标准逻辑器件、可编程控制器PLC等方案来实现.但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及调试的困难。
所以现在国内外广泛采用EDA技术设计交通灯控制系统。
在国外,英国,澳大利亚,日本和美国等国家均在交通控制系统上日益完善。
如以澳大利亚悉尼为背景开发的交通自适应协调系统SCATS(Sydney Coordinated Adaptive Traffic System),英国的运输和道路研究所(TRRL)研制的SCOOT(Split Cycle Offset Optimization Technique)系统,日本的京三(Kyosan)系统等。
这些系统,大都是在各路口附近安装磁性环路监控器,由各路口的控制设备、人员将交通控制参数通过通讯网络输入微处理器,用小型计算机进行集中处理。
目前国内已有一些自主开发的城市交通控制系统,如公安部交通科学研究所开发的HT-UTCS系统,但它在整体性能上比国外同类系统仍有较大差距,只在一些中小城市得到一些应用。
基于VHDL的交通灯控制器设计

生物医学工程王春雨基于VHDL的交通灯控制器设计应用VHDL语言设计数字系统,大部分设计工作可在计算机上完成,从而缩短系统开发时间,提高工作效率。
下面介绍基于VHDL设计交通灯控制器的一种方案,并给出源程序和仿真结果。
1 系统功能与要求实现交通繁忙的主路和偶有车行的小路交会路口的交通管理。
要求:1、交通灯控制器控制主干道和小路交叉路口的交通。
2、小路口来车,主线路口绿灯切换到黄灯5秒钟后变为红灯。
3、红灯燃亮20秒后,自动切换为绿灯。
4、指示左转弯的绿灯亮12 s,绿灯变至红灯时,黄灯亮3 s。
5、主路的交通管制重新切换到绿灯后5分钟内不理睬小路上的车况,即使又有车辆驶入小路路口。
上述主路上的灯光显示,小路口的灯信号与之逻辑配合。
2 程序设计根据交通灯控制器的功能与要求,将其总体电路分为分频器、信号控制器两个模块。
外部脉冲振荡器的频率选为32768 kHz,经分频器分频得1 Hz的信号,1 Hz信号用做信号控制器的计数脉冲,用VHDL设计组成交通灯控制器的分频器、信号控制器两个模块,在M AX+plus Ⅱ平台上,编译VHDL程序,然后用原理图输入法形成总体框图。
实验程序:Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All;Entity Frequency10Hz IsPort(Clk20M: In Std_Logic;Clk10Hz:Out Std_Logic);End;Architecture Count Of Frequency10Hz Is Signal Tout:Integer Range 0 to ;Signal Clk:Std_Logic;BeginProcess(Clk20M)BeginIf rising_edge(Clk20M) thenIf Tout= thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk10Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.STd_Logic_Unsigned.All; Entity Frequency IsPort(Clk10Hz: In Std_Logic;Clk1Hz:Out Std_Logic);End;Architecture Count Of Frequency Is Signal Tout:Integer Range 0 to 4;Signal Clk:Std_Logic;BeginProcess(Clk10Hz)BeginIf rising_edge(Clk10Hz) thenIf Tout=4 thenTout<=0;Clk<=Not Clk;Else Tout<=Tout+1;End If;End If;End Process;Clk1Hz<=Clk;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Controller IsPort(Clock:In Std_Logic;Hold:In Std_Logic;CountNum:IN Integer RANgE 0 TO 49;Flash:Out Std_Logic;NumA,NumB:Out Integer Range 0 To 25;RedA,GreenA,YellowA:Out Std_Logic;RedB,GreenB,YellowB:Out Std_Logic);End;ARCHITECTURE Behavior OF Controller IS BEGINPROCESS(CLOCK)BeginIf falling_edge(Clock) thenIf Hold='1' thenRedA<='1';RedB<='1';GreenA<='0';GreenB<='0';YellowA<='0';YellowB<='0';Flash<='1';ElseFlash<='0';If CountNum<=19 thenNumA<=20-CountNum;RedA<='0';GreenA<='1';YellowA<='0';Elsif (CountNum<=24) thenNumA<=25-CountNum;RedA<='0';GreenA<='0';YellowA<='1';ElseNumA<=50-CountNum;RedA<='1';GreenA<='0';YellowA<='0';End If;If CountNum<=24 thenNumB<=25-CountNum;RedB<='1';GreenB<='0';YellowB<='0';Elsif CountNum<=44 thenNumB<=45-CountNum;RedB<='0';GreenB<='1';YellowB<='0';ElseNumB<=50-CountNum;RedB<='0';GreenB<='0';YellowB<='1';End If;End If;End If;End Process;End;LIBRARY IEEE;USE IEEE.Std_logic_1164.all;Use IEEE.Std_Logic_Unsigned.All; ENTITY Counter ISPORT(Clock:IN Std_logic;Reset:IN Std_logic;Hold:IN Std_logic;CountNum:BUFFER Integer RANGE 0 TO 49 );END;ARCHITECTURE Behavior OF Counter IS BEGINPROCESS(Reset,Clock)BEGINIF Reset='1'THENCountNum<=0;ELSIF rising_edge(Clock) THENIF Hold='1'THENCountNum<=CountNum;ELSEIF CountNum=49 THENCountNum<=0;ELSECountNum<=CountNum+1;END IF;END IF;END IF;END PROCESS;END Behavior;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All;Entity Display IsPort( Clock:In Std_Logic;Flash:In Std_Logic;Qin:In Std_Logic_Vector(3 Downto 0); Display:Out Std_Logic_Vector(0 to 6)); End;Architecture Light Of Display IsSignal Timeout:Integer Range 0 To 11;BeginProcess(Clock)BeginIf rising_edge(Clock) thenIf (Flash='0') thenTimeout<=0;ElseIf (Timeout=11) thenTimeout<=0;ElseTimeout<=Timeout+1;End If;End If;If (Timeout<=6) thenCase Qin IsWhen "0000"=>Display<="";When "0001"=>Display<="";When "0010"=>Display<="";When "0011"=>Display<="";When "0100"=>Display<="";When "0101"=>Display<="";When "0110"=>Display<="";When "0111"=>Display<="";When "1000"=>Display<="";When "1001"=>Display<="";When Others=>Display<="";End Case;ElseDisplay<="";End If;End If;End Process;End;Library IEEE;Use IEEE.Std_Logic_1164.All;Use IEEE.Std_Logic_Unsigned.All; Entity Fenwei IsPort(Numin:In Integer Range 0 To 25;NumA,NumB:Out Integer Range 0 To 9 );End;Architecture Fen Of Fenwei IsBeginProcess(Numin)BeginIf Numin>=20 thenNumA<=2;NumB<=Numin-20;Elsif Numin>=10 thenNumA<=1;NumB<=Numin-10;ElseNumA<=0;NumB<=Numin;End If;End Process;End;顶层框图:3.仿真结果。
EDA实验课程大作业报告:设计制作一个用于十字路口的交通灯控制器

交通灯控制器设计一.系统功能设计要求设计制作一个用于十字路口的交通灯控制器,要求如下:(1)南北和东西方向各有一组红、绿、黄灯来指挥交通,持续时间分别为25S,20S,和5S。
(2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止。
(3)当特殊情况结束后,控制器恢复原来状态,继续正常运行。
(4)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。
二.设计原理1.交通灯控制器的状态转换根据题目要求将将红绿灯的状态转换列成如下表:2.设计方案1)由于交通灯需要使用2位7段LED数码管指示通行剩余时间,故采用LED动态扫描方式显示当前时间。
频率设定CLK1k对应的频率为50MHZ。
2)控制模块是交通灯的核心,主要控制交通灯按工作顺序自动变换,同时控制倒计时模块工作,每当倒计时回零时,控制模块接收到一个计时信号,从而控制交通灯进入下一个工作状态。
3)每个方向有一组2位倒计时器模块,用以显示该方向交通灯剩余的点亮时间。
4)显示模块由两部分组成,一是由七段数码管组成的倒计时显示器,每个方向两个七段数码管;二是由发光二极管代替的交通灯,每个方向3个发光二极管。
三.变量符号说明其中,CLK1K为系统时钟信号输入端,SN为禁止通行信号输入通行信号输入端,light0为东西红灯信号输出端,light1为东西黄灯信号输出端,light2为东西绿灯信号输出端,light3为南北红灯信号输出端,light4为南北黄灯信号输出端,light5为南北绿灯信号输出端,led1、led2、led3、led4为数码管地址选择信号输出端。
四.代码说明library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Hongld ISport (clk1k,SN:in std_logic; --SN紧急情况led1, led2, led3, led4 :out std_logic_vector (6 downto 0);--显示管显示时间用light:out std_logic_vector (5 downto 0)); --红绿黄灯end Hongld;architecture traffic1 of Hongld ISsignal S:std_logic_vector (1 downto 0); --状态signal DXT:std_logic_vector(7 downto 0):=X"01"; --东西方向时间signal NBX:std_logic_vector(7 downto 0):=X"01"; --南北方向时间signal ART,AGT,AYT,BRT,BGT,BYT: std_logic_vector(7 downto 0); --红绿黄灯信号signal temp: integer range 0 to 49999999; --产生1s计数器时计数signal clk: std_logic;beginART<="00100101";AGT<="00100000";AYT<="00000100";BRT<="00100101";BGT<="00100000";BYT<="00000100";process(clk1k) -- 选频率为50MHZ beginif (clk1k'event and clk1k='1') thenif temp=49999999 thentemp<=0;clk<='1';elsetemp<=temp+1;clk<='0';end if;end if;end process;process(clk,DXT,NBX) --状态转换进程beginif clk'event and clk ='1' thenif(DXT ="00000001")OR (NBX = "00000001") then S<=S+1;else S<=S;end if; --状态转换结束end if;end process;process (clk,SN,S) --倒计时模块beginif SN = '1' then DXT<=DXT; NBX<=NBX;elseif clk'event and clk='1' thenif (DXT="0000000") OR (NBX="00000000") thencase S ISwhen "00"=>DXT<=ART; NBX<=BGT; --南北红灯、东西绿灯when "01"=>NBX<=BYT; --南北红灯、东西黄灯when "10"=>DXT<=AGT; NBX<=BRT; --南北绿灯、东西红灯when "11"=>DXT<=AYT; --南北黄灯、东西红灯when others=>NULL;end case;end if;if DXT/="00000000" thenif DXT(3 downto 0)= "0000" thenDXT(3 downto 0)<="1001";DXT(7 downto 4)<=DXT(7 downto 4)-1;else DXT(3 downto 0)<=DXT(3 downto 0)-1;DXT(7 downto 4)<=DXT(7 downto 4);end if;end if;if NBX/="00000000" thenif NBX(3 downto 0)="0000" thenNBX(3 downto 0)<="1001";NBX(7 downto 4)<=NBX(7 downto 4)-1;else NBX(3 downto 0)<=NBX(3 downto 0)-1;NBX(7 downto 4)<=NBX(7 downto 4);end if;end if;end if;end if;end process; --倒计时模块结束process(DXT,NBX,S,SN) --显示模块begincase NBX(3 downto 0) iswhen "0000"=>led1<="1000000";when "0010"=>led1<="0100100"; when "0011"=>led1<="0110000"; when "0100"=>led1<="0011001"; when "0101"=>led1<="0010010"; when "0110"=>led1<="0000010"; when "0111"=>led1<="1111000"; when "1000"=>led1<="0000000"; when "1001"=>led1<="0010000"; when others=>led1<="1111111"; end case;case NBX(7 downto 4) iswhen "0000"=>led2<="1000000"; when "0001"=>led2<="1111001"; when "0010"=>led2<="0100100"; when "0011"=>led2<="0110000"; when "0100"=>led2<="0011001"; when "0101"=>led2<="0010010"; when "0110"=>led2<="0000010"; when "0111"=>led2<="1111000"; when "1000"=>led2<="0000000"; when "1001"=>led2<="0010000"; when others=>led2<="1111111"; end case;case DXT(3 downto 0) iswhen "0000"=>led3<="1000000"; when "0001"=>led3<="1111001"; when "0010"=>led3<="0100100"; when "0011"=>led3<="0110000"; when "0100"=>led3<="0011001"; when "0101"=>led3<="0010010"; when "0110"=>led3<="0000010"; when "0111"=>led3<="1111000"; when "1000"=>led3<="0000000"; when "1001"=>led3<="0010000"; when others=>led3<="1111111"; end case;case DXT(7 downto 4) iswhen "0000"=>led4<="1000000"; when "0001"=>led4<="1111001"; when "0010"=>led4<="0100100";when "0100"=>led4<="0011001";when "0101"=>led4<="0010010";when "0110"=>led4<="0000010";when "0111"=>led4<="1111000";when "1000"=>led4<="0000000";when "1001"=>led4<="0010000";when others=>led4<="1111111";end case;if SN ='1' then light<="001001";elsecase S ISwhen "00"=>light<="010001";when "01"=> light <="100001";when "10"=> light <="001010";when "11"=> light <="001100";when others=>NULL;end case;end if;end process;end traffic1;五.仿真波形图仿真时序波形图。
eda交通灯控制器课程设计

eda交通灯控制器课程设计课程设计:EDA交通灯控制器1. 课程背景和目标:EDA交通灯控制器是使用EDA(电子设计自动化)工具进行交通灯控制系统设计的课程。
学习该课程的目标是使学生能够熟练运用EDA工具进行交通灯控制系统设计,并能够理解交通灯控制系统的原理和设计方法。
2. 课程内容和安排:(1) 交通灯控制系统原理介绍:介绍交通灯控制系统的基本原理,包括信号机、信号控制方法和交通流量检测等。
(2) EDA工具介绍:介绍常用的EDA工具,如Verilog、VHDL等,并讲解其基本使用方法。
(3) 交通灯控制器设计流程:介绍交通灯控制器的设计流程,包括需求分析、功能设计、模块设计和系统集成等。
(4) 交通灯控制器设计实践:学生通过实践项目,使用EDA工具设计交通灯控制器。
项目涵盖设计、仿真、验证和生成等环节,学生需要独立完成设计并提交设计报告。
3. 课程教学方法:(1) 理论讲解:通过课堂讲解,介绍交通灯控制系统的原理和设计方法,以及EDA工具的使用方法。
(2) 实践项目:学生通过实践项目,运用所学知识设计交通灯控制器,并进行仿真、验证和生成等环节。
(3) 讨论和案例分析:通过课堂讨论和案例分析,加深学生对交通灯控制系统的理解和应用能力。
(4) 指导和批评:教师对学生的设计进行指导和批评,帮助学生不断提高设计能力。
4. 评估方式:(1) 实践项目报告:学生独立完成实践项目,并提交设计报告,包括设计过程、仿真结果和验证结果等。
(2) 课堂测试:通过课堂测试检验学生对交通灯控制系统原理和EDA工具的理解程度。
(3) 课堂表现:评估学生的课堂出勤情况、学习态度和参与度等。
5. 参考教材:(1) 《交通信号控制原理与技术》高新泽(2) 《EDA与数字电路设计》陈骏等(3) 《数字电路与系统设计》刘敏衡等(4) 《系统设计自动化技术与EDA工具应用》杨学庆等以上是对EDA交通灯控制器课程设计的简要介绍。
课程内容涵盖了交通灯控制系统的原理和设计方法,以及EDA工具的使用方法。
交通灯控制器设计原理

交通灯控制器设计原理
交通灯控制器设计的核心原理主要包含定时器和译码器的工作方式。
定时器由不系统秒脉冲(由时钟脉冲产生器提供)同步的计数器构成。
计数器在状态信号ST作用下首先清零,然后在时钟脉冲上升沿作用下,计数器从零开
始进行增1计数,向控制器提供模5的定时信号TY和模25的定时信号TL。
译码器则输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作。
控制器是系统的主要部分,由它控制定时器和译码器的工作。
此外,还需要考虑到实际应用中的一些细节,例如信号灯的闪烁频率、颜色和持续时间等,以确保交通灯控制器能够有效地控制交通流量,提高交通效率并保障交通安全。
以上内容仅供参考,如需更多信息,建议查阅相关文献或咨询交通工程专家。
交通灯信号控制器的设计

1 设计任务描述1.1设计题目:交通灯信号控制器的设计1.2 设计要求1.2.1 设计目的熟练使用Keil开发环境,具备编写单片机程序(汇编语言或C语言)的初步能力,通过完成本课题的软硬件设计,使同学们了解单片机实例的整个开发流程。
1.2.2 基本要求用单片机设计出一个交通信号灯控制器。
此交通信号灯控制器完成控制红黄绿三种颜色灯的点亮和熄灭。
设计一个交通信号灯控制器,该交通信号灯控制器基本功能:设A道为东西道,B道为南北道,A道放行时间10s,B道放行时间为15s,绿灯放行,红灯停止,放行的最后三秒绿灯闪烁,绿灯转红灯时黄灯亮3s。
同时该交通信号灯控制器附加功能:当一道一直有车另一道无车时,交通控制系统能立即让有车的车道放行,当有紧急车辆(如110,120,119等急救车)要求通过时,此系统应能禁止普通车辆通行,路口的信号灯全部变红,以便让紧急车辆通过,紧急车辆通过后,交通灯恢复先前状态。
1.2.3 发挥部分当有紧急车辆(如110,120,119等急救车)要求通过时,此系统应能禁止普通车辆通行,路口的信号灯全部变红,同时报警声音响起,紧急车辆通过后,交通灯恢复先前状态。
2 设计思路本系统拟采用AT89C51单片机作为交通灯系统的控制核心。
在十字路口东西方向通行时,南北方向红灯显示13秒,同时东西向绿灯显示10秒,当南北方向红灯倒计时显示为3秒时,东西方向黄灯显示3秒并闪烁;南北方向绿灯显示15秒,东西方向红灯显示18秒,当南北方向红灯倒计时显示为3秒时,东西方向黄灯显示3秒并闪烁,如此循环。
当发生紧急情况时,两路红灯亮,紧急结束时继续显示上一个状态。
从设计所要完成的任务和要求来看,单一路口显示倒计时时间的数码管必须用两位,对于七段数码管,倒计时显示装置中的数码管在本系统中采用的是动态显示;设置了4个按键来处理交通灯在实际应用中可能出现的特殊情况,P3.1接K1键,P3.2接K2键,P3.3接K3键,P3.4接K4键;十字路口共需4组红绿灯,本设计中为简化,只设置2组红绿灯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA实验报告一、课程设计题目及要求题目: 十字路口交通灯具体要求:设计一个十字路口得交通灯控制器,能显示十字路口东西、南北两个方向红、黄、绿灯得指示状态。
用两组红、黄、绿三种颜色得灯分别作为东西、南北两个方向红、黄、绿等。
变化规律为:东西绿灯亮,南北红灯亮——东西黄灯亮,南北红灯亮——东西红灯亮,南北绿灯亮——东西红灯亮,南北黄灯亮——东西绿灯亮,南北红灯亮······,这样循环下去。
南北方向每次通行时间为45秒,东西方向每次通行时间为45秒,要求两条交叉道路上得车辆交替运行,时间可设置修改。
绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。
并要求所有交通灯得状态变化在时钟脉冲上升沿处。
二、实验编程环境QuartusII 8、0三、课程设计得详细设计方案(一)、总体设计方案得描述1、1、根据交通灯系统设计要求,可以用一个有限状态机来实现这个交通灯控制器。
首先根据功能要求,明确两组交通灯得状态,这两组交通灯总共共有四种状态,我们用ST0,ST1,ST2,ST3 来表示:St0表示东西路绿灯亮,南北路红灯亮;St1表示东西路黄灯亮,南北路红灯亮;St2表示东西路红灯亮,南北路绿灯亮;St3表示东西路红灯亮,南北路黄灯亮;1、2、根据上述四种状态描述列出得状态转换表1、3、根据状态转换表得到交通灯控制器得状态转移图如图所示。
交通灯控制器得状态转移图(二)各个模块设计2、1、控制器模块控制器模块示意图其中,clk 为时钟信号,时钟上升沿有效。
hold 为紧急制动信号,低电平有效。
ared,agreen,ayellow 分别表示东西方向得红灯,黄灯,绿灯显示信号,高电平有效。
bred,bgreen,byellow 分别表示南北方向得红灯,黄灯,绿灯显示信号,高电平有效。
用于控制红绿黄灯得亮暗情况。
2、2、45秒倒计时计数器模块45秒倒计时计数器模块示意图其中,CLK 为时钟信号,时钟上升沿有效。
EN 为使能端,高电平有效。
CR 为紧急制动信号低电平有效。
QL{3、、0}就是计数低位。
QH{3、、0}就是计数高位。
用于45秒得倒计时计数。
2、3、7位译码器模块7位译码器模块示意图其中dat{3、、0}为要译码得信号。
a,b,c,d,e,f,g 为译码后得信号。
用于将45秒倒计时计数得信号译码成数码管可以识别得信号。
2、4、50MHZ 分频器模块50MHZ 分频器模块示意图其中clk 为50MHZ 时钟信号,时钟上升沿有效。
输出clk_out 为1HZ 时钟信号,时钟上升CLK ENCR QL[3、、0]QH[3、、0] OC m45 inst2沿有效。
用于将50MHZ得时钟信号转变成1HZ得时钟信号。
(三)结构图设计(四)仿真电路时序仿真图从图中可瞧到首先进入st0状态,此时东西路绿灯亮,南北路红灯亮;计数器计数到40秒时,交通灯控制器进入st1状态,此时东西路黄灯亮,南北路红灯亮;在st1状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st2,此时东西路红灯亮,南北路绿灯亮;在st2状态计数器又开始计数,计数器计数到40秒后,交通灯控制器状进入st3状态,此时东西路红灯亮,南北路绿灯亮;在st3状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st0状态,此时东西路绿灯亮,南北路红灯亮,如些循环反复,完成十字交通路口得红绿灯控制。
A0-G0,A1-G1分别为45到0得译码。
(五)分配引脚为了对此工程进行硬件测试,应将编译成功后得程序下载到目标芯片上,并指定输入输出信号得管脚,以便添加激励信号与测试输出信号。
在下载编译成功得文件之前,需要制定器件得管脚,选择Assignments|Pins命令,在随后出现得下拉列表框中选择对应端口信号名得器件引脚号,如下图:四、设计总结与心得通过此次EDA设计,我系统性得学习了课本上相关得知识,对课堂上得知识更加了解。
通过认真研究课本,使我对EDA程序设计有了一定思路;通过实验课得学习,在程序得设计,程序得调试方面都学到了很多东西,在这几天时间里,实验室得氛围对我们得影响很大,大家一起努力,这也就是我们能完成课设得动力。
其中在编程中也出现了很多得问题,但通过老师与同学得帮助下,把问题一一解决。
其实只要我们自己认真瞧书,仔细分析,仔细调试,就一定会发下错误,在以后得学习中,要理论联系实际,把我们所学得理论知识用到实际当中,学习EDA更就是如此,程序只有经常得写与读得过程中才能提高,这就就是我在这次课程设计中得最大收获。
五、源代码控制器模块:library ieee;use ieee、std_logic_1164、all;use ieee、std_logic_unsigned、all;entity control isport(clk,hold:in std_logic;ared,agreen,ayellow,bred,bgreen,byellow:out std_logic);end control;architecture behavior of control istype state_type is (s0,s1,s2,s3,s4);signal current_state,next_state : state_type;signal counter : std_logic_vector(6 downto 0);beginsynch : processbeginwait until clk'event and clk ='1';if hold='0' thencounter<=counter;elseif counter<89 thencounter<=counter+1;elsecounter<=(others=>'0');end if;end if;end process;processbeginwait until clk'event and clk='1';current_state<=next_state;end process;state_trans:process(current_state) begincase current_state iswhen s0=>if hold='0' thennext_state<=s4;elseif counter<39 thennext_state<=s0;elsenext_state<=s1;end if;end if;when s1=>if hold='0' thennext_state<=s4;elseif counter<44 thennext_state<=s1;elsenext_state<=s2;end if;end if;when s2=>if hold='0' thennext_state<=s4;elseif counter<84 thennext_state<=s2;elsenext_state<=s3;end if;end if;when s3=>if hold='0' thennext_state<=s4;elseif counter<89 thennext_state<=s3;elsenext_state<=s0;end if;end if;when s4=>if hold='0' thennext_state<=s4;elseif counter<39 thennext_state<=s0;elsif counter<44 thennext_state<=s1;elsif counter<84 thennext_state<=s2;elsif counter<89 thennext_state<=s3;end if;end if;end case;end process;output:process(current_state) begincase current_state iswhen s0 =>ared<='0';agreen<='1';ayellow<='0';bred<='1';bgreen<='0';byellow<='0';when s1 =>ared<='0';agreen<='0';ayellow<='1';bred<='1';bgreen<='0';byellow<='0';when s2 =>ared<='1';agreen<='0';ayellow<='0';bred<='0';bgreen<='1';byellow<='0';when s3 =>ared<='1';agreen<='0';ayellow<='0';bred<='0';bgreen<='0';byellow<='1';when s4 =>ared<='1';agreen<='0';ayellow<='0';bred<='1';bgreen<='0';byellow<='0';end case;end process;end behavior;45秒倒计时计数器模块:library ieee;use ieee、std_logic_1164、all;use ieee、std_logic_unsigned、all;entity m45 isport(CLK :in std_logic;EN :in std_logic;CR :in std_logic;QL,QH :out std_logic_vector(3 downto 0);OC :out std_logic);end m45;architecture behav of m45 issignal couL,couH:std_logic_vector(3 downto 0); beginprocess(CR,CLK,EN)beginif CR='0' thencouL<="0000";couH<="0000";elsif clk'event and clk='1' thenif EN='1' thenif(couL=0 and couH=0)thencouL<="0100";couH<="0100";elsif couL=0 thencouL<="1001";couH<=couH-1;elsecouL<=couL-1;end if;end if;end if;end process;process(couL,couH)beginif(couL=0 and couH=0) thenOC<='1';elseOC<='0';end if;end process;QL<=couL;QH<=couH;end behav;7位译码器模块:library ieee;use ieee、std_logic_1164、all;entity seg7 isport(dat : in std_logic_vector(3 downto 0);a,b,c,d,e,f,g : out std_logic);end seg7;architecture arc of seg7 issignal tmp :std_logic_vector(6 downto 0); beginprocess(dat)begincase dat iswhen"0000"=>tmp<="0000001";when"0001"=>tmp<="1001111";when"0010"=>tmp<="0010010";when"0011"=>tmp<="0000110";when"0100"=>tmp<="1001100";when"0101"=>tmp<="0100100";when"0110"=>tmp<="0100000";when"0111"=>tmp<="0001111";when"1000"=>tmp<="0000000";when"1001"=>tmp<="0000100";when"1010"=>tmp<="0001000";when"1011"=>tmp<="1100000";when"1100"=>tmp<="0110001";when"1101"=>tmp<="1000010";when"1110"=>tmp<="0110000";when"1111"=>tmp<="0111000";when others=>null;end case;end process;a<=tmp(6);b<=tmp(5);c<=tmp(4);d<=tmp(3);e<=tmp(2);f<=tmp(1);g<=tmp(0);end arc;50MHZ分频器模块:library ieee;use ieee、std_logic_1164、all;use ieee、std_logic_unsigned、all;entity devide isport(clk :in std_logic;clk_out :out std_logic);end devide;architecture arc_devide of devide isbeginprocess(clk)variable count:integer range 0 to 49999999;beginif clk'event and clk='1' thenif(count=49999999)thencount:=0;clk_out<='1';elsecount:=count+1;clk_out<='0';end if;end if;end process;end architecture arc_devide;。