基于51单片机的智能十字路口的交通灯系统设计说明_第1页
基于51单片机的智能十字路口的交通灯系统设计说明_第2页
基于51单片机的智能十字路口的交通灯系统设计说明_第3页
基于51单片机的智能十字路口的交通灯系统设计说明_第4页
基于51单片机的智能十字路口的交通灯系统设计说明_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

23/23参赛编号:__________(主办方填)邮电大学第六届电子制作大赛作品技术报告交通灯(单片机)自动化学院大三公元2010年11月12日作品技术报告摘要随着社会的进步,科技的进步使人们的生活水平逐步提高,各种方便人们生活的自动控制系统进入了人们的生活,以单片机为核心的产品越来越多,这标志了自动控制系统成为了数字化时代的一员。本次设计为十字路口交通灯控制系统设计,红绿黄灯按指定时序按不同时间循环点亮,并可实现主从道模式和普通模式的检测与转换,智能、安全、高效的指挥交通秩序。本交通灯系统硬件部分以89C52单片机为核心控制器,在此基础上,采用开关按键控制,并用光电传感器来检测绿、黄灯亮时的车流量,当红灯亮时也可采集闯红灯的车辆数并实现闪灯和蜂鸣器报警,并把采集到的流量数据与违规车辆数通过按键依次显示在四位数码管上。实现了用传感器检测车流量或按键来控制A、B两模拟车道的红绿灯燃亮时间。软件部分它以单片机定时器、计数器为基础,采用C编程控制,实时检测车流量和违规现象,智能或手工切换车道模式。最后,为了能安全、稳定地给控制系统供电,本系统以LM2940CT—5为核心设计了5v稳压电源,大大提高了系统的安全性和稳定性。关键词:89C52开关按键光电传感器智能切换定时/计数器LM2940CT稳压电路作品介绍概述社会经济的发展,城市化和城镇化进程的加快造成道路交通堵塞问题日趋严重,如何进行合理的管理和调度而尽量减少交通堵塞现象目前成为我国很多地方特别是一些特大城市急需解决的问题,显然交通灯在其中起着不可缺少的作用。本设计就交通灯的控制方法进行了讨论,综合考虑性价比,实用性,以与合理性,并用软硬件实现,希望能给有关政府部门一些参考,更好的改善城市交通。作品介绍交通灯的控制方式很多,本系统主要是以89C52为核心来设计交通控制系统,单片机外接六个发光二极管交替发光来表示交通灯的红绿灯的交换,另外用四个数码管来倒计时各个发光二极管亮的时间,除此之外,本设计还采用个开关按钮来实现一系列扩展功能,如红绿灯亮的时间的长短的切换,复位,紧急情况下的检测,显示车流量和闯红灯的人数,为了合理的管理和调度,本设计增加了一个光电传感器来检测车流量,当车流量达到某个上限时,红绿灯的亮灭切换成主从模式,使主干道的通行时间增加,当车流量小于某个值时,红绿灯切换回普通模式(不分主从,通行时间一样),以此来减少交通堵塞的现象。光电传感器在本设计中还有另外一个作用就是用它来检测闯红灯的人,并由蜂鸣器发出报警声,达到警告的目的。工作原理1、原理概述本设计通过8051核心单片机控制整个系统,分为主控制器、传感器检测模块、按键检测模块、电源模块、复位电路、显示模块、报警模块等七大模块。拥有单独稳压电源供电,采用7个按键检测外部输入信号,如主从道和普通模式切换、违规报警,紧急情况下暂停、系统复位、车流量和违规车辆检测等。交通灯由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。绿灯亮时,准许车辆通行,黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。系统可通过光电传感器智能、实时检测车流量与违规现象,将采集到的数据传给8051控制核处理,并通过8051控制数码管显示交通灯计数值、车流量和违规车辆等。2、交通灯时序控制交通灯的燃亮时序如图一。本设计象征性的设置了两种路口模式,即普通模式和主从道模式,通过采集传感器检测的A,B车道流量控制两种模式的转换。设置A车道车流量上限值M,系统开始运行后,A车道按绿、黄、红循环点亮,B车道按红、绿、黄依次点亮,同时传感器记录A车道在绿、黄灯亮时的车流量,当A、B车道交通灯完成一次循环时,比较记录流量与设置值M比较,若大于等于M则A、B车道自动切换到主从模式,反之则保持原来的普通模式。车道模式A方向B方向绿黄红……..红绿黄……..普通20520……..20205………主从30520……30205……..图1交通灯燃亮时序图系统初始化(即系统上电或系统复位)后,A方向和B方向分别为绿灯和红灯,表示A、B方向的数码管都是从20秒或30秒开始减。A、B方向交通灯各自按图2顺序循环。黄灯黄灯红灯绿灯图二交通灯循环图交通灯定时原理与系统时钟(1)8051单片机采用部时钟方式,外接12M晶体振荡器。(2)交通灯计数时间间隔为1S,采用硬件定时和软件延时相结合的方式。硬件定时通过8051的定时器\计数器T0中断产生,首先设置50ms计数初值,当计数溢出并置标志位TR0为1时产生中断,进入中断程序后,再通过软件延时的方式设置20次循环标志,只有当计数器中断了20次即延时共1S时数码管才开始计数,以此实现1S的精确定时。具体控制过程原理系统上电复位,通过软件自动初始化系统。通过单片机复位引脚REST和8051的P30口检测复位信号,并传递给8051处理,实现复位。由8051单片机的定时器/计数器每秒钟向P1口送数据,通过该口控制红、绿、黄灯的点亮情况,通过8051的P0、P2口经过NPN三极管驱动数码管显示红、绿、黄灯的点亮时间。通过8051的P32口来控制系统的紧急情况,交通灯计数清零和全亮红灯。在复位状态下,通过P31口用按键手工切换两车道的模式,即主从道模式和普通模式。在紧急情况下,通过P35口用按键手工控制报警器报警和高亮蓝灯示警。采用光电传感器,通过单片机P21口检测绿、黄灯亮时的A车道车流量和红灯亮时的违规车辆,并通过8051处理,自动实现A、B两车道的模式,即红、绿灯燃亮时间。并可通过P36口和P20口按键分别控制车流量和闯红灯的情况。方案选择和设计(1)电源提供方案为了使模块稳定工作,需要有可靠的电源,我们考虑了三种方案:方案一:采用单片机控制模块提供电源。此方案的优点是使模块简明扼要,缺点是功率太小,发光二极管不够亮。方案二:采用电池供电。此方案的优点是模块简明扼要,缺点是电压不稳定,用了一段时间之后电压会减小。方案三:采用独立的稳压电源。此方案的优点是电源稳定可靠,且有各种成熟电路可以选择,缺点是使模块变得复杂。综上所述,我们选择第三种方案,如图3图35V电源电路图(2)显示方案该系统要求倒计时显示时间和状态灯的功能,我们自己增加了显示车流量和闯红灯的人数,我们考虑了两种方案:方案一:采用两个四位的数码管显示,此方案的优点是能直观的把车流量和闯红灯的人数还有倒计时显示出来,此方案的缺点是数码管引脚复杂,使电路复杂,给布线带来困难。方案二:采用一个四位数码管显示,此方案的优点是电路简单,不用外扩I/O口,也不用增加锁存器,减小成本,此方案的缺点是不能同时倒计时显示和车流量和闯红灯的人数的显示,同时还增加了软件的复杂度。综合考虑,我们选择了第二种方案,采用按键切换显示。(3)时钟方案为了提供可靠的时间,我们考虑了两种方案方案一:采用555定时器定时,此方案的优点是成本低,性能可靠,缺点是使电路变复杂,本组成员也不是很熟悉用法。方案二;采用一个12MHz的晶振和两个电容组成的时钟电路。此方案的优点是成本低,电路简单,性能可靠。考虑到我们平时接触的是采用晶振和MCS-51单片机来实现自激振荡,所以我们选择了第二种方案。(4)传感器选择方案方案一:自己制作,用光敏三极管和发光二极管以与电阻组成一光电开关传感器,方案优点是成本低,体积小。缺点是灵敏度较差、噪声抑制力很弱以与检测的不稳定性,将会影响到系统的整体性能。方案二:用一光电传感器成品,此方案优点是灵敏度高、稳定性好,缺点是成本高、体积相对较大。综合考虑我们选择第二种方案。6、本作品来自团队三人合作研究成果。作品功能、特色1、复位功能本设计装有复位键,当复位键按下之后,四位数码管全部显示0,发光二极管全部灭。2、正常指挥功能红、黄、绿灯分别以20、5、20秒的时间循环显示。当没有任何一个键按下的时候,系统以A红、B绿同时显示20秒,A黄5秒、B红5秒,A红15秒,B绿15秒,B黄25秒、A绿15秒的顺序显示在数码管上。3、紧急处理紧急时A、B两个方向上都亮红灯,数码管停止计数。4、普通模式和主从模式的切换功能普通模式就是按红、黄、绿灯分别显示20、5、20秒,主从模式是在主干道即A方向上绿灯30秒,黄灯5秒,红灯20秒,而从道上即B方向是红灯30秒,黄灯5秒,绿灯20秒。两种模式的切换有两种方式。第一种方式是静态切换,按下复位键,在这种情况下,按下切换键,可以进行主从/普通模式的切换。第二种方式是动态切换,光电传感器检测到的某个车道上的车流量大于某个值M(如20)时,单片机自动切换到主从模式,同时,当传感器检测到某个车道上的车流量小于某个值M时,单片机自动切换到普通模式。5、显示的切换在一般情况下,数码管显示倒计时,当按下切换键S1和S4时,数码管显示车流量和闯红灯的人数。6、蜂鸣器报警报警方式有两种,智能报警和手工报警方式。当某个干道上是红灯的时候,传感器检测到有车闯过去时,蜂鸣器智能报警、同时蓝色警示灯示警。其二,在紧急情况下当有车闯红灯时可手工按键报警。7、本设计的市场竞争力本设计采用的元器件相对较少,本着使用最少的元件,发挥最大的功能的理念,充分发挥每个元件的功能,使电路简单,成本低廉。还有更大的一个优势是采用传感器检测车流量,用车流量的多少来自动智能切换模式,充分利用空间资源,减少拥堵现象。五、作品结构1、硬件部分按键复位检测数码管驱动电路(NPN三极管)蜂鸣器与高亮LED报警模块12M时钟振荡电路A、B两组交通灯模块上电复位电路系统电源模块光电传感器流量检测模块4位共阳数码管显示模块8051控制器系统处理按键复位检测数码管驱动电路(NPN三极管)蜂鸣器与高亮LED报警模块12M时钟振荡电路A、B两组交通灯模块上电复位电路系统电源模块光电传感器流量检测模块4位共阳数码管显示模块8051控制器系统处理紧急情况检测按键检测模块紧急情况检测按键检测模块违规现象显示控制路口交通灯模式切换检测违规现象显示控制路口交通灯模式切换检测图3系统硬件结构框图2、系统实际总体电路图图4系统仿真电路3、局部电路图(1)89C52的控制模块(2)89C52的XTAL1和XTAL2接外部时钟电路,用于控制单片机的工作周期。(3)89C52的RST接按键复位电路,用于单片机的复位控制。(4)89C52的P2.0、P2.1、P3.0、P3.1、P3.4分别接开关S6、S5、S1、S2、S3、S4,用于数码管显示车流量、数码管显示闯红灯的人数、紧急情况下暂停、单片机复位、模式切换。(5)89C52的P2.2、P3.6和P3.7分别接传感器、蜂鸣器、闪光灯,用于检测车流量和闯红灯的人、报警。3.1.589C52的P1.0~P1.5外接六个发光二极管,具体作用通过编程实现。3.689C52的P1.0~P1.7接数码管的段选和上拉电阻,P2.2~P2.5接数码管的位选,动态显示数码管。(6)发光二极管电路图6P1.0~P1.5接六个发光二极管,由于89C52管脚的输出电流太大,所以外接0.3K的排阻限流,法官二极管共阳极接+5V电源。(7)三极管驱动数码管显示电路图7由于数码管显示交通灯的倒计时,东西方向,南北方向数码管显示一样,因为是参加比赛,为方便电路,仅接一个四位数码管显示,具体有程序实现。通过同名管脚上所加电平的高低来控制法官二极管是否点亮而显示不同数字,由于数码管显示需要大一点的电流,而单片机管脚输出的电流不足以驱动它发亮,所以在数码管的位选处接NPN型三极管驱动它。图8检测、报警电路P2.2和P3.6外接传感器和蜂鸣器,当传感器检测到有人闯红灯时蜂鸣器就以滴滴声报警。由于单片机的I/O口输出电流太小,不能驱动蜂鸣器发出声音,所以要接一个电流放大电路,三极管的基极经过限流电阻R3后由单片机的P3.6控制。(8)电源电路图9二、软件部分交通灯控制器的软件设计采用C语言编程实现,算法与程序结构主要有,子函数调用、程序初始化、程序的模块化、中断定时处理、按键检测判断、以与循环等。1、燃亮时序交通灯燃亮时序控制运用if判断语句,判断按键或程序初始化后设定的交通灯时序状态值选择哪个灯亮,再通过C语言的循环结构构和顺序结构循环控制灯亮的顺序。2、系统延时系统延时通过软延时的方法,运用C语言的循环结构for语句,通过调用延时子函数的方法产生约(1/12)*24*(N+110)us的延时,N为延时函数参数值。3、计数显示间隔1秒的精确定时本系统延时由于受到单片机资源的限制,主要采用单片机定时器定时和软延时相结合的方式。首先设置50ms计数初值为50000,当计数溢出并置标志位TR0为1时产生中断,进入中断程序后,再通过软件延时的方式设置20次循环标志,只有当计数器中断了20次即延时共1S时数码管才开始计数,以此实现1S的精确定时。4、显示判断通过设置显示类型的标志位,按键检测产生标志位变化,用if语句判断执行显示类型5、模式切换、复位、暂停与传感检测通过if语句判断检测到的外部输入信号,选择执行。6、程序控制流程图如下图。初始化初始化光电管为低平?电?电平平?倒计时完毕?开始设定初值按键事件检测与处理数码管显示程序处理绿灯倒计时检测车流量黄灯倒计时5秒红灯倒计时光电管低电平?平?倒计时完毕?结束YYNN检测闯红灯YYN7、系统程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#defineM20sbitfuwei=P3^0;sbitzhant=P3^2;sbitqieh=P3^1;sbitjianc=P3^5;sbitled=P2^2;sbitbeep=P2^3;sbits1=P3^6;//流量liulsbits4=P2^0;//闯红灯chuhsbitra=P1^0;sbitya=P1^1;sbitga=P1^2;sbitrb=P1^3;sbityb=P1^4;sbitgb=P1^5;sbitchuangan=P2^1;uintpp,cc,aa=20,bb=20,num,i,j,tt,dd,ee,ff,gg,m,n,kk,ll;uintnum1=0,num2=0,m1=1,m2=1,m3=1,n1=1,n2=1;uintshia,shib,gea,geb,shi1,ge1,shi2,ge2,shi3,ge3,shi4,ge4;uinthh1=1,hh2=1,hh3=1,hh4=1;uintm3,h1=1,h2=1,h3=1,h4=1;ucharcodetabd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//7段数码管段码表共阳ucharcodetabw[]={0x80,0x40,0x20,0x10};//位选表voiddelay(uint);voiddisplay(uchar,uchar,uchar,uchar);voidtraf(uchar,uchar,uchar,uchar,uchar,uchar);voidmain(){pp=5;m3=1;aa=0;bb=0;traf(1,1,1,1,1,1);ll=1;kk=1;n=1;m=1;dd=1;cc=1;tt=1;ff=0;gg=0;led=1;beep=1;/*************************************************/TMOD=0x01;//定时器设置TH0=(65536-50000)/256;TL0=(65536-50000)%256;//50ms初值EA=1;ET0=1;TR0=1;/************************************************/while(1){shia=aa/10;gea=aa%10;//交通灯计数参量shib=bb/10; geb=bb%10;shi1=num1/1000;ge1=(num1%1000)/100;shi2=((num1%1000)%100)/10; //A车道车流量计数参量ge2=((num1%1000)%100)%10;shi3=num2/1000;ge3=(num2%1000)/100;shi4=((num2%1000)%100)/10; //A车道闯红灯计数参量ge4=((num2%1000)%100)%10;/**********************************************/if(n1==1&&n2==1){display(shia,gea,shib,geb);}//调用显示函数,显示交通灯计数elseif(n1==0&&n2==1){display(shi1,ge1,shi2,ge2);}//调用显示函数,显示车流量计数elseif(n1==1&&n2==0){display(shi3,ge3,shi4,ge4);}//调用显示函数,显示闯红灯计数if(s1==0){EA=0;n1=0;}elseif(s1==1) //车流量数码管显示判断{n1=1; EA=1;}if(s4==0){n2=0;EA=0;}elseif(s4==1) //闯红灯数码管显示判断{n2=1;EA=1;}/*****************************************************/if(ga==0&&ra==1&&ya==1) //传感检测流量{if(chuangan==0){m1=0;}h1=0;if(h1==0&&h2==0&&h3==0){h4=0; h1=1; h2=1; h3=1; }}elseif(ga==1&&ra==1&&ya==0) //传感检测流量{if(chuangan==0){m3=0;}h2=0;}elseif(ra==0&&ga==1&&ya==1)//传感检测闯红灯{h3=0;if(chuangan==0){m2=0; beep=0;led=0;delay(20); }}if(chuangan==1&&m1==0){m1=1; num1++;}if(chuangan==1&&m2==0){m2=1; num2++;beep=1;led=1;delay(20);}/**************************************************/if(fuwei==0) //复位按键检测{ n=0;ET0=0;aa=0;bb=0;traf(1,1,1,1,1,1);tt=0;if(qieh==0) //复位状态下交通灯模式按键切换检测 {if(ll==1) gg=1; }}/********************************************/if(tt==0&&fuwei==1) //复位后恢复初始状态{ num1=0;num2=0;if(gg==1){ff=1;aa=30;bb=30;traf(1,1,0,0,1,1);tt=1;gg=0;ll=0;}else{ff=0;aa=20;bb=20;traf(1,1,0,0,1,1);tt=1;}}if(fuwei==1&&n==0) {ET0=1; n=1;}/*********************************************/if(h4==0){h4=1;if(num1>=M) //A车流量大于设定值M时自动切换为主从到模式{m3=0;}else{m3=1;}if(m3==1){aa=0;bb=0;traf(1,1,1,1,1,1); kk=1;if(kk==1){aa=20;bb=20;traf(1,1,0,0,1,1); } }if(m3==0){aa=0;bb=0;traf(1,1,1,1,1,1); kk=1;if(kk==1){aa=30;bb=30;traf(1,1,0,0,1,1); }}num1=0;}/*****************************************************/if(zhant==0)//紧急情况检测判断{m=0;if(ra==1&&ya==1&&ga==0&&rb==0&&yb==1&&gb==1){hh1=0;ra=0;ga=1;} //暂停时保存暂停前各个灯的状态参数elseif(ra==1&&ya==0&&ga==1&&rb==1&&yb==1&&gb==0){hh2=0;ra=0;ya=1;rb=0;gb=1;}elseif(ra==0&&ya==1&&ga==1&&rb==1&&yb==1&&gb==0){hh3=0;rb=0;gb=1;}elseif(ra==0&&ya==1&&ga==1&&rb==1&&yb==0&&gb==1){hh4=0;rb=0;yb=1;} if(jianc==0) //紧急时LED闪亮,蜂鸣器报警处理。按键手检测工或传感自动检测 ee=1; while(ee!=0) {beep=0;led=0;delay(2000);beep=1;led=1;delay(2000); if(jianc==1) ee=0; }ET0=0;}/**************************************************/if(zhant==1){if(m==0){m=1; if(hh1==0&&hh2==1&&hh3==1&&hh4==1) {hh1=1;ra=1;ga=0; } //恢复暂停前各个灯的状态 if(hh2==0&&hh1==1&&hh3==1&&hh4==1) {hh2=1;ra=1;ya=0;} if(hh3==0&&hh1==1&&hh2==1&&hh4==1) {hh3=1;rb=1;gb=0;} if(hh4==0&&hh1==1&&hh2==1&&hh3==1) {hh4=1;rb=1;yb=0;} ET0=1;}}}} /**************************************************/voidT0_time()interrupt1 //中断处理函数{TH0=(65536-50000)/256;TL0=(65536-50000)%256;//50ms初值num++;if(num==20){num=0; bb=bb-1; aa=aa-1;if(ff%2==0) //普通模式判断处理{if(aa!=0&&bb!=0&&cc==1)//A绿20,B红20{aa=20; bb=20;traf(1,1,0,0,1,1); cc=0; }elseif(aa==0&&bb==0&&dd==1)//A黄5,B绿20{aa=5;bb=20;traf(1,0,1,1,1,0);}else if(aa==0&&bb!=0)// A红20,B绿15 {aa=20;traf(0,1,1,1,1,0); }else if(aa!=0&&bb==0)//A红5,B黄5 {bb=5;traf(0,1,1,1,0,1); dd=0; }if(aa==0&&bb==0&&dd==0)//回到初始状态A绿20,B红20 {aa=20;bb=20;traf(1,1,0,0,1,1); dd=1; } }elseif(ff%2==1) //交通灯主从道模式判断{if(aa!=0&&bb!=0&&cc==1)//A绿30,B红30{aa=30; bb=30;traf(1,1,0,0,1,1); cc=0; }elseif(aa==0&&bb==0&&dd==1)//A黄5,B绿20{aa=5;bb=20;traf(1,0,1,1,1,0);}else if(aa==0&&bb!=0)// A红20,B绿15 {aa=20;traf(0,1,1,1,1,0); }else if(aa!=0&&bb==0)//A红5,B黄5 {bb=5;traf(0,1,1,1,0,1); dd=0; }if(aa==0&&bb==0&&dd==0)//回到初始状态A绿30,B红30 {aa=30;bb=30;traf(1,1,0,0,1,1); dd=1; } }}}/************************************************/voiddelay(uintx) //数码管扫描延时{ for(i=x;i>0;i--) for(j=110;j>0;j--); }voidtraf(ucharx1,ucharx2,ucharx3,ucharx4,uch

温馨提示

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

评论

0/150

提交评论