1、 1.1.2 交通状态变化过程: 东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向允许通行,南北向禁止通行。 东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的车辆,其他所有车辆都需等待状态转换。 南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向禁止通行,南北向允许通行。 南北方向绿灯灭,同时黄灯亮,东西方向红灯亮,倒计时2秒。1.1.3 灯状态和行止状态表1交通状态及红绿灯状态状态1状态2状态3状态4东西向禁行等待变换通行南北向东西红灯1东西黄灯东西绿灯南北红灯南北绿灯南北黄灯东西
2、南北四个路口均有红绿黄3灯和数码显示管2个,本次设计为方便起见,在东西南北向共设置两对数码显示管,同时设置两组红黄绿信号灯,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换,状态及红绿灯状态如表1.1所示。0表示灭,1表示亮。1.2 单片机交通控制系统的功能要求 本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还具有倒计时显示,车流量检测及调整,交通违规处理和紧急处理等功能。(1)倒计时显示倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间,在“停止”和“通过”两者间作出合适的选择。(2)车流量检测及调整本次设计的车流量检测器采用传感器+单片
3、机+外围器件来实现,交通控制系统普遍使用的红绿灯都有固定的红绿灯时间,并自动切换。红绿灯时间,是根据道口东西向和南北向的车流量,利用统计方法确定的,最终利用单片机进行自动调整。(3)时间手动设置 系统除了可以根据车流量自动调整红绿灯时间外,也可以通过键盘进行手动设置,避免自动故障和意外发生,并在紧急状态下,可设置所有灯变为红灯。本系统就是通过独立式键盘来设置红绿灯时间的。(4)紧急处理 交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,由此在交通控制中增设禁停按键,就可达到此目的。(5)违规检测 当交通路口出现闯红灯或其他违规情况时,有关检测传感
4、器可以实时检测并发出报警信号,以供处理。1.3单片机交通控制系统的基本构成及原理单片机设计交通控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,接入LED数码管就可以显示倒计时以提醒行驶者进行行止判断。本系统在此基础上,加入了违规检测电路和车流量检测电路为单片机采集数据,单片机对此进行具体处理,及时调整控制指挥,同时接上蜂鸣器,进行报警提示。图2 系统的总体框图据此,本设计系统以单片机为控制核心,连接成最小系统,由车流量检测模块,违规检测模块,和按键设置模块等产生输入;信号灯状态模块,LED倒计时显示模块和蜂鸣器状态模块接收输出,系统的总体框图如上所示。键盘设置模块对
5、系统输入模式选择及具体通行时间进行设置,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。在此过程中还要实时捕捉违规检测和紧急按键信号,以达到对异常状态进行实时控制的目的。急停按键和违规检测则随时调用中断来实现相应的控制功能。在模式选择上,若为自动模式,将不断调用车流量检测模块对车流量进行检测统计,到达一定时间将修正通行时间以满足不同路况的需要。2.系统硬件电路的设计2.1系统硬件总电路构成及原理本设计中可以选用AT89C52单片机及外围器件构成最小控制系统,6个发光二极管分成2组红绿黄三色灯构成信号灯指示模块,4个LED东西南北各两个构成倒计时显
6、示模块,车流量检测传感器采集流量数据,光敏传感器捕获违规信号,若干按键组成时间设置和模式选择按钮和紧急按钮等,以及用1个蜂鸣器进行报警。2.1.1系统硬件电路构成本系统以单片机为核心,组成一个集车流量采集、处理、自动控制为一身的闭环控制系统。系统硬件电路由车流量检测电路、单片机、违规检测电路,状态灯,LED显示,按键,蜂鸣器组成。其具体的硬件电路总图如图2.1所示。图3基于单片机的交通控制系统电路图其中P0,P1,用于送显两片LED数码管,P2用于控制红绿黄发光二极管,XTAL1和XTAL2接入晶振时钟电路,REST引脚接上电复位电路,P3.2即INT0接违规检测电路和紧停东西时间设置键J,P
7、3.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数码管。一个完整的状态显示完成后
8、,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值,依次类推,信号灯显示四种不同的状态。本系统要开启两个外部中断,其一为违规信号或禁停信号输入,一旦信号有效,中断开始,进入中断服务子程序,开启蜂鸣器禁止全部通行,当按下F键,中断结束返回;其二为车流量检测信号输入,若检测到车辆经过,进入相应的中断子程序,将存储车流量的寄存器加1,然后中断结束返回。每满一个状态循环周期,若为自动模式,则须将检测到的车流量数据处理一次,判断两个方向的交通轻重缓急状况,并调整下次状态循环的红绿灯时间,以达到自动控制的目的。2.2单片机的选择2.2.1单片机的概述单片微型计算机简称单片机,又称微控制器,
9、嵌入式微控制器等,属于第四代电子计算机。它把中央处理器、存储器、输入/输出接口电路以及定时器/计数器集成在一块芯片上,从而具有体积小、功耗低、价格低廉、抗干扰能力强且可靠性高等特点。单片机的主要特点有:1)具有优异的性能价格比。2)集成度高、体积小、可靠性高。3)控制功能强。4)低电压,低功耗。2.2.2 AT89C52芯片的内部结构框图AT89C52是一带有2K字节快闪可编程可擦除存储体(EEPROM)的低电压、高性能8位CMOS微型计算机,它和工业标准MCS51指令集和引脚结构兼容。通过在单块芯片上组合通用的CPL1和快闪存储器,ATMEL公司生产的AT89C52是一强劲的微型计算机,图2
10、.2为AT89C52的内部结构框图。图4 AT89C8052内部结构图2.2.3 AT89C52芯片最小系统一个最简单的单片机系统包括晶振、复位、电源、系统的输入控制、输出显示,以及其他外围模块(如通信、数据采集等)。(1)时钟电路单片机的时钟电路由外接的一只晶振和两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。单片机系统常用的晶振频率有6MHz、110592MHz、12MHz、本系统采用110592MHz晶振,电容选22pF。(2)复位电路系统刚上电时,单片机需要一定的复位时间。一个稳定的单片机系统必须设计复位电路。
11、当程序跑飞或死机时,也需要进行系统复位。复位电路有很多种,有上电复位,手动复位等。(3)EA脚的功能及接法单片机的EA脚控制程序从内部存储器还是从外部存储器读取程序。由于AT89C8052内部的flash容量很大,因此基本都是从内部的存储器读取程序,即不需要外接ROM来存储程序,因此,本系统中EA脚必须接高电平。本设计中复位方式采用上电按键手动复位方式,时钟采用内部时钟。如下图2.3所示。图5 本系统复位与时钟电路2.3其它硬件介绍及连接2.3.1车流量检测电路及模拟为了达到对红绿灯的时间控制,需要对道路上的车流量进行检测。本次设计用一种手动的操作方式,即车流量的检测电路用拨断开关代替。其基本
12、思路为:当车流量大时,用拨断开关送出一个低电平,以产生外部中断,输入到P3.3引脚上,车流量检测电路如下图2.4所示。图6 车流量检测电路如图所示,当开关状态如图所示时,LED不亮,同时高电平被单片机捕获。当开关拨下时LED点亮,同时低电平被单片机捕获,这样单片机通过捕获的电平状态做出相应的控制,与LED的状态即车流量的状态互相配合协调。2.3.2违规检测电路及模拟在红灯和黄灯期间,车辆是禁行的,为了对那些违规的车辆进行检测,可使用超声波车辆传感器。但是,用于受到条件的限制,本系统设计中只是使用了普通光敏二极管。图7 违规检测电路其基本设计思想是:将光敏二极管放在停车线上,当车辆行驶过将光敏二
13、极管遮住,这样,光敏二极管就不导通,单片机检测到这一信号执行警报操作。违规检测电路如下图2.5所示。但是除了使用光敏二极管,还需使用三极管,三极管的型号是9031.由于普通光敏二极管的开关特性不太好,所以设计在电路中加入了三极管作为开关。由于普通光敏二极管在导通的情况下的电阻都能达到0.5-1K,所以在设计中将光敏二极管直接连到了电源上。同时三极管还可以起到一定的隔直作用。当光敏二极管关闭时,三极管的基极为低电平,基极与发射基之间的电压为零,三极管关断,检测口的电压为高电平。同理,当光敏二极管导通时,三极管的基极电压为高,基极与发射极之间的电平为高,三极管导通,检测口的电压为低电平,基于此就可
14、以检测是否有违规车辆了。2.3.3八段LED数码管LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如 dp,g,f,e,d,c,b,a全亮显示为,采用共阳极连接驱动代码,代码表如下表3.1所示。表2 驱动代码表显示数值dp,g,f,e,d,c,b,a驱动代码11010000C0H11111001F9H210100100A4H310110000B0H41001100199H51001001092H61000001082H711111000F8H81000000080H91001000090H相应在程序软件上,可以通过调用程序给定的秒值经过特定计算算出需
15、要显示的个位和十位,然后有DPTR调取LEDMAP的代码。LED8段数码管的设置为每个方位上的一对2维显示器。四个方位上总共用两对LED接在单片机的I/O口上。虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的I/O口是对称的,如图2.6所示。图8 LED连接图2.3.4其它器件(1)发光二极管红绿灯的显示采用普通的发光二极管。每个方向上设置红绿黄灯,总共2组。如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的,如下图2.7所示。图9 信号灯的连接(2)蜂鸣器本设计采用一般蜂鸣器,蜂鸣器使用PNP三极管进行驱动控制,当P3.4引脚输出为低电平,PNP
16、导通,蜂鸣器蜂鸣;当P3.4引脚输出高电平时,PNP截止,蜂鸣器停止蜂鸣。如下图2.8所示图10蜂鸣器连接(3)按键控制本设计设置了有3个键:S键P3.6,J键P3.2,F键P3.7。每个按键一端接地,另一端接上拉电阻。低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。如下图2.9所示图11 按键示意图3系统软件程序的设计3.1程序主体设计流程全部控制程序分为若干模块:键盘设置处理程序,状态灯控制程序,LED显示程序,消抖动延时程序,次状态判断及处理程序,紧停或违规判断程序,中断服务子程序,车流量计数程序,红绿灯时间调整程序等。整个软件程序方面主要分两大部分:按键处理
17、程序和50ms扫描程序。流程图如图3.1所示。图12 系统总流程图首先是按键处理程序,89C52通过对I/O扫描,确定是否有键按下,再判断具体是哪个键按下,根据键值跳转到按键处理程序。按键处理结果可设置两种工作模式:红绿灯时间设置模式和红绿灯时间自动模式,次程序相当于系统的模式设置,若想重新设置则要按下复位键。设置过后进入50ms扫描程序,50ms扫描程序开始后,先刷新显示模块,若为自动模式则接下来要计数车流量,然后扫描紧停信号和违规信号,若捕获则调用中断,中断服务子程序主要启动蜂鸣器,直至恢复键按下。50ms已到则重新扫描,扫描20次之后计时到达1s则时间数据减1,在显示模块中修改显示缓冲区
18、内容。在半个状态对换时,车流量计数程序在一个状态变换循环先后计数两个方向的车流量,然后调用红绿灯时间调整程序,更新红绿灯时间。当前状态时间已到,则判断次状态装入相应数据,然后进入下一状态。3.2理论基础知识(1)定时器原理定时器工作的基本原理是给初值,让它不断加1直至加完为模值,这个初值是送到TH和TL中的。它是以加法计数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC 可得到如下计算通式:TC=M-C式中,M为计数器模值。计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片
19、机系统主频周期的12倍,设要求的时间值为T,则有C=TT0。计算通式变为:T=(MTC)T0(2)软件延时原理MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。我们设定一个初值为20的软件计数器和使T0定时50毫秒。这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入它的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减,然后判断它是否为零。为零表示秒已到。设定定时器需要定时50毫秒,故T0必须工作于方式。要求初值:TC=M-T*T0=216-50ms/1us=15536=3CBOH,程序如下
20、: WAIT: JNB TF0,WAIT1CLR TF0MOV TH0,#01HMOV TL0,#0B01HDJNZ R2,WAIT (3)中断原理本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,本设计采用电平触发方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回
21、,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。(4)红绿灯时间调整原理车流量检测传感器可对单片机控制系统提供实时数据,系统对所获数据进行统计处理。实现红绿灯控制必须解决对当前十字路口的交通状况的检测,并完成如下工作:1.输入量的采集,系统采集两个输入量,即两个方向的车流量;2.输出量的确认,即红绿灯时间值;3.设计将输入映照到输出的算法;4.决定被统计的车流量算法的处理,生成精确的输出控制信号。为了采集上述数据,本设计中用模拟的方法假设在十字路口的两侧共设置手动按键。分别检测两个方向的车流量,车流量检测不是最终目的,在每半个循环周期,系统会检测到两个方向的车流量数据,除以时
22、间,那么就可以得到单位时间的车流量,然后比较两个方向单位时间车流量多少,以确定下一次循环红绿灯时间,达到调整的目的。如在一次循环过后,检测到南北向车流量(设此时南北绿灯,东西红灯时间为20s)为100辆,东西向车流量(设此时东西绿灯,南北红灯时间为30s)为90辆,则单位时间车流量南北向和东西向的比例是:(100/20)/(90/30)=1.6,显然南北向交通严重,那么现在就可以把南北绿灯,东西红灯时间调长。上面的比例1.6还是一个确定数值,究竟多少为多,多少为少,这就必须设定算法,划定几个值域范围,分别对应到具体的调整时间上,系统就调用具体的输出值了。3.3子程序模块设计(1)按键扫描程序首
23、先程序不断扫描模式设置键,分别记为:S键,J键,F键对应/端口的3.6,P3.2,P3.7,低电平有效,按键顺序是指定的,若直接按F键,则为自动调整模式,然后进入下一程序;若先按S键,再按J键,F键则为设置时间模式,然后进入下一程序。程序的开始要判断是否有键按下,可以不断将S键值和F键值相与,与值为1则表示没有键按下,为0则表示有键按下,程序如下:K1: MOV C, P3.7 ANL C, P3.6 MOV 03H,C JB 03H, K1接下来要判断具体是哪个键,若为F键,则将自动标志位置1,进入下一程序,否则为S键,则表示设置南北绿灯时间,用R0存值,按1下加1,同时还需判断此时J键是否
24、按下,若按下,则表示南北绿灯时间设置完毕,开始设置东西绿灯时间,用R1存值,同样按1下加1 ,同时判断此时F键是否按下,若按下,则表示时间设置完毕,进入下一程序。在这个过程中,S,J键的计数是循环的,从初值20开始,加到40则循环回到20。如判断S键程序如下:CJNZ R0, #40, V1MOV R0, #20V1: INC R0(2)状态灯显示及判断在本设计中,实际控制的灯只有6个,即:东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯。定义I/O端口如下,其中均是低电平有效。H_RED BIT P2.1H_GREEN BIT P2.2H_YELLOW BIT P2.3L_RED
25、BIT P2.4L_GREEN BIT P2.5L_YELLOW BIT P2.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个状态码比较,若相同
26、则判断成功当前状态,再把下一状态的状态码送显P2即可。程序如下: MOV A, P2D0: CJNE A, #0DDH,D1 MOV P2, #0BDH MOV R4, #5 SJMP DULYD1: CJNE A, #0BDH,D2 MOV P2, #0EBH MOV 30H,R1 MOV R4,30H CLR 01HD2: CJNE A, #0EBH,D3 MOV P2, #0E7H JNB 00H, DULY2 LCALL RV SJMP DULY2(3)LED倒计时显示LED计时每1秒都要刷新1次,那么计时满1秒时就要将存储时间的工作寄存器R4减1,然后送入LED显示程序中显示。下面要将时间数据R4的十位,个位分开送显P1,P0端口,首先将R4除以10,整数即十位放在A中,余数即个位放在B中,设置7段LED显示数据的数据表,用数据指针寄存器DPTR指向数据表的首地址,再加上A中的偏移量,就可以指向十位数字,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1