1、课程论文题 目: 定时器控制交通指示灯 学生姓名: 学生学号: 系 别: 专 业: 年 级: 任课教师: 定时器控制交通指示灯一、设计要求近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用。实验目的: 由于随着交通量的快速增长和缺乏对道路的系统研究和控制,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。为了确保十字
2、路口的行人来往的安全以及车辆顺利,畅顺地通过,要求我们设计一个交通灯逻辑控制电路,利用交通灯中的红绿灯来控制车辆和人的行止。 本实例通过单片机c语言设计一个简易的交通指示灯。名称为定时器控制交通指示灯。目的是实现一个具有东西南北四个方向、共12个指示灯控制功能的交通灯。东西向绿灯亮5s后,黄灯闪烁,闪烁5次亮红灯,红灯亮后,南北向由红灯变成绿灯,5s后南北向黄灯闪烁, 闪烁5次后亮红灯,东西向绿灯亮,如此往复。也可以根据不同方向的车流量来改变控制时间。二、设计方案东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮
3、提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。假如东西道的车流量大,所以绿灯的控制时间比南北道多。 5s 5s 5s 5s. 东西道 绿灯亮 黄灯亮 红灯亮 红灯亮 南北道 红灯亮 红灯亮 绿灯亮 黄灯亮 说明: (1)当东西方向为红灯,此道车辆禁止通行;南北道为绿灯,此道车辆通过,时间为5秒。(2)黄灯闪烁5秒,警示车辆红、绿灯的状态即将切换。 (3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,。时间为5秒。(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。三、原理图四、流程图本系统采用AT89
4、C51单片机来设计交通灯控制,实现了能根据实际车流量通过89C51芯片的P0口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示;交通灯是城市交通中不可缺少的重要工具,是城市交通秩序的重要保障。根据现实生活中交通灯的工作过程,用指示灯来模拟交通灯的一般工作过程。实验采用了中断的形式来控制交通灯的运行顺序,通过单片机的p0口来控制指示灯,达到模拟交通灯的作用效果。五、测试步骤使用元器件:AT89C51单片机RESPACK上拉电阻CAP电容 CRYSTAL晶振 RES电阻 CAP-ELEC极性电容 TRAFFIC LIGHTS交通灯 在画图过程中,我首先采用的是红黄绿三种不同颜
5、色的发光灯来显示模拟的控制过程,但是由于首先线路的链接错误,导致有些灯无法亮起来。后来仔细琢磨是由于灯与灯之间的节点没有链接上。整个图画完之后,总感觉整体的画面比较凌乱,后来参考了一些资料,发现proteus仿真软件中直接就有交通灯的原件,不需要自己用不同的灯再来链接控制,而且可以采用总线的形式来连接使电路简单化。更改完毕后,发现电路清楚了很多,再加上简单的文字说明,也使整个画面清晰易懂。可是在画图过程中值得注意的就是我采用的是P0口来控制灯的转换,所以必须要在灯的链接过程中加上拉电阻,才能使电路正常运行。电路连接完毕,然后在AT89C51单片机中添加写好的程序。首先路灯不能按照程序要求的来执
6、行。而是几个灯一起亮,没有一定的规律。后来再认真检查电路,使东西和南北方向的相对应的三盏灯用同样的网络标号注明,并且与P0的连接端口也相对应上。如我的设计电路图是东西方向的红、黄、绿灯和P0P2口用1、2、3的网络标号对应上。而南北方向则采用4、5、6的网络标号来注明,以示区别。这样修改了一下运行程序就能按照我设计的要求来执行了。六、仿真结果要求:东西向绿灯亮5s后,黄灯闪烁,闪烁5次亮红灯,红灯亮后,南北向由红灯变成绿灯,5s后南北向黄灯闪烁,闪烁5次后亮红灯,东西向绿灯亮,如此往复。1南北红灯亮、东西绿灯亮; 2东西黄灯闪烁;3东西红灯亮、南北绿灯亮;4南北黄灯闪烁。七、程序#includ
7、e #define uchar unsigned char #define uint unsigned int sbit RED_A=P00; /东西向指示灯 sbit YELLOW_A=P01; sbit GREEN_A=P02; sbit RED_B=P03; /南北向指示灯 sbit YELLOW_B=P04; sbit GREEN_B=P05; uchar Time_Count=0,Flash_Count=0,Operation_Type=1; void T0_INT() interrupt 1 TL0=-50000/256; TH0=-50000%256; switch(Operat
8、ion_Type) case 1: /东西向绿灯与南北向红灯亮 5s RED_A=0;YELLOW_A=0;GREEN_A=1; RED_B=1;YELLOW_B=0;GREEN_B=0; if(+Time_Count!=100) return; /5s(100*50ms)切换 Time_Count=0; Operation_Type=2; break; case 2: /东西向黄灯开始闪烁,绿灯关闭 if(+Time_Count!=8) return; Time_Count=0; YELLOW_A=YELLOW_A;GREEN_A=0; if(+Flash_Count!=10) return
9、; /闪烁 Flash_Count=0; Operation_Type=3; break; case 3: /东西向红灯与南北向绿灯亮 5s RED_A=1;YELLOW_A=0;GREEN_A=0; RED_B=0;YELLOW_B=0;GREEN_B=1; if(+Time_Count!=100) return; /5s(100*50ms)切换 Time_Count=0; Operation_Type=4; break; case 4: /南北向黄灯开始闪烁,绿灯关闭 if(+Time_Count!=8) return; Time_Count=0; YELLOW_B=YELLOW_B;GR
10、EEN_A=0; if(+Flash_Count!=10) return; /闪烁 Flash_Count=0; Operation_Type=1; break; void main() TMOD=0x01; /T0 方式 1 IE=0x82; TR0=1; while(1); 参考文献1:基于Proteus的51系列单片机设计与仿真,陈忠平,电子工业出版社,2012.52:单片机原理与应用及c51程序设计,谢维成,杨加国,董秀成等,清华大学出版社,2009.73:电子技术基础(模拟部分),康华光,高等教育出版社,2011.114:电子技术基础(数字部分),康华光,高等教育出版社,2011.115:C程序设计,谭浩强,清华大学出版社,20076:C语言程序设计,田淑清,高等教育出版社,2010