课程设计实验报告 交通灯控制功能设计

合集下载

交通灯控制实验报告

交通灯控制实验报告

交通灯控制实验报告交通灯控制实验报告引言:交通灯是城市交通管理的重要组成部分,通过对交通流量的控制,有效地维护交通秩序和安全。

本次实验旨在通过搭建一个简单的交通灯控制系统,探究不同交通流量下的信号灯变化规律,并分析其对交通流畅度和效率的影响。

实验装置:实验装置由红、黄、绿三种颜色的LED灯组成,分别代表红灯、黄灯和绿灯。

通过按键控制,可以切换不同灯光的显示状态。

在实验过程中,我们将模拟不同交通流量情况下的信号灯变化。

实验过程:1. 低交通流量情况下:首先,我们模拟低交通流量情况。

设置红灯时间为20秒,绿灯时间为30秒,黄灯时间为5秒。

在这种情况下,红灯的时间较长,确保道路上的车辆能够安全通过。

绿灯时间相对较短,以充分利用交通资源,提高交通效率。

黄灯时间较短,用于过渡信号灯变化。

2. 中等交通流量情况下:接下来,我们模拟中等交通流量情况。

设置红灯时间为30秒,绿灯时间为40秒,黄灯时间为5秒。

在这种情况下,红灯时间相对较长,确保道路上的车辆能够顺利通过。

绿灯时间适中,以保持交通的流畅性。

黄灯时间依然较短,用于过渡信号灯变化。

3. 高交通流量情况下:最后,我们模拟高交通流量情况。

设置红灯时间为40秒,绿灯时间为50秒,黄灯时间为5秒。

在这种情况下,红灯时间最长,确保道路上的车辆能够完全通过。

绿灯时间相对较长,以缓解交通压力,提高交通效率。

黄灯时间仍然较短,用于过渡信号灯变化。

实验结果:通过实验观察,我们发现不同交通流量下的信号灯变化对交通流畅度和效率有着明显的影响。

在低交通流量情况下,红灯时间较长,确保车辆安全通过,但可能导致交通效率稍有降低。

在中等交通流量情况下,信号灯的设置更加平衡,保证了交通的流畅性和效率。

而在高交通流量情况下,红灯时间最长,确保车辆完全通过,但也导致交通效率相对较低。

结论:通过本次实验,我们得出了以下结论:交通灯的设置应根据不同交通流量情况进行合理调整,以保证交通的流畅性和效率。

交通灯实训实验报告

交通灯实训实验报告

一、实验目的1. 理解交通灯控制系统的工作原理。

2. 掌握使用单片机进行交通灯控制系统的设计与实现。

3. 提高动手实践能力和问题解决能力。

二、实验原理交通灯控制系统通常采用单片机作为核心控制单元,通过编程实现对交通灯的红、黄、绿三种灯光状态的切换。

本实验采用单片机(如STC89C52)作为核心控制单元,利用定时器实现灯光的定时切换,并通过LED灯模拟交通灯的灯光状态。

三、实验器材1. 单片机开发板(如STC89C52开发板)2. LED灯(红、黄、绿各一个)3. 电阻(根据LED灯的规格选择)4. 跳线5. 编程器6. 计算机四、实验步骤1. 硬件连接:- 将红、黄、绿LED灯分别连接到单片机的P1.0、P1.1、P1.2端口。

- 将电阻串联在每个LED灯的两端,防止LED灯过载。

- 将跳线连接到单片机的相关引脚,用于编程和调试。

2. 软件编程:- 使用Keil软件编写单片机程序,实现交通灯的控制逻辑。

- 设置定时器,实现灯光的定时切换。

- 编写主循环程序,根据定时器的值切换LED灯的状态。

3. 程序调试:- 将程序烧录到单片机中。

- 使用示波器或逻辑分析仪观察LED灯的状态,确保程序运行正常。

4. 实验验证:- 将LED灯连接到实际交通灯的位置。

