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