十字路口交通灯控制系统设计报告.doc
课 程 设 计 设计名称 十字路口交通灯控制系统 学年学期 2015-2016第二学期 课程名称 单片机原理及应用 专业年级 姓 名 学 号 提交日期 成 绩 指导教师 水利与建筑工程学院十字路口交通灯控制系统摘要:交通的发达,标志着城市的发达,相对交通的管理则显得越来越重要。交通灯是城市交通中的重要指挥系统,它与人们日常生活密切相关随着人们生活水平的提高,对交通管制也提出了更高的要求,因此提供一个可靠、安全、便捷的多功能交通灯控制系统有着现实的必要性。对于复杂的城市交通系统,为了确保安全,保证正常的交通秩序,十字路口的信号控制必需按照一定的规律变化,以便于车辆行人能顺利地通过十字路口。考虑到单片机具有物美价廉、功能强、使用方便灵活、可靠性高等特点,拟采用MCS - 51系列的单片机来实现十字路口交通信号灯的控制。 正常情况下,十字路口的红绿灯应交替变换,考虑紧急情况下,如有救护车或警车到来时,应优先让其通过。另外,单片机课程设计是我们的必修课程。通过交通灯模拟系统的设计可以进一步认识单片机在控制系统中的重要性。在完成理论学习和必要的实验后,掌握了单片机的基本原理和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。交通灯模拟系统的课程设计既让学生巩固了课本学到的理论,还让学生学习了单片机硬件电路设计和用户程序设计的整个过程,同时学习了查阅资料、参考资料的方法。单片机的课程设计主要是通过学生独立设计方案并自己编写和调试用户程序,来加深对单片机的认识,充分发挥创新能力。关键词:交通灯、8051单片机、中断、扩展ROM第一章 设计目的及要求11设计目的单片机原理及应用课程设计是一次重要的综合性实践活动。该课程设计的主要目的是通过实践活动,巩固和加深单片机原理及应用课程中所学的理论知识,提高实验动手能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计水平,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。1.2设计要求1.2.1课程设计要求能熟练运用51单片机实现硬件与软件结合完成电子产品的设计,把理论真正运用于实践,会用Keil等软件编程调试运行,熟悉应用Proteus软件仿真,并会用keil软件熟练编写和修改程序。强化编程练习,中断方式的区别等等。学习单片机应用系统简单I/O接口的设计,学习数据输入/输出程序的编制方法,学习8051内部计数器的使用和编程方法,掌握外部中断技术的基本使用方法和中断处理程序的编写方法。1.2.2基本设计功能要求系统设计功能:复杂的十字路口交通信号灯控制系统,分东西道和南北道,设东西道为A道,南北道为B道。系统设计规定:A道放行时间为60s,B道放行时间为60s;绿灯放行,红灯停止;绿灯转红灯时,相应道路的黄灯亮2s。当一道有车而另一道无车时,交通灯控制系统能立即让有车的车道放行。当有紧急车辆(如110、112、119等急救车)要求通过时,此系统应能禁止普通车辆通行,路口的信号灯全部变红,以便让紧急车辆通过。假定紧急车辆通过时间为5s,紧急车辆通过后,交通灯恢复先前状态。第二章 系统方案设计2.1设计任务分析及方案设计本系统采用单片机作为核心处理部件,I/O量量均为开关量,而紧急车辆通过时,采用实时中断方式进行控制。图2-1 总体设计图2.1.2、硬件总体设计系统以常用的8051单片机作为核心处理部件,2732A作为程序存储器,红、绿、黄灯各四个作为交通指示灯,反应A道、B道有无车辆的传感器两个(这两个传感器在仿真时可用开关控制高低电平表示),处理紧急车辆的中断按钮一个。将A道上的两个同色灯连在一起,B道上的同色灯也彼此相连(此处用发光二极管模拟实际的交通灯,各发光二极管的阳极通过保护电阻接到+5V的电源上,发光二极管的阴极接到单片机的P1口);由8051单片机的片P1.0p1.5共六根输出线控制各色交通灯的点亮与熄灭;A、B道上有无车辆的信号输入给P1.6、P1.7口;紧急车辆通过时,采用外部中断触发按键实时中断方式进行处理。2.1.3软件总体设计根据硬件电路原理图,并按系统的功能画出程序流程。由于此系统较为简单,故采用自上而下的设计方法,进行程序设计;对紧急车辆通过的处理,则采用中断的方法,由中断处理程序处理。说明:P1.6=0,表示A道有车通过;P1.6=1,表示A道无车通过。设计中断处理程序时,最重要的地方是如何保护进入中断前的状态(信号灯、P口、单片机寄存器的状态),使得中断程序执行完毕后能回到交通灯中断前的状态。除了保护累加器ACC、标志寄存器PSW外,还要注意主程序和中断处理程序中的延时程序不能混用。第三章 系统硬件设计3.1、时钟部分电路设计时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。本设计采用12MHz晶振和两个33Pf瓷片电容,他们构成一个稳定的自激振荡器。该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。为单片机提供标准时钟。其中两个瓷片电容起微调作用。 如图所示:图3-1 时钟电路3.2、复位部分电路设计复位电路的设计以各型号的51系列单片机的厂家资料为准。各家的51单片机略有区别。一般情况下,RST引脚悬空,单片机会处于复位状态,程序不运行。标准处理是 RST与VCC接一个10uF的电容,与GND接一个8.2K的电阻,如此接线在上电时会产生一个正脉冲以使单片机复位运行。复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。 复位电路通常采用上电自动复位和按钮复位两种方式。该设计采用加电直接复位,复位电容采用10uF,电阻10000欧,为了节省元件,没有采用上电加按键模式。加电瞬间,RES管脚为高电平。通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。其连接图如下图所示:图3-2 复位电路3.3、扩展ROM电路设计CS-51单片机程序存储器的寻址空间为64KB,对于80518751片内程序存储器为4KB的ROM或EPROM,在单片机的应用系统中、片内的存储容量往往不够,特别是8031,片内没有程序存储器,必须外扩程序存储器。在该设计中,汇编程序比较长,需要外扩ROM。在选择程序存储器芯片时,首先满足程序容量,其次在价格合理情况下尽量选用容量大的芯片。芯片少,接线简单,芯片储存容量大,程序调整余量大。另外,能用一片8KBEPROM2764则不要选2片2732(4KB),多一个芯片接线就复杂许多,且功耗增多,尽量减少扩展芯片个数使电路结构简单,提高可靠性。图中74LS373是带三态缓冲输出的8D锁存器,接在P0口用来锁存低八位地址。2732共12根地址线AOAll(212=4096B=4KB),低8位A0A7通过74LS373与P0接口连接,高四位A8A11直接与P2接口的P2.0P2.3连接,P2接口有锁存功能。2732数据线D0D7共8位直接与P0接口的P0.0P0.7相连。P0接口兼做数据线和低8位地址线。CPU对扩展芯片的控制通过控制线实现。图中地址锁存器74LS373的G端与8031的地址锁存允许端ALE连接。ALE作锁存扩展地址低位字节的控制端。2732的输出使能端与8031的(读选通信号)端连接,在访问片外程序存储器时,只要此端出现负脉冲,即可从2732中读出程序。因为仅扩展一个芯片,片选端 接地即可,端有低电平表示该芯片被选中。若扩展多片时还需要专门的片选电路。图3-3 扩展ROM电路第四章 系统软件设计4.1、主程序模块的设计主程序流程图如下图A所示:该交通信号灯控制系统的四中工作状态(南北方向的交通灯为例):(1)南北方向A车道红灯亮,东西方向B车道绿灯亮。表示南北方向A车道上的车辆禁止通行,东西方向B车道允许通行。绿灯亮足规定的时间隔时,控制器发出状态信号,转到下一工作状态。(2)南北方向A车道红灯亮,东西方向B车道黄灯亮。表示东西方向B车道上未过停车线的车辆停止通行,已过停车线的车辆继续通行,南北方向A车道禁止通行。黄灯亮足规定时间间隔时,控制器发出状态转换信号,转到下一工作状态。(3)南北方向A车道绿灯亮,东西方向B车道红灯亮。表示南北方向A车道允许通行,东西方向B车道上的车辆禁止通行,绿灯亮足规定的时间间隔时,控制器发出状态转换信号,转到下一工作状态。(4)南北方向A车道黄灯亮,东西方向B车道红灯亮。表示东西方向B车道禁止通行,南北方向A车道上位过限停车线的车辆停止通行,已过停车线的车辆继续通行。黄灯亮足规定的时间间隔时,控制器发出状态转换信号,系统又转换到第(1)种工作状态。控制灯程序流程图如下:图4-1 控制交通灯灯程序流程图4.2、中断子程序模块的设计根据硬件电路原理图,并按系统的功能画出程序流程。由于此系统较为简单,故采用自上而下的设计方法,进行程序设计;对紧急车辆通过的处理,则采用中断的方法,由中断处理程序处理。说明:P1.6=0,表示A道有车通过;P1.6=1,表示A道无车通过。设计中断处理程序时,最重要的地方是如何保护进入中断前的状态(信号灯、P口、单片机寄存器的状态),使得中断程序执行完毕后能回到交通灯中断前的状态。除了保护累加器ACC、标志寄存器PSW外,还要注意主程序和中断处理程序中的延时程序不能混用。图4-2 中断子程序流程图第五章 系统仿真5.1、keil编程与调试如硬件系统图所示接线,图中,在十字路口的红,黄,绿交通灯中A道的两组同色灯连在起,B上的也互联,受MCS-51的P1.0-P 1.5控制.紧急车辆请求通过时由人工控制,以中断方式输入单片机。打开WAVE6000集成调试环境,把已经编好的程序输入,保存为“jiaotongdeng.asm”。选择菜单文件新建项目功能,加入模块文件和保存文件,然后保存项目,注意要输出HEX文件。设置好后,编译程序无误后调试执行程序,结果显示符合要求。图5-1 keil编程与调试5.2、proteus系统总体仿真系统设计功能:复杂的十字路口交通信号灯控制系统,分东西道和南北道,设东西道为A道,南北道为B道。系统设计规定:A道放行时间为60s,B道放行时间为60s;绿灯放行,红灯停止;绿灯转红灯时,相应道路的黄灯亮2s。当一道有车而另一道无车时,交通灯控制系统能立即让有车的车道放行。5.2.1、正常工作模式下的仿真根据功能要求分别仿真各种情况下的亮灯情况,在单片机仿真软件Proteus.Professional.7.1.SP2中进行仿真,在初始状态下的情况如图5-1所示具体如下:如下图仿真图所示,正常情况下南北方向亮绿灯,东西方向亮红灯。南北放行,东西禁行:图5-2 起始状态(A道通行)60s后,如下所示南北方向亮黄灯2秒,东西方向亮红灯:图5-2 中间状态(A道黄灯)随后60s,南北方向亮绿灯,东西方向亮红灯。南北放行,东西禁行。系统完成一次循环。在正常工作模式中,还可能出现如下情况。例如,当B道没有车通过,A道有车在等待却在红灯的情况时,传感器ca会给P1.6一个低电平,传感器cb给P1.7一个高电平。此时B道原来的绿灯变为黄灯,A道仍为红灯。图5-3 B道无车状态(黄灯)B道的黄灯保持2s后,B道红灯点亮。此时A道绿灯亮,在A道等待的车辆开始通行。采用这种方法,显著提高了道路的通行效率。图5-4 A道提前通行状态5.2.2、紧急车辆通过模式下的仿真当有紧急车辆(如110、112、119等急救车)要求通过时,此系统应能禁止普通车辆通行,路口的信号灯全部变红,以便让紧急车辆通过。假定紧急车辆通过时间为5s,紧急车辆通过后,交通灯恢复先前状态。用中断方式实现紧急车辆通过时的控制。当有当有紧急车辆要求通过时,紧急车辆控制开关闭合,INT0引脚收到一个低电平,向CPU发出中断请求信号,CPU开始执行中断子程序。在紧急车辆通过模式下,原来亮绿灯的道路开始亮黄灯2s,然后所有道路开始亮红灯。图5-5 紧急通行中间状态图5-6 紧急中间状态该中断工作模式除了在正常模式的黄灯时刻不能进如以外,其它情况下均可以立即开始中断。这是为了防止在实际情况下因为信号不明而可能出现的交通混乱。第六章 课程设计心得体会首先,从设计层面来讲。整个设计满足了任务的要求,即完成了四个状态的转换,所以这个系统的设计足以控制十字路口的交通灯正常变换,保证各道车辆的畅通运行。在单片机仿真软件Proteus.Professional.7.1.SP2上通过画外部接线图,装载程序等步骤进行了仿真,最终仿真结果能按照我们设计的四种状态依次循环的进行运行,当按下复位键时其重新开始仿真,当按下应急键时南北东西的红灯全亮,禁止车辆运行,仿真结果令人满意,真让人有种苦尽甘来的感觉。另外,该设计还能极大地提高道路利用效率,缓解城市交通拥堵现象。本次课程设计的过程是艰辛的,不过收获却是很大的。在设计过程中,出现了好多意想不到的问题,有一些是常见的小问题,如:代码中标点符号的使用并不是在英语书写状态下,输入字母出错等,在调试时出现异常,不过这些都是常识性错误,经过调试修改都一一解决,程序顺利完成,并实现了其功能。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,但通过查阅相关书籍、资料以及和周围同学交流后都得以一一解决。由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则效率还不是很高等等,这需要在实践中进一步完善。当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我,不断进取,能使自己在单片机编程这方面有一个大的发展。单片机为我们的主要专业课之一,对我们还是很有帮助的,课程设计也是为我们以后的工作提前进行了一次练手,也是我们学习生活之中少有的一次自己探索、研究,发现问题、解决问题的机会。当然要做好一个课程设计也不是很简单的,我认为有以下几步:(1)在设计程序之前,对所用单片机的内部结构有一个系统的了解,会减少设计过程中的错误,加快设计速度;(2)在设计时心中要有一个大体的思路,不能天马行空,过度随意,这样后期会有很大问题;(3)在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;(4)要养成注释程序的好习惯,写程序是应该思路清晰,结构明了,方便资料的保存和交流;(5)我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的;(6)最后也是最重要的一点,务必将设计过程中的材料、心得、以及设计报告的每一份草稿完完全全地保存下来,否则一旦丢失,损失会非常巨大!通过这次课程设计使我更加懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正将一个东西学好学透,从而提高自己的实际动手能力和独立思考的能力。在实践中,可以发现许多的问题,获得的经验和教训,这对于我今后的学习生活和工作都会是有很大帮助的!参考文献1董亮,朱磊,何鹏. MCS-51单片机课程设计的研究J. 实验室科学,2008,04:56-57.2刘泰康. EPROM系列简介J. 微型机与应用,1987,05:58-60.3廖善榕. 用EPROM设计数字电路J. 电子技术应用,1990,08:17-19.4杜洪林,周绍平. 51系列单片机中断方法分析与应用J. 广西轻工业,2009,03:44-46.5冯立杰,刘长泉. 谈8031单片机中断系统的增强方法J. 武警工程学院学报,2000,02:28-29+39.6宁成军,张江霞. 基于Proteus和Keil接口的单片机外围硬件电路仿真J. 现代电子技术,2006,18:142-143+146.附录源程序代码 ORG0000H LJMPSTART;主程序入口 ORG0003HLJMPTOINT ;中断服务程序入口ORG1000HSTART:SETBIE.0SETBIP.0CLRTCON.0MOVSP,#30H;*注意重设堆栈指针ENTER:CLREA;黄灯亮时禁止中断MOVR4,#30;设置A道总延时时间30*DELAYMOVP1,#11110011B;A道亮绿灯,B道亮红灯CLRF0;此时用户标志位F0为零SETBEA ;允许总中断SETBEX0 ;允许外部中断0!LOOP1:ACALLDELAYDJNZR4,PA1AJMPLL1PA1:MOVC,P1.6;判断A道是否有车辆通过JNCLOOP1MOVC,P1.7JCLOOP1LL1:MOVP1,#11110101B;A道亮黄灯,B道亮红灯ACALLDELAYCLREA;黄灯亮时禁止中断MOVR5,#30;设置B道总延时时间30*DELAYMOVP1,#11011110B;A道亮红灯,B道亮绿灯SETBF0;此时用户标志位F0为一SETBEA;允许总中断(允许外部中断0)LOOP2:ACALLDELAYDJNZR5,PB1AJMPLL2PB1:MOVC,P1.7;判断A道是否有车辆通过JNCLOOP2MOVC,P1.6JCLOOP2LL2:MOVP1,#11101110BACALLDELAYAJMPENTERDELAY:MOVR1,#10;延时1s子程序,总时间R1*R2*R3*2机器周期MM1:MOVR2,#200MM2:MOVR3,#250MM3:DJNZR3,MM3DJNZR2,MM2DJNZR1,MM1RETTOINT:PUSHP1;储存P1口状态PUSHACCPUSHPSWMOVC,F0JNCPA;用户标志位F0为一SETBP1.5CLRP1.4ACALLDELAYMOVP1,#11110110B;A道亮红灯,B道亮红灯SJMPLOOPPA:SETBP1.2;用户标志位F0为零CLRP1.1ACALLDELAYMOVP1,#11110110B;A道亮红灯,B道亮红灯LOOP:MOVC,P3.2JNCLOOPMOVC,F0JCLBLA:MOVP1,#11110011B;A道亮绿灯,B道亮红灯POPPSWPOPACCPOPP1RETILB:MOVP1,#11011110B;A道亮红灯,B道亮绿灯POPPSWPOPACCPOPP1RETIEND