基于单片机的交通模拟控制设计.docx
《基于单片机的交通模拟控制设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通模拟控制设计.docx(31页珍藏版)》请在冰豆网上搜索。
![基于单片机的交通模拟控制设计.docx](https://file1.bdocx.com/fileroot1/2023-1/7/847c2c62-c8cd-42e1-aa46-b743d6ec54bf/847c2c62-c8cd-42e1-aa46-b743d6ec54bf1.gif)
基于单片机的交通模拟控制设计
基于单片机的交通控制系统模拟设计
摘要
交通对于社会的工业经济和人们的生活生产中有着十分重要的意义。
随着单片机和传感技术的迅速发展,自动检测领域发生了巨大变化,交通自动监测控制方面的研究有了明显的进展,并且必将以其优异的性能价格比,逐步取代传统的交通控制措施。
交通控制研究的发展,旨在解决人类交通因需求的增多而日益繁重带来的问题,局限于道路建设的暂时不足和交通工具的快速增长,就要使更多的车辆安全高效的利用有限的道路资源,避免因无序和抢行等无控制原因造成的不必要阻塞甚至瘫痪,另外,针对整个交通线路车辆的多少实时调整和转移多条线路的分流也十分必要。
各种交通工具已经悄悄地走进我们的生活,给我们的日常活动提供了很大的便利。
交通控制系统在其中发挥了举足轻重的作用,它保证了高效安全的交通秩序,我们每一个公民都要遵守一定的交通规则,同时一个完善而又可靠的交通控制系统将会使交通系统运行更加安全,更有秩序。
本次设计就是利用单片机及其外围电路实现对交通控制系统的简单模拟。
在此我们将运用比较简单的检测传感技术、实时手动调整控制技术,并将传感器监测、实时调整车辆通行时间的算法通过单片机来实现,从而提出了基于单片机的交通控制系统设计方案。
8051单片机的交通灯控制系统由8051单片机、交通灯显示、LED倒计时、车流量检测及调整、违规检测及报警、紧急处理、时间模式手动设置等模块组成。
系统除基本交通灯功能外,还具有通行时间手动设置、可倒计时显示、车流量检测及调整、交通异常状况判别及处理等相关功能。
该系统能够简单、经济、有效地控制十字路口的交通运行,保证路口的交通畅通。
此次设计将从以下几个三个方面着手:
一是确定系统交通控制系统的总体设计方案,包括十字路口具体的通行禁行方案设计以及系统应拥有的各项扩展功能;二是进行检测传感器的硬件电路、LED数码显示电路以及LED指示灯电路的设计;三是进行软件系统的设计,,本次设计采用单片机汇编语言编写、软件的模块化设计,总体上完成了软件的编写。
本设计模拟基本的交通控制系统,硬件方面用红绿黄灯表示禁行,通行和等待的信号发生,用LED数码显示进行倒计时显示提醒行驶者,这样道路的安全更能够得到保证,车流量检测是通过单片机来进行采集数据并进行通行时间自动调整,并且具有交通违规检测及处理和紧急处理等功能。
据此,本设计系统以单片机为控制核心,连接成最小系统,由车流量检测模块,违规检测模块,和按键设置模块等产生输入,信号灯状态模块,LED倒计时模块和蜂鸣器状态模块接受输出。
在软件方面运用单片机汇编语言接受按键的输入设置并控制信号灯的基本变化,同时实时处理各检测装置输入的数据,并通过按键来对交通灯的运行模式进行设置,以通过对信号灯的变化控制以实现交通灯的模拟设计。
关键词:
交通控制,传感检测,AT89C52,倒计时显示,紧急处理,信号灯控制,报警提示.
1.单片机交通控制系统总体方案设计
1.1单片机交通控制系统通行方案设计
交通控制系统设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如下图所示。
1.1.1交通状态图:
图1交通状态
说明:
黑色表示亮,白色表示灭.
1.1.2交通状态变化过程:
●东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。
此状态下,东西向允许通行,南北向禁止通行。
●东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时5秒。
此状态下,除了已经正在通行中的车辆,其他所有车辆都需等待状态转换。
●南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时20秒。
此状态下,东西向禁止通行,南北向允许通行。
●南北方向绿灯灭,同时黄灯亮,东西方向红灯亮,倒计时2秒。
此状态下,除了已经正在通行中的车辆,其他所有车辆都需等待状态转换。
1.1.3灯状态和行止状态
表1交通状态及红绿灯状态
状态1
状态2
状态3
状态4
东西向
禁行
等待变换
通行
等待变换
南北向
通行
等待变换
禁行
等待变换
东西红灯
1
1
0
0
东西黄灯
0
0
0
1
东西绿灯
0
0
1
0
南北红灯
0
0
1
1
南北绿灯
1
0
0
0
南北黄灯
0
1
0
0
东西南北四个路口均有红绿黄3灯和数码显示管2个,本次设计为方便起见,在东西南北向共设置两对数码显示管,同时设置两组红黄绿信号灯,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换,状态及红绿灯状态如表1..1所示。
说明:
0表示灭,1表示亮。
1.2单片机交通控制系统的功能要求
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还具有倒计时显示,车流量检测及调整,交通违规处理和紧急处理等功能。
(1)倒计时显示
倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间,在“停止”和“通过”两者间作出合适的选择。
(2)车流量检测及调整
本次设计的车流量检测器采用传感器+单片机+外围器件来实现,交通控制系统普遍使用的红绿灯都有固定的红绿灯时间,并自动切换。
红绿灯时间,是根据道口东西向和南北向的车流量,利用统计方法确定的,最终利用单片机进行自动调整。
(3)时间手动设置
系统除了可以根据车流量自动调整红绿灯时间外,也可以通过键盘进行手动设置,避免自动故障和意外发生,并在紧急状态下,可设置所有灯变为红灯。
本系统就是通过独立式键盘来设置红绿灯时间的。
(4)紧急处理
交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,由此在交通控制中增设禁停按键,就可达到此目的。
(5)违规检测
当交通路口出现闯红灯或其他违规情况时,有关检测传感器可以实时检测并发出报警信号,以供处理。
1.3单片机交通控制系统的基本构成及原理
单片机设计交通控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,接入LED数码管就可以显示倒计时以提醒行驶者进行行止判断。
本系统在此基础上,加入了违规检测电路和车流量检测电路为单片机采集数据,单片机对此进行具体处理,及时调整控制指挥,同时接上蜂鸣器,进行报警提示。
图2系统的总体框图
据此,本设计系统以单片机为控制核心,连接成最小系统,由车流量检测模块,违规检测模块,和按键设置模块等产生输入;信号灯状态模块,LED倒计时显示模块和蜂鸣器状态模块接收输出,系统的总体框图如上所示。
键盘设置模块对系统输入模式选择及具体通行时间进行设置,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。
在此过程中还要实时捕捉违规检测和紧急按键信号,以达到对异常状态进行实时控制的目的。
急停按键和违规检测则随时调用中断来实现相应的控制功能。
在模式选择上,若为自动模式,将不断调用车流量检测模块对车流量进行检测统计,到达一定时间将修正通行时间以满足不同路况的需要。
2.系统硬件电路的设计
2.1系统硬件总电路构成及原理
本设计中可以选用AT89C52单片机及外围器件构成最小控制系统,6个发光二极管分成2组红绿黄三色灯构成信号灯指示模块,4个LED东西南北各两个构成倒计时显示模块,车流量检测传感器采集流量数据,光敏传感器捕获违规信号,若干按键组成时间设置和模式选择按钮和紧急按钮等,以及用1个蜂鸣器进行报警。
2.1.1系统硬件电路构成
本系统以单片机为核心,组成一个集车流量采集、处理、自动控制为一身的闭环控制系统。
系统硬件电路由车流量检测电路、单片机、违规检测电路,状态灯,LED显示,按键,蜂鸣器组成。
其具体的硬件电路总图如图2.1所示。
图3基于单片机的交通控制系统电路图
其中P0,P1,用于送显两片LED数码管,P2用于控制红绿黄发光二极管,XTAL1和XTAL2接入晶振时钟电路,REST引脚接上电复位电路,P3.2即INT0接违规检测电路和紧停/东西时间设置键J,P3.3即INT1接车流量检测电路,P3.6接南北时间设置键S,P3.7接自动模式选择/返回键F,P3.4接蜂鸣器。
2.1.2系统工作原理
系统上电或手动复位之后,系统等待模式选择设置键按下,模式分两种:
红绿灯时间自动和红绿灯手动时间设置。
若此时F键按下,则设置为自动模式,若此时按下的是S键,则设置为时间设置模式,依次按S若干次,J键若干次可设置好两个方向的红绿灯时间,再按F键确认。
系统首先显示状态灯及LED数码管,将状态码值送显P2口,将要显示的时间值的个位和十位分别送显P0和P1口,在此同时以50ms为周期,用软件方法计时1秒,到达1s就要将时间值减1,刷新LED数码管。
一个完整的状态显示完成后,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值,依次类推,信号灯显示四种不同的状态。
本系统要开启两个外部中断,其一为违规信号或禁停信号输入,一旦信号有效,中断开始,进入中断服务子程序,开启蜂鸣器禁止全部通行,当按下F键,中断结束返回;其二为车流量检测信号输入,若检测到车辆经过,进入相应的中断子程序,将存储车流量的寄存器加1,然后中断结束返回。
每满一个状态循环周期,若为自动模式,则须将检测到的车流量数据处理一次,判断两个方向的交通轻重缓急状况,并调整下次状态循环的红绿灯时间,以达到自动控制的目的。
2.2单片机的选择
2.2.1单片机的概述
单片微型计算机简称单片机,又称微控制器,嵌入式微控制器等,属于第四代电子计算机。
它把中央处理器、存储器、输入/输出接口电路以及定时器/计数器集成在一块芯片上,从而具有体积小、功耗低、价格低廉、抗干扰能力强且可靠性高等特点。
单片机的主要特点有:
1)具有优异的性能价格比。
2)集成度高、体积小、可靠性高。
3)控制功能强。
4)低电压,低功耗。
2.2.2AT89C52芯片的内部结构框图
AT89C52是一带有2K字节快闪可编程可擦除存储体(EEPROM)的低电压、高性能8位CMOS微型计算机,它和工业标准MCS—51指令集和引脚结构兼容。
通过在单块芯片上组合通用的CPL1和快闪存储器,ATMEL公司生产的AT89C52是一强劲的微型计算机,图2.2为AT89C52的内部结构框图。
图4AT89C8052内部结构图
2.2.3AT89C52芯片最小系统
一个最简单的单片机系统包括晶振、复位、电源、系统的输入控制、输出显示,以及其他外围模块(如通信、数据采集等)。
(1)时钟电路
单片机的时钟电路由外接的一只晶振和两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。
单片机系统常用的晶振频率有6MHz、11.0592MHz、12MHz、本系统采用11.0592MHz晶振,电容选22pF。
(2)复位电路
系统刚上电时,单片机需要一定的复位时间。
一个稳定的单片机系统必须设计复位电路。
当程序跑飞或死机时,也需要进行系统复位。
复位电路有很多种,有上电复位,手动复位等。
(3)EA脚的功能及接法
单片机的EA脚控制程序从内部存储器还是从外部存储器读取程序。
由于AT89C8052内部的flash容量很大,因此基本都是从内部的存储器读取程序,即不需要外接ROM来存储程序,因此,本系统中EA脚必须接高电平。
本设计中复位方式采用上电∕按键手动复位方式,时钟采用内部时钟。
如下图2.3所示。
图5本系统复位与时钟电路
2.3其它硬件介绍及连接
2.3.1车流量检测电路及模拟
为了达到对红绿灯的时间控制,需要对道路上的车流量进行检测。
本次设计用一种手动的操作方式,即车流量的检测电路用拨断开关代替。
其基本思路为:
当车流量大时,用拨断开关送出一个低电平,以产生外部中断,输入到P3.3引脚上,车流量检测电路如下图2.4所示。
图6车流量检测电路
如图所示,当开关状态如图所示时,LED不亮,同时高电平被单片机捕获。
当开关拨下时LED点亮,同时低电平被单片机捕获,这样单片机通过捕获的电平状态做出相应的控制,与LED的状态即车流量的状态互相配合协调。
2.3.2违规检测电路及模拟
在红灯和黄灯期间,车辆是禁行的,为了对那些违规的车辆进行检测,可使用超声波车辆传感器。
但是,用于受到条件的限制,本系统设计中只是使用了普通光敏二极管。
图7违规检测电路
其基本设计思想是:
将光敏二极管放在停车线上,当车辆行驶过将光敏二极管遮住,这样,光敏二极管就不导通,单片机检测到这一信号执行警报操作。
违规检测电路如下图2.5所示。
但是除了使用光敏二极管,还需使用三极管,三极管的型号是9031.由于普通光敏二极管的开关特性不太好,所以设计在电路中加入了三极管作为开关。
由于普通光敏二极管在导通的情况下的电阻都能达到0.5-1K,所以在设计中将光敏二极管直接连到了电源上。
同时三极管还可以起到一定的隔直作用。
当光敏二极管关闭时,三极管的基极为低电平,基极与发射基之间的电压为零,三极管关断,检测口的电压为高电平。
同理,当光敏二极管导通时,三极管的基极电压为高,基极与发射极之间的电平为高,三极管导通,检测口的电压为低电平,基于此就可以检测是否有违规车辆了。
2.3.3八段LED数码管
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如dp,g,f,e,d,c,b,a全亮显示为8,采用共阳极连接驱动代码,代码表如下表3.1所示。
表2驱动代码表
显示数值
dp,g,f,e,d,c,b,a
驱动代码
0
11010000
C0H
1
11111001
F9H
2
10100100
A4H
3
10110000
B0H
4
10011001
99H
5
10010010
92H
6
10000010
82H
7
11111000
F8H
8
10000000
80H
9
10010000
90H
相应在程序软件上,可以通过调用程序给定的秒值经过特定计算算出需要显示的个位和十位,然后有DPTR调取LEDMAP的代码。
LED8段数码管的设置为每个方位上的一对2维显示器。
四个方位上总共用两对LED接在单片机的I/O口上。
虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的I/O口是对称的,如图2.6所示。
图8LED连接图
2.3.4其它器件
(1)发光二极管
红绿灯的显示采用普通的发光二极管。
每个方向上设置红绿黄灯,总共2组。
如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的,如下图2.7所示。
图9信号灯的连接
(2)蜂鸣器
本设计采用一般蜂鸣器,蜂鸣器使用PNP三极管进行驱动控制,当P3.4引脚输出为低电平,PNP导通,蜂鸣器蜂鸣;当P3.4引脚输出高电平时,PNP截止,蜂鸣器停止蜂鸣。
如下图2.8所示
图10蜂鸣器连接
(3)按键控制
本设计设置了有3个键:
S键P3.6,J键P3.2,F键P3.7。
每个按键一端接地,另一端接上拉电阻。
低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。
如下图2.9所示
图11按键示意图
3系统软件程序的设计
3.1程序主体设计流程
全部控制程序分为若干模块:
键盘设置处理程序,状态灯控制程序,LED显示程序,消抖动延时程序,次状态判断及处理程序,紧停或违规判断程序,中断服务子程序,车流量计数程序,红绿灯时间调整程序等。
整个软件程序方面主要分两大部分:
按键处理程序和50ms扫描程序。
流程图如图3.1所示。
图12系统总流程图
首先是按键处理程序,89C52通过对I/O扫描,确定是否有键按下,再判断具体是哪个键按下,根据键值跳转到按键处理程序。
按键处理结果可设置两种工作模式:
红绿灯时间设置模式和红绿灯时间自动模式,次程序相当于系统的模式设置,若想重新设置则要按下复位键。
设置过后进入50ms扫描程序,
50ms扫描程序开始后,先刷新显示模块,若为自动模式则接下来要计数车流量,然后扫描紧停信号和违规信号,若捕获则调用中断,中断服务子程序主要启动蜂鸣器,直至恢复键按下。
50ms已到则重新扫描,扫描20次之后计时到达1s则时间数据减1,在显示模块中修改显示缓冲区内容。
在半个状态对换时,车流量计数程序在一个状态变换循环先后计数两个方向的车流量,然后调用红绿灯时间调整程序,更新红绿灯时间。
当前状态时间已到,则判断次状态装入相应数据,然后进入下一状态。
3.2理论基础知识
(1)定时器原理
定时器工作的基本原理是给初值,让它不断加1直至加完为模值,这个初值是送到TH和TL中的。
它是以加法计数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值。
计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。
计算通式变为:
T=(M-TC)T0
(2)软件延时原理
MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。
我们设定一个初值为20的软件计数器和使T0定时50毫秒。
这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入它的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到。
设定定时器需要定时50毫秒,故T0必须工作于方式1。
要求初值:
TC=M-T*T0=216-50ms/1us=15536=3CBOH,程序如下:
……
WAIT:
JNBTF0,WAIT1
CLRTF0
MOVTH0,#01H
MOVTL0,#0B01H
DJNZR2,WAIT
……
(3)中断原理
本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,本设计采用电平触发方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。
IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。
在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。
(4)红绿灯时间调整原理
车流量检测传感器可对单片机控制系统提供实时数据,系统对所获数据进行统计处理。
实现红绿灯控制必须解决对当前十字路口的交通状况的检测,并完成如下工作:
1.输入量的采集,系统采集两个输入量,即两个方向的车流量;
2.输出量的确认,即红绿灯时间值;
3.设计将输入映照到输出的算法;
4.决定被统计的车流量算法的处理,生成精确的输出控制信号。
为了采集上述数据,本设计中用模拟的方法假设在十字路口的两侧共设置手动按键。
分别检测两个方向的车流量,车流量检测不是最终目的,在每半个循环周期,系统会检测到两个方向的车流量数据,除以时间,那么就可以得到单位时间的车流量,然后比较两个方向单位时间车流量多少,以确定下一次循环红绿灯时间,达到调整的目的。
如在一次循环过后,检测到南北向车流量(设此时南北绿灯,东西红灯时间为20s)为100辆,东西向车流量(设此时东西绿灯,南北红灯时间为30s)为90辆,则单位时间车流量南北向和东西向的比例是:
(100/20)/(90/30)=1.6,显然南北向交通严重,那么现在就可以把南北绿灯,东西红灯时间调长。
上面的比例1.6还是一个确定数值,究竟多少为多,多少为少,这就必须设定算法,划定几个值域范围,分别对应到具体的调整时间上,系统就调用具体的输出值了。
3.3子程序模块设计
(1)按键扫描程序
首先程序不断扫描模式设置键,分别记为:
S键,J键,F键对应I/O端口的P3.6,P3.2,P3.7,低电平有效,按键顺序是指定的,若直接按F键,则为自动调整模式,然后进入下一程序;若先按S键,再按J键,F键则为设置时间模式,然后进入下一程序。
程序的开始要判断是否有键按下,可以不断将S键值和F键值相与,与值为1则表示没有键按下,为0则表示有键按下,程序如下:
K1:
MOVC,P3.7
ANLC,P3.6
MOV03H,C
JB03H,K1
……
接下来要判断具体是哪个键,若为F键,则将自动标志位置1,进入下一程序,否则为S键,则表示设置南北绿灯时间,用R0存值,按1下加1,同时还需判断此时J键是否按下,若按下,则表示南北绿灯时间设置完毕,开始设置东西绿灯时间,用R1存值,同样按1下加1,同时判断此时F键是否按下,若按下,则表示时间设置完毕,进入下一程序。
在这个过程中,S,J键的计数是循环的,从初值20开始,加到40则循环回到20。
如判断S键程序如下:
CJNZR0,#40,V1
MOVR0,#20
V1:
INCR0
……
(2)状态灯显示及判断
在本设计中,实际控制的灯只有6个,即:
东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯。
定义I/O端口如下,其中均是低电平有效。
H_REDBITP2.1
H_GREENBITP2.2
H_YELLOWBITP2.3
L_REDBITP2.4
L_GREENBITP2.5
L_YELLOWBITP2.6
共有4钟状态:
东西红灯亮,南北绿灯亮(11101011/EBH);东西红灯亮,南北黄灯亮(11100111/E7H);东西绿灯亮,南北红灯亮(11011101/DDH);东西黄灯亮,南北红灯亮(10111101/BDH)。
括号中是P2端口8个引脚值P2.7,P2.6,P2.5,P2.4,P2.3,P2.2,P2.1,P2.0以及对应的十六进制码。
在用于显示发光二极管时,直接由MOV指令将十六进制码送入P2口。
刚才的4个状态是依次变换的,这就要涉及到状态的判断和衔接了。
先把P2端口的值与所有的4个状态码比较,若相同则判断成功当前状态,再把下一状态的状态码送显P2即可。
程序如下:
MOVA,P2
D0:
CJNEA,#0DDH,D1
MOVP2,#0BDH
MOVR4,#5
SJMPDULY
D1:
CJNEA,#0BDH,D2
MOVP2,#0EBH
MOV30H,R1
MOVR4,30H
CLR01H
D2:
CJNEA,#0EBH,D3
MOVP2,#0E7H
MOVR4,#5
JNB00H,DULY2
LCALLRV
SJMPDULY2
……
(3)LED倒计时显示
LED计时每1秒都要刷新1次,那么计时满1秒时就要将存储时间的工作寄存器R4减1,然后送入LED显示程序中显示。
下面要将时间数据R4的十位,个位分开送显P1,P0端口,首先将R4除以10,整数即十位放在A中,余数即个位放在B中,设置7段LED显示数据的数据表,用数据指针寄存器DPTR指向数据表的首地址,再加上A中的偏移量,就可以指向十位数字,然后送显即可,个位显示