基于单片机AT89C51的交通灯控制器的设计文档格式.docx
《基于单片机AT89C51的交通灯控制器的设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机AT89C51的交通灯控制器的设计文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
ABSTRACT
Inthispaper,AT89C51chipasthecorecontroldevicedesigntrafficlightcontroller,thesystemincludessmallestsingle-chipsystem,keyboard,digitaldisplay,trafficlightsdemonstrationsystem.Systemmainlyhasasidewalk,thebasicfunctionsoftrafficlights,countdown,emergencytreatment,accordingtothespecificcircumstancesofmanualcontrolandotherfunctions.AndconnectedviaAT89C51LEDdigitaltubeandrealizedtrafficlightschange,P1portsettingsofred,greenlightingtimefunctionisimplemented;
trafficlightcyclelight,countdown10secondsremainingyellowflashingwarning.Thesystemdevelopmentcycleisshort,highreliability,practicality,simpleoperation,easymaintenance,expansionandpowerful.Thissystemcombineshardwareandsoftware,ThroughtheProteusSoftwareSimulation,thebasicrealizationoftrafficlightssimulation.
Keywords:
AT89C51;
System;
Digitalpipe;
Trafficlightcontroller
绪论
随着人口的迅速增长,道路资源的有限性和交通工具爆炸性的发展,城市交通正面临着严峻考验,因此造成日益严重的交通问题,每天的交通拥堵成了家常便饭但又不得不忍受。
在这种情况下,与我国城市道路交通的实际情况相结合,开发出适合我们自身特点的智能信号灯控制系统已成为一个主要的任务。
一个好的交通灯控制系统,将给道路拥堵,违章行驶等方面给予技术创新。
随着电子技术的发展,采用单片机技术,能够智能管理交通灯,已成为目前广泛使用的方法。
在人类的生活,工作环境中,交通扮演着极其重要的角色,人们的出行与交通时时刻刻打着交道。
城市交通控制系统是基于城市交通信号控制技术为主导的发展,与汽车行业的发展并行。
在其发展的不同阶段,由于交通出现的各种矛盾,人们总是试图把各个历史阶段的最新科技成果应用到交通自动控制中,从而促进交通自动控制技术不断发展。
早在1850年,城市交叉路口处安全和拥堵问题引起人们的关注,全球第一个自动交通灯诞生,打开城市交通控制的序幕。
在1868年,英国工程师娜奕特在伦敦西部威斯敏斯特街口安装一个红色和绿色煤气照明灯,用来控制交叉路口的马车通行,但一次煤气爆炸事故致使交通信号灯消失了近半个世纪。
1914年,美国克利夫兰,纽约和芝加哥重新出现的交通信号灯,他们使用电动驱动,与现在意义的交通信号灯几乎是一样的。
随着时代的发展,各种运输方式和交通管制的需要,第一光名副其实的三色灯(红,黄,绿)出生于1918年。
它的周围是三色圆形投影机被安装在纽约市五号街一座高塔上,由于它的诞生,城市交通大大改善。
在近一个世纪的发展,道路交通信号控制系统经历了一个手动到自动,从固定到灵活配时,从无感应控制到有感应控制,从单点控制到干线控制,从区域控制到网络控制的长期过程。
交通网络是城市的动脉,是一个城市的生活经济水平,工业文明的象征。
交通关系到人民对财产,安全和时间相关的利益。
凭借优良科学的交通控制技术对资源物流和人们出行是非常有价值的,确保交通安全线的畅通,才能确保舒适的出行,物流按时到位,甚至是生命通道延伸。
为了确保安全,高效的交通秩序,除了制定一系列的交通规则,而且还必须通过一定的技术手段来实现。
随着单片机和传感器技术的迅速发展,自动检测领域发生了翻天覆地的变化,交通自动检测控制研究已经取得了显着的进步,必将以其优良的性能价格比,逐步取代传统的交通控制措施。
1.整体方案设计
1.1方案分析
交通灯一般设在城市道路的十字路口,可以分为东西方向(主干道)和南北方向(次干道),东西南北四个路口均设有有红绿黄3种灯和1个二位数码显示管。
在某一时刻规定只有一个方向可以通行,另一方向被禁行,状态经过一定的过渡时间,将通行方向和禁行方向相互对换。
其具体状态如下图所示。
(白色表示灭)。
通过具体的路口交通灯状态的演示分析我们可以把这四个状态归纳如图1:
图1交通灯状态图
·
东西方向(主干道)红灯灭,同时绿灯亮,南北方向(次干道)黄灯灭,同时红灯亮,倒计时显示60秒。
在此种状态下,东西方向(主干道)允许通行,南北方向(次干道)禁止通行。
东西方向(主干道)绿灯灭,同时黄灯闪烁,南北方向(次干道)红灯亮,倒计时显示10秒。
在此种状态下,除了正在通行中的车辆外,其他所有的车辆都应该等待状态转换。
南北方向(次干道)红灯灭,同时绿灯亮,东西方向(主干道)黄灯灭,同时红灯亮,倒计时50秒。
在此种状态下,东西方向(主干道)禁止通行,南北向允许通行。
南北方向(次干道)绿灯灭,同时黄灯闪烁,东西方向(主干道)红灯亮,倒计时10秒。
在此种状态下,除了正在通行中的车辆外,其他所有车辆都应该等待状态转换。
1.2方案确立
本设计系统以AT89C51单片机为控制核心,连接成最小系统,由倒计时显示模块、交通灯显示模块、按键开关控制模块组成。
软件部分使用的是C语言编程,由软件设置交通灯的初始时间,东西方向(主干道)通行60秒,南北方向(支干道)通行50秒,数码管采用动态显示,P0口送字形码,P2口送字位选通信号,通过单片机的P1口控制各种信号灯的点亮与熄灭,采用中断方式实现各按键的功能。
2.系统的硬件设计
2.1设计原理及方法
本设计采用模块化的分层次设计方法,以单片机AT89C51为控制核心,连接成最小系统,由倒计时显示模块、交通灯显示模块、按键开关控制模块等组成。
系统的总体框图如下所示。
图2交通灯控制器框图
本系统采用AT89C51单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块,4个数码管东西南北方向各一个构成倒计时显示模块,通过四个按键K0、K1、K2、K3模拟控制交通灯东西通行,南北通行,返回,紧急情况各个交通灯工作情况之间相互转化。
2.2AT89C51单片机最小系统
单片机最小系统一般有晶振、复位、电源、系统的输入控制、输出显示,以及其他外围模块(如通信、数据采集等)等模块组成。
2.2.1复位电路
单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。
当复位电平持续两个机器周期以上时复位有效。
复位电平的持续时间必须大于单片机的两个机器周期。
具体数值可以由RC电路计算出时间常数。
复位电路由手动复位和上电复位两部分组成。
(1)上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。
上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。
RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。
(2)手动复位:
手动复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
单片机复位期间不产生ALE和PSEN信号,即ALE=1和PSEN=1。
这表明单片机复位期间不会有任何取指操作。
图3单片机手动复位电路
2.2.2时钟电路
单片机系统里都有晶振,在单片机系统里晶振作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率。
单片机晶振的作用是为系统提供基本的时钟信号。
单片机的时钟电路由外接的一只晶振和两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。
单片机的时钟电路设计有两种方式,一种是内部时钟方式,一种是外部时钟方式。
在内部时钟方式下单片机内部的高增益、反相放大器通过XTAL1、XTAL2外接作为反馈元件的外部晶体管振荡器与电容组成的并联谐振回路构成一个稳定的自激振荡器,向内部时钟电路提供振荡时钟。
振荡器的频率主要取决于晶体的振荡频率。
外部时钟方式是把外部已有的时钟信号引入到单片机内。
此方式常用于多片单片机同时工作,以便于各单片机的同步。
一般要求外部信号高电平的持续时间大于20μs,且为频率低于12MHz的方波。
本设计采用内部时钟方式,单片机系统常用的晶振频率有6MHz、11.0592MHz、12MHz、本系统采用11.0592MHz晶振,电容选22pF或30pF均可。
图4单片机时钟电路
2.2.2EA脚的功能及接法
AT89C51单片机的EA/VPP(31脚)是内部和外部程序存储器的选择管脚。
当EA保持高电平时,单片机访问内部程序存储器;
当EA保持低电平时,则不管是否有内部程序存储器,只访问外部存储器。
由于现在单片机内部的flash容量都很大,因此基本都是从内部的存储器读取程序,即不需要外接ROM来存储程序,因此,EA脚必须接高电平。
图5单片机最小系统
2.3其它硬件模块介绍及连接
2.3.1倒计时显示模块
系统要求南北和东西方向的信号灯时间不一样,所以就利用单片机的P0口送出数据的段码,位选信号用P2口送出,用动态扫描的方法显示东西、南北的倒计时间。
7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。
当发光二极管导通时,相应的一个点或一个笔画发光。
控制相应的二极管导通,就能显示出各种字符。
本设计采用共阴数码管,需要接上470欧上拉电阻以提供足够大的电流来驱动数码管,数码管的每段的电流是约10毫安。
图6数码管显示模块
2.3.2交通灯显示模块
本系统利用单片机的P1口来驱动和控制各种信号灯的燃亮和燃亮时间,在实际中,交通灯的信号灯需要用高电压控制,在这里我们只是模拟一下它的控制信号,所以我们就只用单片机的信号引脚直接来控制发光二极管。
发光二极管是半导体二极管的一种,可以把电能转化成光能,常简写为LED。
发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。
当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。
不同的半导体材料中电子和空穴所处的能量状态不同。
当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。
常用的是发红光、绿光或黄光的二极管。
发光二极管的反向击穿电压约5伏。
它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。
图7交通灯模块
2.3.3按键控制模块
本系统设置了有4个键:
K0键,K1键,K2键,K3键。
每个按键一端接地,另一端接上二极管。
低电平有效,当按键按下端口接地,单片机捕获到低电平,从而得到相应的输入信息。
本系统采用了二极管做开关,是为了防止有一按键被按下3根线同时被低,中断无效。
二极管在正向电压作用下电阻很小,处于导通状态,相当于一只接通的开关;
在反向电压作用下,电阻很大,处于截止状态,如同一只断开的开关。
利用二极管的开关特性,可以组成各种逻辑电路。
程序开始运行先东西段通行、南北段禁止60s,后南北段通行、东西段禁止50s,依此循环。
系统分三种工作模式:
南北通行模式、东西通行模式、返回模式、紧急情况模式,并且通过四个按键K0、K1、K2、K3实现之间的相互转化。
图8按键控制模块
2.3.4电源模块
单片机工作时需要的+5V电压,所以在设计电源电路时,需要一个电子元件能提供+5V电压,由于78L05能够提供5V电压的三端稳压电源,78L05一脚为电源输入端,二脚为公共接地端,三脚即为我们所需要的+5V电压输出端.本系统采用典型的78L05提供电压的电路,即在78L05的1脚和公共接地端(即2脚)之间接入0.3μF的电容,在公共接地端和三脚+5V电压输出端之间接入0.1μF的电容.
图9电源模块
3.系统的软件设计
3.1系统相关参数计算
3.1.1T0的计数初值
T0的计数初值:
X=216-12*50*1000/12=15536=3CB0H
3.1.2倒计时显示的理论分析
倒计时显示的理论分析:
利用定时器中断,设TH0=TH1=(65536-50000)/256,即每0.05秒中断一次。
每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,便实现了倒计时的功能。
3.1.2交通灯状态显示的理论分析
状态灯显示的理论分析:
黄灯闪烁同样可以利用定时器中断。
每到第10次中断即过了10*0.05秒=0.5秒时,使黄灯标志位反置,即可让黄灯1秒闪烁一次。
3.2系统主程序设计
本系统采用AT89C51单片机实现交通灯的控制,程序的编写用C语言来完成。
系统控制程序可以分为若干模块:
初始化程序,按键开关控制程序,交通灯转换控制程序,LED数码管显示程序,按键消抖动程序,延时程序,中断服务子程序等。
系统相应的程序流程如图所示。
图10程序流程图
4.系统的Proteus软件仿真
4.1Proteus仿真图
交通灯控制系统的仿真是通过proteus软件实现的交通灯控制系统仿真效果,仿真如下图9所示:
图11仿真图
4.2Proteus仿真的结果分析
Proteus仿真实现东西方向和南北方向的十字路口的车辆相互交替通过,东西方向(主干道)每次通行时间设置为60秒、南北方向(次干道)通行时间设置为50秒。
同时可以实现红灯、黄灯、绿灯各状态之间的相互转换,黄灯闪烁时间设置为10秒,数码管可以准确进行倒计时显示。
按下东西放行键K0,东西方向(主干道)绿灯亮,南北方向(次干道)红灯亮;
按下南北放行键K1,南北方向(次干道)绿灯亮,东西方向(主干道)红灯亮;
无论在任何时候按下返回键K2,该控制系统都将返回到初始状态;
若遇紧急情况,按下紧急情况按键K3,东西南北方向都亮红灯,实现主干道和支干道全部禁止通行;
模拟了控制交通灯东西方向(主干道)通行,南北方向(次干道)通行,返回,紧急情况各个交通灯工作情况之间相互转化,实现了课程设计的要求。
结束语
通过这次毕业设计,使我受益匪浅。
使我在软硬件结合的综合运用能力上有了进一步的提升,对课堂上所学的单片机知识有了进一步的加深和巩固,在C语言的掌握方面也向前迈了一大步,在老师和同学的帮助下,提高了个人分析解决实际问题的综合能力以及协同合作的能力,同时还锻炼了我查阅资料的能力、动手能力、发现问题、解决问题的能力。
面对电脑搜索资料,一点点,一块块的电路慢慢拼成完整的电路经过一次次的反复修改终于设计出了属于自己的程序和电路,虽然还有诸多不足之处,不过使自己真正的体会到了探索事物的奥秘的快乐,同时自己也更深入的了解到了单片机的巨大的潜力,虽然有的时候可能遇到了一些困难,但是我最终解决了,我也会感觉到成功给我带来的喜悦,我知道我在专业知识上的掌握还是远远不够的,我还要更加努力的去学习,提高自己了实践能力。
参考文献
[1]杨素行.模拟电子技术[M].北京:
高等教育出版社.2006
[2] 余孟尝.数字电子技术[M].北京:
高等教育出版社.2006
[3]邱关源,罗先觉.电路[M].北京:
高等教育出版社.2011
[4]张毅刚.单片机原理及应用[M].北京:
[5]凌志浩.AT89C52单片机原理与接口技术[M].北京:
[6]郭循钊,邝帆.基于单片机的多功能交通灯控制系统设计与仿真实现[J].公路交通技术.2010
[7]刘日华,宋海.基于单片机的交通灯设计[J].科技致富向导.2012
[9]高文庆,吕英英.基于AT89C51单片机的数字秒表设计[J].电脑知识与技术.2012
[10]谭浩强著,C程序设计第三版[M].清华大学出版社.2006
[11]彭虎,周佩玲.微机原理与接口技术[M].电子工业出版社.2011
[12]GUOHaili.DesignofTrafficLightControlSystemBasedonProteusandSingle-chipComputer.JournalofHengshuiUniversity[J].2012
[13]TangJing-nan,QinShen.DevelopmentandExamplesof51Microcontroller'
sCLanguage[M].Posts&
TelecomPress.2008
致谢
本毕业设计在胡波和刘明老师的亲切关怀和悉心指导以及同学们的热心帮助下完成的。
感谢他们在此次毕业设计过程中给予我的悉心指导与各方面的帮助,他们给了我许多非常有益的建议和意见,使我在思路上得到了很大的启发,从中认识到了自己存在的不足,并且学到了很多非常宝贵的知识。
同时也要感谢系里其它同学和我的朋友在设计中给我提供的帮助和支持。
总的来说,这次设计给了我一个很好的锻炼机会,让我学到了很多东西,让我将自己所掌握的理论知识切实运用于工作和生活实践中,这不仅有利于加深对书本知识的理解和巩固,而且在很大程度上提高了我们在理论知识的指导下观察、分析和解决问题的能力。
最后,再次向所有帮助过我的老师、同学表示衷心的感谢!
谢谢你们!
附录:
程序源代码
/*#include<
REG51.H>
*/
#include<
AT89X51.H>
#defineucharunsignedchar
ucharcodeduanma[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
ucharcodeweima[4]={0x0D,0x0E,0x07,0x0B};
ucharcodedeng[4]={0xDE,0xDD,0xF3,0xEB};
charSN=50,WE=60;
charSN_G=50,WE_G=40,Y=10;
uchari,k=0,count=0;
voiddelayms(ucharms);
voidlight();
voidled();
sbitK0=P3^7;
sbitK1=P3^6;
sbitK2=P3^3;
sbitK3=P3^5;
/*程序初始化*/
voidinit(void)
{
/*12MHz*/
TMOD=0x01;
TH1=(65536-50000)/256;
/*0x3C*/
TL1=(65536-50000)%256;
/*0xB0*//*计50000个数,用时50ms*/
IT0=1;
/*外部中断0为边沿触发方式*/
ET0=1;
/*允许T0中断*/
TR0=1;
/*启动计数器*/
EA=1;
/*CPU开放总中断*/
EX0=1;
/*允许外部中断0中断,即允许响应端口P3^2(K4)中断*/
EX1=1;
/*允许外部中断1中断,即允许响应端口P3^3(K2)中断*/
}
/*延时ms毫秒*/
voiddelayms(ucharms)
{
uchari;
while(ms--)
{
for(i=0;
i<
200;
i++)
{}
}
}
/*中断0处理程序*/
voidint0(void)interrupt0
EA=0;
/*CPU禁止响应一切中断*/
P1=0xF6,P0=duanma[0];
/*东西南北方向均红灯亮,P0口输出0*/
while
(1)/*无条件循环*/
P2=weima[0],P0=duanma[(SN_G+Y)%10];
/*南北方向数码管显示可通行时间的个位*/
delayms(10);
/*延时*/
P2=weima[1],P0=duanma[(SN_G+Y)/10];
/*南北方向数码管显示可通行时间的十位*/
P2=weima[2],P0=duanma[(WE_G+Y)%10];
/*东西方向数码管显示可通行时间的个位*/
P2=weima[3],P0=duanma[(WE_G+Y)/10];
/*东西方向数码管显示可通行时间的十位*/
/*设置南北方向通行时间*/
if(K0==0)/*P3^7=0*/
{
delayms(20);
/*延时,把抖动的时间抛掉*/
if(K0==0)
{
while(K0==0)/*当松开K0开关时,跳出空循环,执行后面的程序*/
}
SN_G++;
/*南北方向绿灯时间+1*/
if(SN_G==100)
SN_G=0;
/*由于使用的是两位数码管,当南北方向绿灯时间加到100后清零*/
/*设置东西方向通行时间*/
if(K1==0)/*P3^6=0*/
if(K1==0)
while(K1==0)/*当松开K1开关时,跳出空循环,执行后面的程序*/