交通信号灯控制系统教材_第1页
交通信号灯控制系统教材_第2页
交通信号灯控制系统教材_第3页
交通信号灯控制系统教材_第4页
交通信号灯控制系统教材_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山西大学工程学院第页1社会需求目前在世界范围内,一个以微电子技术、计算机和通信技术为先导的,以信息技术和信息产业为中心的信息革命方兴未艾。为使我国尽快实现经济信息化,赶上发达国家水平,必须加速发展我国的信息技术和信息产业。而计算机技术怎样与实际应用更有效的结合并有效的发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。本文主要从单片机的应用上来实现十字路口交通灯的管理,用以控制过往车辆的正常运作。2设计目的本设计首先从定时控制着手,解决交叉口交通控制过程中存在的问题,但是定时控制信号周期固定,不能根据实际的交通流状况随时调整信号控制参数,因此造成很多不必要的时间等待和资源浪费。对左转车辆较少的单交叉口一般采用有固定左转相位的定时控制方法,此信号控制中的左转车辆通行对直行车辆影响很大。行人过街信号与上游交叉口的不协调导致车辆通过上游交叉口后遇到行人过街而再次停车。基于上述交叉口信号控制存在的问题,本设计进行了如下研究:①介绍了常用定时信号控制算法和感应信号控制的基本工作原理,分析了传统定时控制的优越性和局限性。②设计了一种自动信号控制方法,这种方法能使交叉口根据实际交通情况选择合理的定时信号配时方案,不过这个需要配备额外的感应器。本设计将要完成红灯停,绿灯行,黄灯停3S的操作,并且如当一道有车而另一道无车是,交通灯控制系统能立即让有车的车道放行,单人行道上人数较多时,智能转换交通灯状态,行人优先通过,当有紧急车辆(如110、112、119等急救车)要求通过时,此系统应能禁止普通车辆通行,路口的信号灯全部变红,以便让紧急车辆通过。假定紧急车辆通过时间为2s,紧急车辆通过后,交通灯恢复先前状态。3设计思路及框图3.1交通灯设计首先了解实际交通灯的变化情况和规律。设有一个南北(SN)向和东西(WE)向的十字路口,两方向各有两组相同交通控制信号灯,每组各有四盏信号灯,分别为直行信号灯(S)、左拐信号灯(L)、红灯(R)和黄灯(Y),交通控制信号灯布置如图1所示。根据交通流量不同,交通信号灯的控制可实现手动、自动两种控制。平时使用自动控制,高峰区可使用传感器智能化控制。智能控制时,传感器通过检测道路交通情况对交通信号灯进行实时控制;自动控制时,交通信号灯控制规律用图2状态转换图来描述。图1红绿灯显示系统框图3.2交通灯定时控制图2红绿灯系统控制流程图定时控制系统控制流程图如上图2,初始状态0为SN直行WE红灯,然后转状态1为SN黄灯WE红灯。过一段时间后,转状态2为SN左拐WE红灯。再转状态3,SN黄灯WE红灯。过一段时间后转状态4,SN红灯WE直行。然后状态4,SN红灯WE直行。状态5为SN红灯WE黄灯。状态6为SN红灯WE左拐。状态7为SN红灯WE黄灯。又循环至状态0,重复循环上述状态。3.3传感器智能控制图3磁检测器方框图交通灯在采用智能化控制时,采用磁感应车辆检测器.这种环形线圈检测器是传统的交通检测器,是目前世界上用量最大的一种检测设备。这些埋设在道路表面下的线圈可以检测到车辆通过时的电磁变化进而精确地算出交通流量。交通流量是交通统计和交通规划的基本数据,通过这些检测结果可以用来计算占用率(表征交通密度),在使用双线圈模式时还可以提供速度、车辆行驶方向、车型分类等数据,这些数据对于交通管理和统计是极为重要的,可通过分析这些数据,然后通过外部中断动态控制交通灯的状态,实现道路交通灯的智能化控制,让交通灯根据实际情况转换状态。原理框图如上图图3所示。对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以可以用一个I/O控制相同的两灯,因此,采用单片机内部的I/O口上的P0口中的8个引脚即可来控制16个信号灯。通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。通过定时器精确延时送显,在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。通过添加感应器检测车流量、人行道情况通过外部中断动态调节人、车流量,使交通更加智能,提高道路运行速率。4硬件电路设计4.1单片机电源电路图4电源电路如上图图4所示是电源电路,这里开关用的双路开关,双路开关并联能更好的确保给后级提供更大电流。电容C4、C5,都是隔离断开直流的,在这里添加了一个发光二极管指示灯,在我们打开开关的时候,这个二极管会亮,下面的R12为限流电阻,给发光二极管提供合适的电流。4.2单片机复位电路单片机的复位操作有上电自动复位和手动按键复位两种方式。本次设计采用手动按键复位设计,如下图5所示。图5按键复位电路当这个电路处于稳态时,电容起到隔离直流的作用,隔离了+5V,而左侧的复位按键是弹起状态,下边部分电路就没有电压差的产生,所以按键和电容C1以下部分的电位都是和GND相等的。按键复位有2个过程,按下按键之前,RST的电压是0V,当按下按键后电路导通,同时电容也会在瞬间进行放电,会处于高电平复位状态。当松开按键后,先是电容充电,然后电流逐渐减小直到RST电压变0V的过程。按下按键的瞬间,电容两端的5V电压会被直接接通,此刻会有一个瞬间的大电流冲击,会在局部范围内产生电磁干扰,为了抑制这个大电流所引起的干扰,在电容放电回路中串入一个18欧的电阻来限流。4.3交通LED灯及外围驱动电路图6交通LED灯电路将NS道上的两个同色灯连在一起,WS道上的同色灯也彼此相连(此处用发光二极管模拟实际的交通灯,各发光二极管的阳极通过保护电阻接到+5v的电源上,发光二极管的阴极接到单片机的P0口)用AT89C51单片机的P0.0—P0.7共8根输出线控制各色交通灯的点亮与熄灭;为了更加直观的显示红绿灯的情况,用了共阳极数码管显示倒计时,数码管显示有动态扫描和静态显示,由于静态显示需要占用过多的IO口,这里用动态扫描,用P1控制数码管的断选信号端,P2.6、P2.7控制数码管的位选信号端,可以显示出每个灯的倒计时。紧急车辆通过时,采用外部触发按键实时中断方式进行处理。根据该系统的功能要求及所用元器件,设计硬件电路,电路原理图如图6所示。由于单片机的输出电流有限,需要用到芯片驱动LED,使LED可以正常使用,这里使用74LS245,74LS245是一个双向缓冲器,引脚AB是方向引脚,这个引脚为高电平的时候,右侧所有的电压都等于左侧对应编号的电压,所以这里AB引脚接的+5V电源,即高电平。图中还有排阻RP1做为上拉电阻。引脚OE为输出使能端,低电平有效。在74LS245输出端有R3~R10的限流电阻,给LED灯提供恰当的电流。在LED的阳极接有PNP三极管,可以通过单片的P2.5控制所有的LED的通断,只有P2.5端电平为高时LED才能正常工作,通过单片机的P0口控制LED的状态。数码管的显示也需要大电流,这里外接上拉电阻可以提供足够的电流,原理图中用了排阻RP2,可以使数码管正常工作。交通LED灯驱动电路如图7所示。图7交通LED灯驱动电路4.4按键控制电路图8按键控制LED电路图智能化控制中使用到传感器,传感器采集到的数据通过系统分析,然后反馈到单片机外部中断,通过中断程序选择合适的处理程序。整个交通灯控制系统通过按键模拟控制LED的状态,SW1控制LED是定时循环还是智能控制,SW2控制LED灯是顺序切换状态还是手动选择LED状态。SW1按下触发外部中断0进去中断程序,在中断程序中可以通过查询方式判断P3.7是否按下,如果检测到P3.7为低电平则SW2按键按下,系统进入只能控制LED状态模式,单片机通过检测P2.0~P2.3的电平状况确定LED灯要显示的状态,例如:若单片机检测到端口P2.0电平为低,则要求交通灯要WE方向左拐,系统调用左拐子程序,使单片机控制LED灯先NS黄灯闪3下,然后NS红灯亮,WE左拐指示灯变绿。如果系统监测到P3.7为高电平则SW2弹起,系统进入只能顺序切换模式,单片机检测P2.4的电平情况,检测到一次说明按键按下一次,交通的按照定时方式的顺序变换状态,使交通灯稳定顺次执行。如果遇到十字路口发生交通事故,可以触发紧急逼停按键,这样四个方向都为红绿灯,等突发情况处理完毕后,然后根据实际情况选择合适的处理程序。这样可以根据实际的车、人流量动态调节交通灯,智能解决各种突发情况,按键控制电路如图8所示。按键消抖有两种方式:硬件消抖和软件消抖,硬件消抖需要引进RS触发器或者单稳态电路,这需要额外的硬件开支,而软件消抖只需要用延时函数就可以完成,因此这里选择软件消抖。4.5单片机主电路采用这款芯片及克服了采用8031需要添加外部外部程序存储器导致电路复杂的缺点,又克服了采用8751导致电路制作成本高的缺点,AT89C51单片机芯片具有以下特性:1)指令集合芯片引脚与Intel公司的8051兼容;2)4KB片内在系统可编程FLASH程序存储器;3)时钟频率为0~33MHZ;4)128字节片内随机读写存储器(RAM);5)6个中断源,2级优先级;6)2个16位定时/记数器;图9单片机引脚结构图4.6整体电路图设计图10AT89C21单片机交通灯控制电路本次设计采用AT89C51单片机,其中P0.0—P0.8共8根输出线控制各色交通灯的点亮与熄灭,通过外部中断0控制交通灯的切换方式,端口P3.7控制在智能模式下是顺次转换状态还是动态选择,在顺序转换模式下P2.4控制交通灯的状态转换。在动态模式下,根据传感器分析数据结果,通过P2.0~P2.3控制交通的的各种状态。P1和P2.7、P2.6控制数码管的显示,可以直观的看到交通灯的状态。在传感器检测某一方向车流量过多,或者人行道上滞留行人过多,或有紧急车辆通过时,采用外部触发中断实时中断方式进行处理,这时可按下SW1、SW2两按键,然后智能选择交通灯的状态,选择合适的交通灯,让滞留过多的方向通过时间长点,让道路更加通畅。上图10为整个交通灯控制系统的整体电路图。5软件设计5.1系统程序流程图设计图11交通控制系统程序流程图根据硬件电路原理图,并按系统的功能画出程序流程图。由于此系统较为简单,故采用自上而下的设计方法,进行程序设计;对传感器分析的数据处理,采用中断的方法,由中断选择合适的处理程序处理,在传感器不工作的时候,可以返回主程序执行。程序流程如下图11所示。设计中断处理程序时,最主要的地方是如何保护进入中断前的状态(信号灯、P口、单片机寄存器的状态),使得中断程序执行完毕后能问到交通灯中断前的状态。除了保护累加器ACC、标志寄存器PSW外,还要注意主程序中的延时程序和中断处理程序中的延时程序不能混用。5.2系统程序设计如下所示为整个系统控制程序:#include<reg52.h>unsignedintcount=0; //延时计数unsignedintcount1=0; //按键次数计数unsignedcharcount2=0; //数码管显示数值unsignedcharcount3=0; //定时1秒计数unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82, 0xF8,0x80,0x90,0x7f};//共阳极数码管显示编码unsignedchardisdata[4];sbitNSL=P0^0; //NS左拐指示灯sbitNSS=P0^1; //NS直行指示灯sbitNSR=P0^2; //NS红灯指示灯sbitNSY=P0^3; //NS黄灯指示灯sbitWEY=P0^4; //WE黄灯指示灯sbitWER=P0^5; //WE红灯指示灯sbitWES=P0^6; //WE直行指示灯sbitWEL=P0^7; //WE左拐指示灯sbitP2_5=P2^5; //控制所有LED的灭sbitP2_6=P2^6; //数码管位选端sbitP2_7=P2^7; //数码管位选端sbitKey_1=P2^4; //手动切换LED灯状态sbitKey_2=P2^3; //选择NS直行sbitKey_3=P2^2; //选择WE直行sbitKey_4=P2^1; //选择NS左拐sbitKey_5=P2^0; //选择WE左拐sbitKey_6=P3^7; //选择顺序、随机切换sbitKey_7=P3^6;//突发情况,四个方向全部红灯voidTime0_Int() //定时器0初始化{ TMOD=0x01;TR0=1;EA=1; ET0=1;IT0=0;EX0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256;}voidDelay(unsignedintm) //延时m毫秒{ unsignedinti,j; for(i=m;i>0;i--) for(j=110;j>0;j--);}voidNS_stra() //NS直行,WE红灯{ NSL=1;NSS=0;NSR=1;NSY=1; WEL=1;WES=1;WER=0;WEY=1;}voidNS_turn() //NS左拐,WE红灯{ NSL=0;NSS=1;NSR=1;NSY=1; WEL=1;WES=1;WER=0;WEY=1;}voidNS_stop() //NS黄灯,WE红灯{ NSL=1;NSS=1;NSR=1;NSY=0; WEL=1;WES=1;WER=0;WEY=1;}voidWE_stra() //WE直行,NS红灯{ NSL=1;NSS=1;NSR=0;NSY=1; WEL=1;WES=0;WER=1;WEY=1;}voidWE_turn() //WE左拐,NS红灯{ NSL=1;NSS=1;NSR=0;NSY=1; WEL=0;WES=1;WER=1;WEY=1;}voidWE_stop() //WE黄灯,NS红灯{ NSL=1;NSS=1;NSR=0;NSY=1; WEL=1;WES=1;WER=1;WEY=0;}voidOpera_NS_stra() //手动选择NS直行{ if(Key_2==0) { Delay(10); if(Key_2==0) { WE_stop(); Delay(3000); NS_stra(); } while(Key_2==0); }}voidOpera_WE_stra() //手动选择WE直行{ if(Key_3==0) { Delay(10); if(Key_3==0) { NS_stop(); Delay(3000); WE_stra(); } while(Key_3==0); }}voidOpera_NS_turn() //手动选择NS左拐{ if(Key_4==0) { Delay(10); if(Key_4==0) { WE_stop(); Delay(3000); NS_turn(); } while(Key_4==0); }}voidOpera_WE_turn() //手动选择WE左拐{ if(Key_5==0) { Delay(10); if(Key_5==0) { NS_stop(); Delay(3000); WE_turn(); } while(Key_5==0); }}voidOpera_Red() //手动选择WE左拐{ if(Key_7==0) { Delay(10); if(Key_7==0) { NSY=0;WEY=0; Delay(3000); WER=0;NSR=0; } while(Key_7==0); }}voidChoose() //数码管显示初值判断程序{ if(count==10||count==470||count==930||count==1390) { count2=20; //判断为绿灯,数码管倒计时初值为20秒 } if(count==410||count==870||count==1330||count==1790) { count2=3; //判断为黄灯,数码管倒计时初值为3秒 } if(count3==20) //定时1秒,每隔一秒倒计时减一 { count2--; count3=0; }} voidLedshow() //数码管显示程序{ disdata[0]=(count2%10); //十位显示的数值 disdata[1]=(count2/10); //个位显示的数值 P2_6=0;P2_7=1;P1=0x00; P1=table[disdata[0]]; Delay(10); P2_7=0;P2_6=1;P1=0x00; P1=table[disdata[1]]; Delay(10);}voidAuto() //自动转换LED灯状态,绿灯20秒,黄灯3秒{ if(count>10&&count<410) //NS直行指示灯显示20秒,数码管倒计时显示 { NS_stra();Ledshow(); } if(count>410&&count<470)//NS黄色指示灯显示3秒,数码管倒计时显示 { NS_stop();Ledshow(); } if(count>470&&count<870) //NS左拐指示灯显示20秒,数码管倒计时显示 { NS_turn();Ledshow(); } if(count>870&&count<930)//NS黄色指示灯显示3秒,数码管倒计时显示 { NS_stop();Ledshow(); } if(count>930&&count<1330) //WE直行指示灯显示20秒,数码管倒计时显示 { WE_stra();Ledshow(); } if(count>1330&&count<1390) //WE黄色指示灯显示3秒,数码管倒计时显示 { WE_stop();Ledshow(); } if(count>1390&&count<1790) //WE左拐指示灯显示20秒,数码管倒计时显示 { WE_turn();Ledshow(); } if(count>1790&&count<1850) //WE黄色指示灯显示3秒,数码管倒计时显示 { WE_stop();Ledshow(); } if(count>1850) { count=0; }}voidmain() //主函数{ Time0_Int(); P2_5=1; while(1) { Auto(); Choose(); }}voidTime0()interrupt1 //定时50ms{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; count++; count3++;}voidInterrput0()interrupt0 //外部中断0,用按键手动切换LED灯状态{ while(Key_6==0) //判断是顺序,随机显示 { Delay(10); while(Key_6==0) { Opera_NS_stra(); Opera_WE_stra(); Opera_NS_turn(); Opera_WE_turn();Opera_Red(); } } P2_7=0;P2_6=0; if(Key_1==0) //检测按键按下次数 { Delay(10); if(Key_1==0) { count1++; } while(Key_1==0); } switch(count1) //根据按下的次数选择显示状态 { case1:NS_stra();break; case2:NS_stop();break; case3:NS_turn();break; case4:NS_stop();break; case5:WE_stra();break; case6:WE_stop();break; case7:count1=1;break; de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论