- 启动单片机,观察LED灯的状态是否符合交通灯的控制逻辑。

五、实验结果与分析1. 实验结果:- 红灯亮时,表示禁止通行。

- 绿灯亮时,表示允许通行。

- 黄灯亮时,表示准备切换到红灯。

2. 实验分析:- 通过本次实验,掌握了使用单片机进行交通灯控制系统的设计与实现。

- 了解了定时器在实现灯光切换中的作用。

- 提高了动手实践能力和问题解决能力。

六、实验总结1. 优点:- 实验操作简单,易于上手。

- 理论与实践相结合,提高了学生的动手能力。

2. 不足:- 实验内容较为简单,未能涉及到复杂交通灯控制系统的设计。

- 实验器材较为有限,限制了实验的拓展性。

七、实验拓展1. 研究复杂交通灯控制系统的设计,如多路口交通灯协同控制。

交通灯课程设计实训报告

交通灯课程设计实训报告

一、引言随着城市化进程的加快,交通拥堵问题日益严重,交通信号灯作为城市交通管理的重要手段,对于提高道路通行效率、保障交通安全具有重要作用。

为了让学生更好地了解交通信号灯的工作原理和设计方法,我们开展了交通灯课程设计实训。

本文将对实训过程进行总结,并对设计成果进行分析。

二、实训目的1. 熟悉交通信号灯的工作原理和设计方法;2. 学会使用单片机进行交通信号灯控制;3. 提高学生的实践能力和创新能力;4. 培养学生的团队协作精神。

三、实训内容1. 交通信号灯基本原理交通信号灯主要包括红灯、黄灯和绿灯三种颜色,分别代表禁止通行、注意和允许通行。

交通信号灯的基本工作原理是:通过单片机控制信号灯的亮灭,实现交通信号的变换。

2. 单片机交通信号灯控制系统设计本实训采用AT89C52单片机作为核心控制单元,设计了一个十字路口交通信号灯控制系统。

系统主要包括以下部分:(1)硬件电路设计:包括单片机、信号灯模块、按键模块、数码管显示模块等。

(2)软件设计:主要包括初始化程序、主程序和中断服务程序。

3. 交通信号灯控制策略(1)基本控制策略:南北方向绿灯亮时,东西方向红灯亮;南北方向黄灯亮时,东西方向红灯亮;南北方向红灯亮时,东西方向绿灯亮;南北方向红灯亮时,东西方向黄灯亮。

(2)时间控制策略:绿灯亮20秒,黄灯亮4秒,红灯亮24秒。

(3)手动/自动控制策略:通过按键切换手动/自动模式,实现交通信号灯的手动控制。

四、实训过程1. 硬件电路搭建:按照设计要求,将单片机、信号灯模块、按键模块、数码管显示模块等硬件电路连接起来。

2. 软件编程:使用C语言编写单片机程序,实现交通信号灯的控制。

3. 系统调试:对系统进行调试,确保交通信号灯工作正常。

4. 优化设计:根据实际情况,对系统进行优化设计,提高系统性能。

五、实训成果1. 成功设计并实现了十字路口交通信号灯控制系统。

2. 系统具有手动/自动控制功能,可满足实际交通需求。

EDA实验课程大作业报告:设计制作一个用于十字路口的交通灯控制器

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课程设计实验报告

目录1课程设计要求 (3)2 电路功能描述 (3)3 设计方案 (3)4设计原理图 (4)5 VHDL语言 (4)6仿真截图 (6)7心得体会 (11)8参考文献 (11)1. 课程设计要求1.1.红、黄、绿灯分别控制显示;1.2.每一个状态分别分配一个时间显示(两位十进制,倒计时);1.3.符合实际交通规律。

2.电路功能描述本设计是实现交通灯的控制,模拟实现了红、绿、黄灯指挥交通的功能。

