交通灯控制器的设计与实现

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

交通灯控制器的设计与实现

一、实验目的

1.了解交通灯管理的基本工作原理。

2.熟悉8253计数器/定时器、8259A中断控制器和8255A并行接口的工作方式及应用编程。

3.掌握多位LED显示的方法。

二、实验内容与要求

设计一个用于十字路口的交通灯控制器。

1.基本要求:

1)东西和南北方向各有一组红,黄,绿灯用于指挥交通,红,黄,绿的持续时间分别为

25s,5s,20s。

2)当有紧急情况(如消防车)时,两个方向均为红灯亮,计时停止,当特殊情况结

束后,控制器恢复原来状态,正常工作。

3)一组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。

2.提高部分:

1) 实时修改交通灯的持续时间。

2) 根据不同时段对主要交通方向的信号进行调整。

3) 可以使用LCD显示提示信息。

三、实验报告要求

1.设计目的和内容

2.总体设计

3.硬件设计:原理图(接线图)及简要说明

4.软件设计框图及程序清单

5.设计结果和体会(包括遇到的问题及解决的方法)

四、总体设计

交通灯的工作过程如下:设十字路口的1、3为南,北方向,2、4为东西方向,初始态为4个路口的红灯全亮。之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车,2个路口的LED数码管开始倒计时25秒。延迟20秒后,1、3路口的绿灯熄灭,而1,3路口的黄灯开始闪烁(1HZ)。闪烁5次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、4路口方向开始通车,2个路口的LED数码管重新开始倒计时25秒。延迟20秒时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。闪烁5次后,再切换到1、3路口方向。

之后,重复上述过程。当有紧急情况时,2个方向都红灯亮,倒计时停止,车辆禁止通行,当紧急情况结束后,控制器恢复以前的状态继续工作。

在设计中采用6个发光二极管来模拟2个路口的黄红绿灯,每个路口用2个数码管来显示通行或禁止剩余的时间。紧急情况用一个单脉冲发生单元申请中断来模拟,紧急情况结束后,再发一个中断来恢复以前的状态。

根据前面的介绍,本设计硬件由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。定时模块采用硬件定时和软件定时相结合的方法,用8253定时/计数器定时100ms,再用软件计时实现所需的定时。发光二极管模块由8255控制发光二极管来实现。数码管显示模块由实验平台上的LED显示模块实现。紧急中断模块是由单脉冲发生单元和8279中断控制器组成。

程序主要是由定时子程序、发光二极管显示子程序、数码管显示子程序和中断服务程序组成。包括对8253、8255以及8259等可编程器件的编程。

五、硬件设计

本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。完整系统的硬件连接如图1所示。硬件电路由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。

定时模块是由8253的计数器0来实现定时100ms。Clk0接实验平台分频电路输出Q6,f=46875hz。GATE0接8255的PA0,由8255输出来控制计数器的起停。OUT0接8259的IRQ2,定时完成申请中断,进入中断服务程序。

发光二极管显示模块由8255输出来控制发光二极管的亮灭。8255输出为低电平时,对应的发光二极管就点亮,否则就熄灭。8255的接口电路如图2所示。交通灯的对应关系如下:

实验平台上提供一组六个LED数码管。插孔CS1用于数码管段选的输出选通,插孔CS2用于数码管位选信号的输出选通。本设计用4个数码管来倒计时。

紧急中断模块是由单脉冲发生单元和8259中断控制器,单脉冲发生单元主要用来请求中断,然后做出紧急情况处理。

图2 8255接口电路

六、软件设计

根据交通灯的工作过程和电路连接情况,交通灯的工作状况见下表所示。正常工作时交通灯在前4个状态间运行,出现紧急情况进入状态5,紧急情况结束后,恢复原状态。 Q6

OUT0 8253 GATE0 Clk0

PA0 8255 PC

地址 CS1 译码 CS2 电路 CS3 CS4

数码管显示模块

IRQ2 8259 IRQ3 发光二极管电路

单脉冲发生单元

PC BUS 图1 系统硬件电路图

1. 软件设计思路

本程序由主程序、定时中断子程序和外部中断子程序组成。主程序主要负责系统初始化和等待中断。定时中断子程序主要负责数码管显示刷新和红绿黄灯各种状态切换。外部中断子程序负责紧急情况处理和处理完恢复。

8253计数的起停由8255的PA0控制,8255的PA0输出1时,8253开始计数,交通灯按正常状态切换工作,PA0输出0时,计数器停止工作,交通灯不再按正常状态切换。8253开始计数后每100ms发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。当有紧急情况时进入外部中断服务子程序,先让8253停止计数,然后点亮所有的红灯,下一次外部中断处理时,恢复原来的交通灯状况,启动8253开始工作。

2. 主程序设计

主程序负责系统的初始化,然后数码管数据输出显示,同时检测PC键盘按键,有按键就退出程序。主程序的流程图如图3所示。

系统初始化包括8253的初始化,8255的初始化,中断向量初始化以及设置交通灯工作的初始状态。8253定时的时间是100ms,clk0的输入时钟f=46875hz,所以计数初值为124FH。

3 主程序的流程图

3. 定时中断子程序

定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。中断子程序包括数码管输出数据刷新程序和各状态处理程序。中断程序的流程图如图4所示。

图4 定时中断服务子程序

数码管输出数据刷新子程序是实现倒计时25s ,用LEDOUT 表示输出的数据,cnt 用来软件计时1s ,就是计数

10个100ms 。LED 输出是要将输出的数据转化为段选码。LED 数码管倒计时显示子程序的流程图如图5所示。

图5 LED 倒计时显示子程序

相关文档
最新文档