《交通灯远程控制系统.doc》由会员分享,可在线阅读,更多相关《交通灯远程控制系统.doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、,交通灯远程控制系统 二零一三年四月交通灯远程控制控制系统摘要:要保证高效安全的交通秩序,除了制定一系列的交通规则,还必须通过一定的科技手段加以实现。本文在对目前交通控制进行深入分析的基础上,提出了基于单片机的交通控制系统设计方案。通过总体设计交通灯原理接线图,综合应用单片机原理、微机原理、微机接口技术等方面的知识,结合单片机仿真系统的使用方法,通过软硬件结合,使用89C51单片机来设计出符合要求的交通灯控制系统。完成由单片机89C51、发光二极管、LED数字显示器、开关、部分电阻及电容组成的交通灯控制系统。系统除基本交通灯功能外,还具有倒计时、显示时间设置、紧急情况处理、LED信息显示、时间
2、可以根据具体情况手动控制等功能。从而提高交通灯制系统的总体能力和综合应用能力。关键词:单片机 交通灯 闯红灯LED ,目录绪论1第1章方案选择及总体设计21.1 方案选择21.2 总体设计21.2.1 系统构成21.2.2功能概述3第2章系统硬件设计52.1.实现总体模型52.2. 89C51芯片介绍52.3. 工作原理:6第3章系统软件设计73.1 软件总体流程图73.2 每秒钟的设定83.3 1秒钟的方法8第4章系统调试分析及结果94.1 电路板实物的制作94.2 系统硬件调试94.3 系统软件调试94.4 系统总体调试10第5章总结11第6章谢辞12第7章参考文献13第8章附录:14附录
3、A:原理图14附录B: PCB版图15附录C:元件清单16附录D:单片机程序17,绪论近年来,随着国民经济的快速发展,车辆的增多,交通 拥挤和阻塞现象时常出现。交通拥塞已成为城市交通中迫切 需要解决的社会问题。而我国传统使用的定周期控制和各路 口各自的独立控制方法,在解决这些问题时效果并不是很 好。越来越多的证据表明,简单地扩大道路基础设施并不能 解决交通拥堵问题。这要求在现有道路条件下,提高交通控 制和管理水平,合理使用现有交通设施,充分发挥其能力, 更加灵活有效地提高道路的利用率。 本文采用51系列单片机为中心器件设计交通灯。交通灯是城市交通有序、安全、快速运行的重要保障,而保障交通灯信号
4、灯正常工作就成了保障交通有序、安全、快速运行的关键。交通灯远程控制系统的设计可以在专业技能方面得到一个很大的提高。同时在制板,画板,排布等方面可以得到全面的思维锻炼并熟练技巧。因此,研究交通远程控制系统,有着十分重要的意义。本课题主要从单片机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。设计主要由振荡器和时钟电路组成。设计方法有查阅法(通过手机和网络知识进行概述)、实验法(在实验室里做出单片机口的交通灯控制系统)、对比法(单片机口的交通灯控制系统技术与其他技术进行比较)。采用MCS-51系列单片机AT89C51为中心器件来设计交通灯控制电路,实现了能根据实际车流量通过8
5、051芯片的PI口设置红绿灯燃亮的时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示,三种颜色等交替点亮以及紧急情况下的中断处理功能。因此,研究交通远程控制系统,有着十分重要的意义。第1章 方案选择及总体设计1.1 方案选择能实现此电路的方法很多,我们根据实际将范围定在以下几个比较切合我们的方案中。第一种方案:采用数字电子技术实现。用基本的555芯片(利用单稳态实现定时),计数芯片(如74LS163,74LS160等)完成计时功能,控制电路芯片,译码芯片(如74LS138)等基本芯片,结合电阻,电容等基本元件,通过逻辑电路实现交通灯的功能。第二种方案:使用单片可编程来实现交通灯的功能。利用
6、单片机的外围扩展,显示电路构成基本硬件。然后编程实现对定时,控制,显示电路的控制,然后调试,完成设计。结合实际情况,根据毕业设计任务书的要求,经过讨论和论证,最终一致选用第二种方案的设计思路对交通灯控制系统进行设计。1.2 总体设计1.2.1 系统构成整个系统的构成以AT89C51单片机为核心,由I/O口扩展,LED数码管显示,紧急情况中断电路还有复位电路等组成。单片机作为整个硬件系统的核心,它既是协调整机工作的控制器,又是数据处理器。它由单片机、时钟电路、复位电路等组成。行车方向指示采用LED发光二极管,可有红、绿两种颜色指示放行与禁止,黄灯作为红绿转换的提示,形象直观。行人通行指示也同样采
7、用LED发光二极管,用红、绿两种颜色指示放行与禁止,黄灯作为红绿转换的提示,形象直观,简洁明了,更方便控制。按键控制台,可供警察在室内实时监视交通状况。通过按键可设置紧急情况发生时的交通灯状态控制人机界面非常友好。系统采用双数码管倒计时计数功能,最大显示数字99。友好的人机界面、灵活的控制方式、优化的物理结构以及丰富的功能是本设计的亮点。控制系统的总框图如图1示图1 控制系统的总框图1.2.2功能概述本设计由中断系统、单片机、LED数码显示模块和按键等构成。单片机是集成的IC芯片AT89C51单片机,只需根据实际选型。其他部分都需要根据应用要求和性能指标自行设计。 图2 实现实际电路注:以上电
8、路图为我们所设计的交通灯控制系统的具体电路图,在东南西北四个方向的LED指示灯,代表四个方位的交通信号灯,电路图的下方是单片机控制系统。复位,中断等子电路。1、本系统交通灯控制规则如下:(1)每个街口有左拐、右拐、直行及行人四种指示灯。每个灯有红、绿、黄三种颜色。自行车与汽车共用左拐、右拐和直行灯。(2)共有四种通行方式: 车辆南北直行、各路右拐,南北向行人通行。南北向通行时间为1分钟,各路右拐比直行滞后20秒钟开放。 南北向左拐、各路右拐,行人禁行。通行时间为20-分钟。 东西向直行、各路右拐,东西向行人通行。东西向通行时间为1分钟,各路右拐比直行滞后10秒钟开放。 东西向左拐、各路右拐。行
9、人禁行。通行时间为1分钟。(3)在通行结束前10秒钟,绿灯闪烁直至结束。2、有倒计时时间显示时间,红绿灯切换提前5秒亮黄灯提示。3、若交道口出现紧急情况,交警可手动控制:全路口车辆禁行、行人通行。紧急情况结束后再转成自动状态。第2章 系统硬件设计2.1.实现总体模型交通灯显示时间显示时间89C51系统处理图3 实现总体模型2.2. 89C51芯片介绍(1)89C51引脚图管脚图及各引脚功能介绍:输入/输出引脚:(1)P0.0P0.7 (39脚32脚)(2)P1.0P1.7 (1脚8脚)(3)P2.0P2.7 (26脚21脚)(4)P3.0P3.7 (10脚17脚) 图4 89C51管脚图XTA
10、L1(19脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。XTAL2(18脚): 接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。RST(9脚): 单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)PSEN(29脚): 在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号
11、。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。ALE/PROG(30脚):在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别89C51是
12、否在工作。EA/VPP(31脚): 当EA端输入高电平时,CPU从片内程序存储器地址0000H单元开始执行程序。当地址超出4KB时,将自动执行片外程序存储器的程序。当EA输入低电平时,CPU仅访问片外程序存储器。在对87C51EPROM编程时,此引脚用于施加编程电压VPP。2.3. 工作原理:(1)由89C51单片机的P1口显示红、绿、黄灯的亮灭情况;由P0口显示每个灯的亮灭时间。绿、黄、红时间分别为20秒、5秒、20秒循环,由89C51单片机的 P0口输出显示。(2)通过单片机的P2口中任两位来控制数码管的高低位显示,模拟接线接21、22脚,在实际电路焊接中是接了23、26即对应P2.2(十
13、位)、P2.5(个位)口来控制,软件中相应位也对应为P2.2和P2.5即可。(3)南北红,东西绿,红灯倒计时20秒后然后灭。(4)南北黄,东西黄,黄灯闪动5秒。(5)南北绿,东西红,绿灯倒计时20秒后,重新开始循环。第3章 系统软件设计硬件平台结构一旦确定,大的功能框架即形成。软件在硬件平台上构筑,完成各部分硬件的控制和协调。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。3.1 软件总体
14、流程图软件总体设计及流程图见图3-1,主要完成各部分的软件控制和协调。本系统主程序模块主要完成的工作是对系统的初始化,发送显示数据,同时对按键进行扫描,等待外部中断,以及根据所需要的功能进行相应的操作。其流程图如图5所示。图5 软件总体流程图主程序比较简单,初始化完成后,调用按键扫描程序,取得按键状态,并根据当前系统状态调用相应的子程序。3.2 每秒钟的设定延时方法可以有两种一中是利用MCS-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软件延时的方法。3.3 1秒钟的方法我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒这样每当T0到50毫秒时CPU就响应它的溢出
15、中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。 第4章 系统调试分析及结果因本设计本身要求有稳定性高、免维护、抗干扰能力强等功能,系统调试除了验证数据处理的精度,确保判断的准确性外,同时必须确认各项功能的正常运行。4.1 电路板实物的制作由于本电路硬件设计中,用单片机的两个IO口控制各路交通灯的循环点亮。用同一芯片单片机的P1口和P3口的高四位,来控制数码管的显示点亮。因此,在同一芯片中,所要接的线路比较多。在硬件的布局中,各位LED灯和数码管的布局比较固定化,集中分布在所控制的四个路口。因此,若采
16、用双面PCB板的话,这个电路的布线比较容易实现。但是,现实水平中做双面板会出现一些焊点接触不良而导致电路调试过程不易实现。因此,我们决定使用单面板布线。单片面板的布线需要牺牲本设计电路板一部分实际电路的美观。印制电路板的设计是以电路原理图为根据,实现电路设计者所需要的功能。印刷电路板的设计主要指版图设计,需要考虑外部连接的布局、内部电子元件的优化布局、金属连线和通孔的优化布局、电磁保护、热耗散等各种因素。优秀的版图设计可以节约生产成本,达到良好的电路性能和散热性能。简单的版图设计可以用手工实现,复杂的版图设计需要借助计算机辅助设计(CAD)实现。4.2 系统硬件调试 在设计过程中,我们使用了p
17、roteus硬件仿真软件对该设计的硬件电路进行了实物功能仿真,仿真效果良好。实物交通灯控制系统的PCB电路板焊接工作量非常大,电路安装完成后,首先进行检查,即确认电路无虚焊,无短路,无断路,集成元件安装是否正确,之后进行电路功能模块的分级调试,根据电路功能逐级进行:通行方式功能调试:包括对四种通行方式控制调试,行人和行车方向指示灯亮度和驱动电路调试;倒计时功能调试:数码管亮度调试;复位和紧急情况手动控制功能调试。 4.3 系统软件调试本系统的软件系统很大,选用一般的伟福仿真器对程序进行编写和调试。除了语法差错外,当确认程序没问题时,通过直接下载到单片机来调试。采取的是自下到上的调试方法,即单独
18、调试好每一个模块,然后再连接成一个完整的系统,最后完成一个完整的系统调试。4.4 系统总体调试系统做好后,进行系统的完整调试。主要任务是检验实现的功能及其效果并校正误差。测试一开始,我们就发现了系统出现了两个问题:一是有一部分交通灯亮度不够,所发出来的光非常的微弱以致于几乎感觉不到它的亮度;二是数码管不工作,没有时间显示。这与设计的要求完全不符。为了找出这个问题和解决方法,我们查找了电路的输出各部分的输出电平。发现了一个现象,我们采用的数码管是共阴极数码。而控制数码段显示的P1口输出的是高电平。经多方查阅资料,解决第二个问题可以有两个解决方法。其一,将硬件电路作修改,将数码管换成共阳极的数码管
19、。这样数码管就可以正常进行时间显示了。其二,修改程序,让控制数码管段码的P1输出的是低电平。若采用修改硬件电路的方法的话,硬件电路就得作变动。已经布好的线也必须有相应的变动,操作起来比较麻烦。所以,我们采用了第二种方法。修改了程序电路中的段码代码。再次调试,按照设计要求的指标,系统数码管电路部分基本能按照预先设定的要求来进行倒计时的显示。亮度要求也基本符合预先设想。接下来还有一个问题有待解决,交通灯亮度不足,以致于部分交通灯只能勉强看得出来它在亮而已。这明显不能满足设计要求。经多方检测,我们认为这是由于LED灯驱动能力不足引起的亮度弱问题。若要修正这个问题,那就得为LED灯增加驱动电路以提高电
20、路的驱动能力。要实现这一步骤必须对硬件电路进行一定的改动。LED灯的驱动电路可以用集成电路电路芯片来进行驱动。在初步方案中我们考虑要用集成电路来完成。但是由于客观方面的原因,将要参加工作离开学校没有制作实物的环境条件。因此,这部分改进只作了一个设想,并没有时间去付诸实施。但基本问题和解决问题的原理我们还是有一定的了解。第5章 总结在本次毕业设计作品交通灯控制电路的设计和制作中,我对电子设计方面有了很大的提高,同时也更加的了解十字路口交通灯的工作原理和实际应用过程。也对前一阶段的单片机课程学习和各种EDA设计软件的学习有了进一步的巩固和提高。对一些单片机的应用,延迟电路的设计应用和数码管的电路程
21、序的应用有了更多的理解。在设计的过程,先是设计好电路图后,开始到实验室进行电路焊接,最后到作品的调试,其中在整个过程中,遇到了很大的挑战和困难,不过最后在同学们的帮助下都得以一一解决。从开始数码管的选择错误到最后的电路调试,从开始的程序编写,到最后的软件测试,大家互相帮助,共同进步。同时对相关设计软件应用也有了进一步的了解和熟悉,也对电子设计的整体流程有了更多的理解。经过这次毕业设计,我学到了很多书本上没有的,比较实际、实用的东西,学会了怎样将理论知识运用到实际设计当中,对实验设备和设计软件的使用和分析问题解决问题的能力也有了很大的提高。同时也明白了电路焊接和作品调试时,需要更多的耐心。通过这
22、次实训课程设计,不仅可以在专业上可以学到更多的知识,同时也对平时的学习和工作中产生了影响,那就是认认真真的去完成每一件事。第6章 谢辞本次毕业设计已经接近尾声,作为一个本人第一个的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方。如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。 在这里首先要感谢我的导师叶香美老师。老师平日里工作繁忙,但在我做毕业设计的每个阶段,从外出实习到查阅资料,设计草案的确定和修改,中期检查等整个过程中都给予了我悉心的指导。除了敬佩叶老师的专业水平外,她的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。其
23、次要感谢大学一年多年来所有的老师,为我打下扎实的专业知识基础,最后还要感谢所有的同学们,正是因为有了他们的支持和鼓励,此次毕业设计才会顺利完成。第7章 参考文献1 蒋运茂. 电工仪表与测量M. 北京:中国劳动出版社, 1994.2 谢自美、阎树兰、赵去娣、朱如琪、罗杰.电子线路设计实验测试J.武汉:化中科,技大学出版社,2000第8章 附录:附录A:原理图附录B: PCB版图附录C:元件清单序号元件名称型号规格个数(个)1单片机AT89C5112集成块MAX23213按键SP-PB14发光二极管LED135三极管PNP46电源MC78L05CP17数码管DPY_7-SEG_DP48电解电容10
24、00uF19电解电容10uF110电容0.1uF111电解电容1uF412电解电容22uF113电容30pF214晶振12M115电感100uH116二极管1N4007418电阻10K119电阻3001220电阻1k1328接口DB9129插座8PIN130插座4PIN2插座2PIN1插座6PIN1附录D:单片机程序#includebit T_Flag;bit T_Flag1;sbit P20 = P20;sbit P21 = P21;sbit P22 = P22;sbit P23 = P23;sbit P24 = P24;sbit P25 = P25;sbit P26 = P26;sbit
25、P27 = P27;sbit S3 = P16;sbit S4 = P17;bit Z_flag = 1; bit S3_flag = 0;bit S4_flag = 0;sbit EW_red = P10; /东西红灯sbit EW_green = P12;/东西绿灯sbit EW_yellow = P11;/东西黄灯sbit NS_red = P13; /南北红灯sbit NS_green = P15;/南北绿灯sbit NS_yellow = P14;/南北黄灯unsigned char key,key_buf;code unsigned char disp_code=0x11,0xD7
26、,0x32,0x92,0xD4,0x98,0x18,0xD3,0x10,0x90;unsigned int disp_buf8,disp_p;void time0init(void)IT0 = 1;EX0 = 1;EA = 1;void Timer0() interrupt 1 TH0=0xf2; TL0=0xf9; T_Flag=1;main() unsigned char i; int sec;int j; int m; sec=20; j=0; TMOD=0x01; TH0=0x02; TL0=0x02; ET0=1; EA=1; TR0=1; time0init();while(1)
27、while(Z_flag) if(sec5)&(m=0) EW_yellow =1; NS_yellow =1; EW_red =0; EW_green =1; NS_red =1; NS_green =0; if(sec5)&(m=1) EW_yellow =1; NS_yellow =1;EW_red =1; EW_green =0;NS_red =0; NS_green =1; if(sec302) disp_p=0; sec-; T_Flag1=sec%2; disp_buf7=sec/10; disp_buf6=sec%10; disp_buf5=sec/10; disp_buf4=
28、sec%10; disp_buf3=sec/10; disp_buf2=sec%10; disp_buf1=sec/10; disp_buf0=sec%10; P20=1;P21=1;P22=1;P23=1;P24=1;P25=1; P0 = disp_codedisp_bufi;if (i=0)P20=0;P21=1;P22=1;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=1)P20=1;P21=0;P22=1;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=2)P20=1;P21=1;P22=0;P23=1;P24=1;P25=1;P26
29、=1;P27=1;if (i=3)P20=1;P21=1;P22=1;P23=0;P24=1;P25=1;P26=1;P27=1;if (i=4)P20=1;P21=1;P22=1;P23=1;P24=0;P25=1;P26=1;P27=1;if (i=5)P20=1;P21=1;P22=1;P23=1;P24=1;P25=0;P26=1;P27=1;if (i=6)P20=1;P21=1;P22=1;P23=1;P24=1;P25=1;P26=0;P27=1;if (i=7)P20=1;P21=1;P22=1;P23=1;P24=1;P25=1;P26=1;P27=0; /if /while
30、(Z_flag)if(S3 =0) S3_flag = 1; S4_flag = 0; sec =20; EW_yellow =1; NS_yellow =1; EW_red =1; EW_green =1; NS_red =1; NS_green =1;while(S3_flag) EW_green = 0; NS_red =0; if(T_Flag=1) T_Flag=0; i= (i+1)%8; disp_p+; if( disp_p302) disp_p=0; sec-; T_Flag1=sec%2; disp_buf7=sec/10; disp_buf6=sec%10; disp_b
31、uf5=sec/10; disp_buf4=sec%10; disp_buf3=sec/10; disp_buf2=sec%10; disp_buf1=sec/10; disp_buf0=sec%10; P20=1;P21=1;P22=1;P23=1;P24=1;P25=1; P0 = disp_codedisp_bufi;if (i=0)P20=0;P21=1;P22=1;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=1)P20=1;P21=0;P22=1;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=2)P20=1;P21=1;P22=0
32、;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=3)P20=1;P21=1;P22=1;P23=0;P24=1;P25=1;P26=1;P27=1;if (i=4)P20=1;P21=1;P22=1;P23=1;P24=0;P25=1;P26=1;P27=1;if (i=5)P20=1;P21=1;P22=1;P23=1;P24=1;P25=0;P26=1;P27=1;if (i=6)P20=1;P21=1;P22=1;P23=1;P24=1;P25=1;P26=0;P27=1;if (i=7)P20=1;P21=1;P22=1;P23=1;P24=1;P25=1;P
33、26=1;P27=0;if(sec=0)sec=20; /if ;if(S4 = 0)S3_flag = 0; S4_flag = 1; /while(S3_flag)if(S4 = 0)S4_flag = 1; sec =20; EW_yellow =1; NS_yellow =1; EW_red =1; EW_green =1; NS_red =1; NS_green =1; while(S4_flag) NS_green = 0; EW_red =0; if(T_Flag=1) T_Flag=0; i= (i+1)%8; disp_p+; if( disp_p302) disp_p=0;
34、 sec-; T_Flag1=sec%2; disp_buf7=sec/10; disp_buf6=sec%10; disp_buf5=sec/10;disp_buf4=sec%10; disp_buf3=sec/10; disp_buf2=sec%10; disp_buf1=sec/10; disp_buf0=sec%10; P20=1;P21=1;P22=1;P23=1;P24=1;P25=1; P0 = disp_codedisp_bufi;if (i=0)P20=0;P21=1;P22=1;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=1)P20=1;P21=
35、0;P22=1;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=2)P20=1;P21=1;P22=0;P23=1;P24=1;P25=1;P26=1;P27=1;if (i=3)P20=1;P21=1;P22=1;P23=0;P24=1;P25=1;P26=1;P27=1;if (i=4)P20=1;P21=1;P22=1;P23=1;P24=0;P25=1;P26=1;P27=1;if (i=5)P20=1;P21=1;P22=1;P23=1;P24=1;P25=0;P26=1;P27=1;if (i=6)P20=1;P21=1;P22=1;P23=1;P24=1;P25=1;P26=0;P27=1;if (i=7)P20=1;P21=1;P22=1;P23=1;P24=1;P25=1;P26=1;P27=0;if(sec=0)sec=20; /if if(S3 = 0)S4_flag = 0;S3_flag = 1; /while(S4_flag)/while/main void int1() interrupt 0 Z_flag = 0; P0=0;P2=0xff; EW_yellow =1; NS_yellow =1; EW_red =1; EW_green =1;NS_red =1; NS_green =1;
限制150内