本设计适用东西和南北方向的车流量大致相同的路口,红灯显示时间30S,绿灯显示时间25S,黄灯显示时间5S,同时用数码管指示当前的状态(红、绿、黄灯)的剩余时间。

当有紧急状况发生时,两个方向都禁止通行,并且显示红灯,当紧急状况解除后,重新计时并且指示时间。

3.设计方案根据设计要求,需要控制显示红、黄、绿三个灯的亮灭状态及显示的时间。

这个设计主要由两部分组成,红黄绿灯的显示模块,显示时间模块。

由实际的交通情况可知,东西方向的显示情况是一致的,南北方向的显示情况也是一致,故在设计的时候就只考虑两种状态,将东西方向合成一种,南北方向合成一种。

红黄绿灯的显示模块用两组共6个灯显示,时间显示模块用LED数码管显示。

此外,本交通灯控制器设置的红黄绿显示方式是参照一些城市的显示规律,红灯30S,绿灯25S,黄灯5S,同时用数码管指示当前状(红、绿、黄灯)的剩余时间。

另外还设有一个紧急状态,当特殊情况发生时,两个方向都禁止通行,指示红灯,紧急状态解除后,重新计时并指示时间。

时间采用倒计时的方式显示。

本设计采用VHDL语言编程,描述各个硬件模块实现的功能,使红、黄、绿灯的转换有一个准确的转换顺序和时间间隔,并进行仿真,通过仿真的结果,得出实验的结果。

在正常情况下的一个完整周期内,交通灯控制器系统一共有四种状态,分别是东西红、南北绿,东西红、南北黄,东西绿、南北红,东西黄、南北红。

其运行方式为东西红、南北绿→东西红、南北黄→东西绿、南北红→东西黄、南北绿,东西黄、南北绿结束后再回到东西红、南北绿的状态,整个周期持续60s。

交通信号灯控制系统设计实验报告

交通信号灯控制系统设计实验报告

交通信号灯控制系统设计实验报告设计目的:本设计旨在创建一个交通信号灯控制系统,该系统可以掌控红、绿、黄三种交通信号灯的工作,使其形成一种规律的交替、循环、节奏,使车辆和行人得以安全通行。

设计原理:在实际的交通灯系统中,通过交通灯控制器控制交通灯的工作。

一般采用计时器或微电脑控制器来完成,其中微电脑控制器可以方便地集成多种控制模式,并且灵活易于升级。

在本设计中,我们采用了基于Atmega16微控制器的交通信号灯控制系统。

该系统通过定时器中断、串口通信等技术来实现。

由于控制的是三个信号灯的交替,流程如下:绿灯亮:红灯和黄灯熄灭绿灯由亮到灭的时间为10秒黄灯亮:红灯和绿灯熄灭黄灯由亮到灭的时间为3秒红灯亮:绿灯和黄灯熄灭红灯由亮到灭的时间为7秒重复以上过程硬件设计:整个系统硬件设计包含ATmega16控制器、射频芯片、电源模块和4个灯组件。

ATmega16控制器采用DIP封装,作为主要的控制模块。

由于需要串口通信和遥控器控制,因此添加了RF24L01射频芯片。

该射频芯片可以很方便地实现无线通信和小型无线网络。

4个灯组件采用红、绿、黄三色LED灯与对应300Ω电阻并连。

电源模块采用5V稳压电源芯片和电容滤波,确保整个系统稳定可靠。

软件设计:通过ATmega16控制器来实现交通信号灯控制系统的功能。

控制器开始执行时进行初始化,然后进入主循环。

在主循环中,首先进行红灯亮的操作,接着在计时时间到达后执行黄灯亮的过程,然后执行绿灯亮的过程,再到计时时间到的时候执行红灯亮的过程。

每个灯持续时间的计时采用了定时器的方式实现,在亮灯过程中,每秒钟进行一次计数,到达相应的计数值后,切换到下一步灯的操作。

在RF24L01射频芯片的支持下,可以使用无线遥控器来对交通信号灯的控制进行远程控制。

在系统初始化完成后,通过串口通信对RF24L01进行初始化,然后进入控制循环。

在这个控制循环中,接收到遥控器的指令后,进行相应的控制操作,如开、关灯等。

交通灯课程设计报告

交通灯课程设计报告

交通灯课程设计报告交通灯课程设计报告一、引言交通灯在现代城市交通系统中起着至关重要的作用。

它们是交通管理的重要组成部分,通过引导交通流量和控制道路上的车辆行驶,确保交通安全和秩序。

本课程设计报告将围绕交通灯的设计和实现展开,旨在培养学生的创新思维和实践操作能力。

二、课程目标1. 理解交通灯的原理和作用;2. 掌握交通灯的设计方法和步骤;3. 熟悉交通灯的控制电路和编程逻辑;4. 能够设计和制作一个功能完善的交通灯模型。

三、课程内容1. 交通灯原理介绍交通灯的基本原理,包括红绿灯的颜色及其代表的意义,交通灯的信号控制原则等。

2. 交通灯设计方法详细介绍交通灯设计的步骤,包括灯色、信号序列、倒计时等方面的考虑。

引导学生思考如何根据实际交通情况设计合理的交通灯方案。

3. 交通灯控制电路设计学习交通灯控制电路的基本原理和组成部分,包括电源、信号控制器、灯组等。

通过实践操作,让学生掌握交通灯控制电路的搭建方法。

4. 交通灯程序编写介绍交通灯程序编写的基本原理和逻辑,培养学生的编程思维。

通过使用合适的编程语言,让学生实现交通灯的自动循环控制,以及可调节的时间间隔。

5. 交通灯模型制作指导学生使用合适的材料和工具制作一个真实可行的交通灯模型,模型应包括外壳、灯组、控制电路等。

学生需要根据自己的设计方案进行制作,并确保模型的正常运行。

四、教学方法1. 理论讲解:通过课堂讲解的方式,向学生介绍交通灯的原理、设计方法和控制电路等相关知识。

2. 实践操作:组织学生进行交通灯控制电路的搭建和程序编写,并指导学生进行交通灯模型的制作。

3. 小组讨论:鼓励学生在小组内就交通灯设计方案进行讨论和交流,培养团队合作能力和创新思维。

五、评价方式1. 实践操作成绩:根据学生完成的交通灯模型的外观、功能和稳定性进行评价。

2. 报告撰写:要求学生撰写交通灯课程设计报告,其中包括设计思路、实施过程和结果分析。

六、结语通过本课程设计,学生将深入了解交通灯的原理和作用,掌握交通灯的设计和控制方法。

交通灯设计实验报告(硬件原理图+程序)

交通灯设计实验报告(硬件原理图+程序)

交通灯信号灯自动控制系统交通灯原理图一、系统的基本功能要求(1)以秒为计时单位,两位数码管以十进制递减计数形式作定时显示,在递减计数回零瞬间完成换灯操作。

(2)通过键盘红黄绿三色信号灯所亮时间在0~99秒内任意设定。

(3)十字路口的通行起始状态可人工设定,运行中可通过人工干预使十字路口通行状态固定于任何一种工作模式。

硬件设计1.系统总体框图2.电路设计(1)显示模块倒计时与时钟说明:⑴共阴极两位数码管用于倒计时;段选端由锁存器控制,位选端用P3_0与P3_1控制⑵两个四位共阴极数码组成八位数码管用于时钟显示段位选分别由两个锁存器控制(2)红绿灯模块说明:⑴图为两方向的红绿黄灯,分别接在P0口上,由P0口控制⑵51系列单片机的P0口内部没有集成上拉电阻,加上拉就是提高驱动能力,必须要通过上拉电阻接VCC。

上拉电阻一般接1K的。

(3)键盘模块说明⑴P2键控制功能说明:P2^6 key0绿灯位选择P2^5 key1黄灯位选择P2^4 key2 加1操作P2^3 key3 减1操作P2^2 key4 信号灯状态固定P2^1 key5 信号灯状态切换P2^0 key6时钟时分秒设置键⑵键盘加上拉电阻为了提高驱动能力3.复位电路:4.时钟电路:说明:用12M晶振时电容要选择30p软件部分1、主程序流程图2、时钟初值控制子程序3、绿灯,黄灯初值设置子程序4、时钟控制与倒计时控制时钟,倒计时初值通过键盘输入。

倒计时使用52单片机内部定时器1实现计数,时钟控制部分是使用定时、计数器2实现计时,以秒为基本单位在数码管中显示。

时钟部分:当秒的个位计时到了10,则秒个位清0,同时十位进一,以此类推;倒计时部分显示是则递减显示。

此过程通过判断语句实现。

5、.灯状态控制灯的状态通过键盘扫描控制。

状态固定键按下时,关闭定时器1;再次按下此键时,打开定时器。

状态选择键按下时,程序跳至下一个状态的程序控制部分,从而实现状态改变。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《微机原理与接口技术》课程设计实验报告题目:交通灯控制功能设计指导老师:专业:信息科学与工程学院班级:自动化0807班日期:2011-1-5微机课程设计——交通灯控制系统目录一、设计思想和实施方案论述,硬件原理图及分析1.1、课程设计名称1.2、课程设计要求1.3、课程设计目的二、设计思想和实施方案论述,硬件原理图及分析2.1、设计思想和实施方案2.2、硬件原理图三、典型模块以及典型编程技巧分析3.1、8086典型模块分析3.2、编程技巧分析四、设计中遇到的问题及解决方法五、程序清单和程序注释,相关流程图5.1程序清单和注释5.2、实验室及流程图六、收获与体会七、参考文献2微机课程设计——交通灯控制系统一、设计课程名称及要求1.1、课程设计名称:交通灯控制功能设计。

1.2、课程设计要求:(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;(2)、硬件电路基于80x86微机接口;(3)、程序功能要求:小键盘给定、数码管(屏幕)显示;(4)、同时具备急救车应急响应功能和时间倒计时显示功能。

、课程设计目的: 1.3《微机应用系统设计与综合实验(实践)》课程设计是自动化专业本科生必修的一门技术基础课。

通过本课程设计,让学生对微机系统有一个较全面的理解,对典型数字接口电路的应用技术有一个较深入的掌握,并对应用系统进行硬件原理和软件编程进行分析、设计和调试,达到基本掌握简单微型计算机应用系统软硬件的设计方法,提高项目开发能力的目的。

要求同学独立完成课题,写出课程设计说明书,画出电路原理图,说明工作原理,画出电路印制板图,编写设计程序及程序流程图。

二、设计思想和实施方案论述,硬件原理图及分析2.1、设计思想和实施方案:本设计使用了两种方案,一种是采用8086和8255A可编程并行接口实现了交通灯的设计,分别对主干道和支干道显示红灯和绿灯并且计时,采用8254定时器/计数器产生1HZ的脉冲,来控制8259产生中断,从而实现整个电路的设计。

交通灯采用红绿两种发光二极管,主干道亮45s,支干道亮30s,计数的最后5s 中绿灯闪烁,用数码管倒计时显示时间,在发生紧急情况时,可以认为用开关控制主干道和支干道红灯均亮,禁止任何车通行。

另一种方案是采用单片机来实现的,达到的效果和上述方案相同。

单片机采用定时器T0和T1来触发中断,根据中断优先级的不同,从而可以处理不同的情况,交通灯也是采用红绿两种发光二极管,主干道亮45s,支干道亮30s,计数的最后5s中绿灯闪烁,用数码管倒计时显示时间,在发生紧急情况时,可以认为用开关控制主干道和支干道红灯均亮,禁止任何车通行,在故障清除后,断开开关可以使红绿灯和数码管回到原来的状态继续正常工作。

2.2、硬件原理图:(a)图是基于8086的设计,(b)图是基于单片机的设计。

在(a)图中,可编程并行接口芯片8255A用作输出口,控制红绿灯的亮暗和数码管的计时,定时器/计数器8254采用级联的方式产生1HZ的脉冲,并将此方波接到中断器8259的IR1上,即每秒钟让中断控制器产生依次中断,从而可以执行中断子程序。

在(b)图中,P0口用于接数码管,P1口用于控制红绿灯的亮暗,P2口用于选通数码管,P32为定时器T0的控制端,当P32口为高电平时,定时器T0才会工作,并且T0的中断优先级高于T1,所以可以用于控制紧急情况。

P37口接扬声器,3微机课程设计——交通灯控制系统在计数器T0工作时扬声器就会响。

4微机课程设计——交通灯控制系统5微机课程设计——交通灯控制系统三、典型模块以及典型编程技巧分析3.1、8086典型模块分析:基于8086的设计主要由3个模块构成,其中8255是作为与外部显示电路的接口单元,8254和8259协同工作产生中断作为控制电路。

可编程并行接口芯片8255A通过方式控制字设置成方式0工作模式,A、B、C口均为输出,可编程计数器/定时器8254通过控制字寄存器设置OU0和OU1均为方式3工作模式,通过级联产生1HZ的方波,中断控制器通过初始化命令字设置成边缘触发,8254的OU1口接到8259的IR1端,每秒钟就可以产生一次中断,每次执行中断子程序时使计数减1,从而可以实现倒计时功能,当计数到0时,重新给计数初值赋给,改变灯的状态。

外部开关接8259的IR0端,它的中断优先级别高,设置成边缘触发,当按下开关,产生一个高电平的脉冲,就可以停止原来的状态来执行更高级别的中断子程序,这就可以处理紧急情况,让主干道和支干道都变成红灯。

单片机典型模块分析:基于单片机的设计主要是以51单片机为核心,通过变成开放T0和T1的中断,但T0要在INT0为高电平时计数器T0才会工作。

计数器T1每50ms产生一次中断,每产生20次中断就令数码管的计数减1,当计数减到0时,重新设置数码管的计数初值,这样就可以依次循环工作了。

当P32接高电平时,计数器T0开始工作,此时红灯都亮,扬声器发音,中断结束后还原原来的状态。

3.2、编程技巧分析:基于8086的设计编程语言是汇编语言,这里的几个编程模块就是方波产生模块,数码管显示模块和中断子程序模块。

方波是通过8254级联产生的,设置8254的计时器0和计数器1工作在方式3,设置适当计数初值n 即可,这个模块的程序如下所示:LOOP2: MOV DX,MY8254_MODEMOV AL,0OUT DX,AL ;计数器0,读写16位低高字节,工作方式3,BCD 计数MOV AL,00HMOV DX,MY8254_0OUT DX,ALMOV AL,50OUT DX,ALMOV DX,MY8254_MODEMOV AL,77HOUT DX,AL ;计数器1,读写16位低高字节,工作方式3,BCD 计数MOV AL,8MOV DX,MY8254_1OUT DX,AL6微机课程设计——交通灯控制系统MOV AL,2OUT DX,AL ;1.041667MHZ/2000/1000=1HZ,即计数器输出1HZ的方波数码管的显示是通过调用显示函数实现的,通过设置8255的工作模式,选择数码管的高位工作,然后将计数的高位送到数码管,再选择数码管的低位工作,然后将计数的低位送到数码管,在1s钟内多次扫描就可以消除闪烁,从而达到理想的计数效果,它的程序如下所示:disp PROC NEARC1:MOV DX,MY8255_CMOV AL,0FEH;选通高位数码管OUT DX,ALSUB AH,AHMOV AL,COUNTMOV BL,0AHDIV BL;商寄存在AL中,余数在AH中MOV BX,OFFSET TABXLAT;通过查表找到对应的7段显示字符MOV DX,MY8255_BOUT DX,ALCALL DELAY1msMOV AL,0OUT DX,ALMOV AL,0FDH;选通低位数码管MOV DX,MY8255_COUT DX,ALMOV AL,AHMOV BX,OFFSET TABXLAT;通过查表找到对应的7段显示字符MOV DX,MY8255_BOUT DX,ALCALL DELAY1msMOV AL,0OUT DX,ALMOV AH,1INT 16H;有键按下则跳出JNZ QUITdisp ENDP7微机课程设计——交通灯控制系统中断子程序模块是通过扩充中断源实现的,主要是通过设置8259的工作模式,开放TR1和TR0的中断,按上开关K后,TR0就发生中断,在TR0中断没有触发的情况下,从OU1口输出一个上升沿脉冲,TR1就中断一次,程序如下所示:QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令MOV AL,0CHOUT DX,ALIN AL,DX ;读出查询字TEST AL,80H ;判断中断是否已响应JZ QUERY ;没有响应则继续查询AND AL,03HCMP AL,00HJE IR0ISR ;若为IR0请求,跳到IR0处理程序JNE IR1ISR ;若为IR1请求,跳到IR1处理程序JMP EOI基于单片机的编程语言是C语言,它主要有数码管显示程序和中断服务子程序。

数码管的显示和上面汇编语言的原理一样,它的程序如下:void display(unsigned char t)//显示数码管函数{P2=0xf5;选通两个高位数码管P0=tab[t/10];取t的十位送到P0口显示delay();P2=0xF0;开通所有的数码管,避免闪烁P2=0xfa;选通低位两个数码管P0=tab[t_x0010_];取t的个位送到P0口显示delay();P2=0xF0;}中断服务子程序有计数器T0和计数器T1的子程序。

T1的优先级低,它主要用于控制正常工作状态的红绿灯和数码管计数,而T0的优先级高,可以处理紧急情况,并且在处理紧急情况以后能返回原正常运行状态,这在汇编里面用的是栈保护,而在C语言中可以设置一个变量也存储原来的数据,可以达到同样保护数据的效果,这一点的实现代码如下:void Time0(void) interrupt 1 using 0{t=0;count1=count;//寄存中断前count的值,以便中断结束后恢复8微机课程设计——交通灯控制系统while(t!=125){t++;sound=~sound;P10=0;//紧急情况绿灯全熄P12=0;P11=1;//紧急情况红灯全亮P13=1;P2=0xF0;//点亮两个数码管count=88;display(count);TH0=(65535-921)/256;TL0=(65535-921)%6;}count=count1;//恢复原来count的值if(a%2==0){P10=1;P11=0;P12=0;P13=1;//返回主干道通行}else{P10=0;P11=1;P12=1;P13=0;//返回主干道通行}}四、设计中遇到的问题及解决方法9微机课程设计——交通灯控制系统1.数码管的计数每秒钟减1,当时不熟练8254的应用,就想用软件延时来实现这个功能,最后查资料的时候知道了计时器的级联应用,很容易的就解决了这个问题。

2.对于数码管的显示,最开始感觉很模糊,查阅资料的时候找到了XLAT表转换指令的应用,首先定义十进制的七段显示码,将表格首地址送入BX,数字的七段码在表格中的偏移量送入AL,然后执行XLAT就可以实现这个功能了。

3.对于要求中的紧急响应功能,开始时只想利用8254来实现,结果失败了,所以我就想到了用两级中断,产生高级中断时就开启紧急响应功能,触发蜂鸣器,点亮红灯。

4.在执行中断程序的过程中,寄存器中的变量好多都改变了,开始时束手无策,最后查资料时想到了栈的运用,利用入栈和出栈来保护寄存器中的初值。

相关文档
最新文档