课程设计---基于51单片机的交通灯设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理及系统课程设计
专业:电气工程及其动化
班级:电气1003
姓名:赵斌
学号:201009202
指导教师:闵永智
兰州交通大学自动化与电气工程学院
2013 年 3 月 15 日
基于51单片机的交通灯设计
摘要
随着人们社会活动的日益频繁,交通在人们的日常生活中的地位越来越高,而传统的交通灯存在很多缺陷,功能和维护上都不能满足城市交通道路高速发展的要求,因此对交通灯的研究是很有理论与实践的必要性的。
本文主要介绍了一个基于AT89C51单片机的交通灯信号控制系统,详细描述了利用AT89C51单片机实现的硬件连接、软件编程以及系统流程进行了详尽分析,对关键部分的电路也进行了介绍。
该系统利用了单片机的延时电路、按键复位电路、时钟电路等电路,可以方便地实现十字路口交通灯控制器的设计。
仿真结果表明,该系统除了可以显示交通灯各种状态,完成倒计时功能,还可以实时采集车流量相关数据,进行计算与智能化控制,与传统交通灯相比更具有实用性强、操作简单、扩展性强等优点,对于疏导交通流量、提高道路通行能力有明显效果。
关键字:AT89C51 控制系统;实时采集;智能化控制
Abstract
As people's social activities have become increasingly frequent, the position of traffic is higher and higher in people's daily life, while the traditional traffic light has many defects, its maintenance can not meet the rapid development of city traffic demand, so the research of the traffic lights is necessary on a rational theory and practice.
This paper introduces a traffic signal control system based on AT89C51 microcontroller which detailedly described the use of AT89C51's hardware connection, software programming and system flow, the circuit of key parts were also introduced in this paper. The system uses a delay circuit, SCM button reset circuit and clock circuit designed the crossroads traffic light controller easily.
The simulation results show that, except that the system can show the various states of the traffic lights, complete the countdown function, it also can collect traffic data, calculation and intelligent control. Compared with traditional traffic light it has more strong practicability, more simple operation, expansion and strong
er advantages, it has obvious effect to ease traffic flow, to improve the traffic capacity of the road.
Keywords: AT89C51 control system real-time intelligent control
1引言
随着生活水平的逐渐提高,汽车进入家庭的步伐也加快了,城市汽车数量的增多,使得城市道路交通问题越来越重要。
交通信号灯的出现,使得交通得以有效管制,一旦某个路口的交通灯出现故障,就可能会导致严重的交通事故。
原来的交通灯信号控制大都采用继电器实现,存在很多缺陷,功能单一和维护量大使它远远不能满足目前的需求,因此对交通灯的研究是很有理论与实践的必要性的。
本文介绍了基于AT89C51单片机的交通信号灯的工作原理和设计方法。
该交通信号灯由单片机控制电路,显示电路和辅助电路构成,利用12MHz晶振提供时钟,可用按键调节当前车流量以控制下一个绿灯时长,并在LED上显示倒计时。
提高了分析、设计电路和软硬件开发的能力。
2设计方案及原理
2.1交通灯设计方案
本文是采用了以AT89C51单片机为核心的控制方案。
方案中通过遮光式的红外传感器来检测东西方向和南北方向的车流量大小,再经过一定的简单算法算出各方向上的红绿灯时间并在数码管显示器上显示倒计时,同时通过路口上的红绿灯的点亮与熄灭控制车辆的通行与停止。
另外,方案中还设计一个紧急车辆通行按键,每当有紧急车辆需要通过时,操作员按下按键,东西方向和南北方向上均为红灯,并发出警报禁止普通车辆的通行,先让紧急车辆通过。
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
2.2交通灯设计原理框图
图1 交通灯基本原理框图
3硬件设计
本系统利用AT89C51单片机作为系统的核心控制部件,利用其定时器/计数器作为红外传感器的接收端,通过高低电平的变化来统计通过检测区域的车流量,并根据车流量数值的大小,经过一系列科学的算法来控制下一个绿灯的时长,减少了不必要的等待时间,也为车流量大的时候顺利通行提供方便。
待确定计时时长后,通过软件计时来控制接在P0端口的红绿灯的点亮与熄灭状态,并在8段共阴极数码管显示器(接在P1和P2端口)上显示倒计时。
系统的电路图主要由电源电路、复位电路、车流量检测电路、红绿灯显示电路、红绿灯时间倒计时电路以及紧急按键K1电路等电路组成。
系统原理图如图2所示:
图2 系统原理图
3.1紧急开关电路
本文中的交通灯与传统交通灯比较,其特点之一就是紧急车辆通过功能。
当交通较为拥挤的时候,警车、救护车、消防车之类的紧急车辆很难顺利通行,而这很可能会造成某些重大生命财产的损失。
本文所设计的交通灯为改善此类状况特地添加了紧急车辆通过功能。
当有紧急车辆通过时,操作员可以闭合紧急开关K1,K1接在单片机的P3.1端口上,这样就产生了一个高电平。
而单片机通过软件程序检测到P3.1口为高电平后,再通过软件调用一段子程序,使东西和南北方向都为红灯,并接通蜂鸣器警告普通车辆禁止通行并靠边让出道路,先让紧急车辆通过。
待紧急车辆通过后,打开紧急开关,交通控制系统会恢复中断前的现场。
其电路原理图如图3所示:
图3 紧急按键电路原理图
3.2红绿灯显示电路
交通灯最基本的功能是三种颜色灯的显示,每个路口均需红、黄、绿灯各一盏,东、西道上的两组同色灯蝉联在一起,南、北道的两组同色也彼此互联。
这6盏灯分别接在单片机的P0.0-P0.5口,如图4所示。
D1、D2、D3分别代表的是东西方向的绿、黄、红灯;N1、N2、N3分别代表的是南北方向的绿、黄、红灯。
当东西方向为绿灯时,P0.0口输出低电平,绿灯D1点亮;对应地,P0.6口也输出低电平,南北方向的红灯N3点亮。
当东西方向为红灯时,P0.2口输出低电平,红灯D3点亮;对应地,P0.3口也输出低电平,南北方向的绿灯N1点亮。
而当东西方向和南北方向均为黄灯时,黄灯会以2HZ的频率闪烁(通过软件来实现的),提醒车辆的驾驶员注意红绿灯的转换。
红绿灯与单片机的接线图如图4所示:
图4 红绿灯接线图
3.3倒计时显示电路
本文使用共阴极的7段数码管作为显示设备。
数码管常用的显示方法有动态显示和静态显示两种,此处以静态显示的方法显示。
各个路口上两个数码管,一个显示十位,一个显示个位。
时间的倒计时是通过软件来实行的。
倒计时显示电路连接图如图5:
图5 显示电路
3.4振荡电路
AT89C51的XTAL1和XTAL2引脚分别为单极片内反相放大器的输入/输出端,其频率范围为1.2~12MHz。
XTAL2又是内部时钟发生器的输入端,这个内部反相器可与外部元件组成皮尔斯(Pierce)振荡器。
可用石晶振荡和陶瓷振荡,当采用石英晶体振荡器时,C=(30±10)pF;当采用陶瓷谐振振荡器时,C=(40±10)pF[1]。
振荡器电路如图6所示:
图6 晶体振荡器电路
3.5复位电路
本文中的单片机采用了外接的复位电路,并且采用了一种上电复位和手动复位的组合。
自动上电复位电路保证在上电开机时对89C51单片机进行正确的复位,手动复位可在上电复位基础上并接一个复位开关,这样既保证上电复位,又可手动复位。
单片机复位后,内部特殊功能寄存器复位后的状态为确定值。
复位后,PC=00H,这表明程序从0000H地址单元开始执行。
PSW=00H,表明选寄存器0组为工作寄存器组。
P0至P3=FFH,表明已向各端口写入1。
此时,各端口既可用于输入又可用于输出。
IE=0**00000B,表明各个中断均被关断。
复位电路图如图7所示:
图7 复位电路
3.6车流量检测电路
本文用两个按键开关来模仿红外传感器检测车流量,K3为东西方向的红外传感器,K4为南北方向的红外传感器。
其连接电路如图8所示:
图8 车流量检测电路
4软件设计
4.1程序流程图
本系统的程序就是用的c语言来编译的,下面是系统的主程序流程图:
图9 程序流程图4.2程序设计
程序见附录1。
5系统仿真
本系统的仿真实现主要用到了两个软件:Proteus和Keil。
其中Proteus主要用来画电路图和仿真;Keil主要用来编译调试,并把运行出来的*.C程序文件转化为*.HEX文件,以便于在Proteus仿真时将其导入单片机运行。
如图9是交通灯控制系统的仿真电路,当单片机上电复位时,东西方向的绿灯点亮,初始时间为60s;相应的是南北方向的红灯点亮。
需要注意的是:(1)软件Proteus中没有系统中所使用到的反射式红外光电传感器,所以在电路图中使用两个按钮开关BUTTON代替,来模仿车辆经过红外传感器检测区时产生的高低电平变化。
(2)LED灯D1、D2、D3分别代表的是东西方向的绿、黄、红灯;N1、N2、N3分别代表的是南北方向的绿、黄、红灯。
(3)仿真中使用的数码管为7段码共阴数码管。
图10 仿真结果
6总结
通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计C语言的掌握方面都能向前迈了一大步。
本次课程设计的过程是艰辛的,不过收获却是很大的。
本次课程设计用到了许多单片机上所学的知识,使书本上所学的知识得到了实际应用,同时也发现了很多自己的不足之处。
经过多次查阅相关书籍和资料,一些自己不是很有把握的地方得到了补充,不仅完成了课程设计的任务,更增长了自己的知识面,填补了很多知识的空白之处,使我又
有了新的长进,学到了新的知识。
通过本次的课程设计,使我学到了很多新的知识,经历了将理论转化为实践的过程,知道了如何让将所学的理论知识转化为生活中所常见的东西,所学知识得到了充分应用。
大学的课堂是给我们学习专业知识的,而我们更应该把自己所学到的书面知识应用到生活中去。
课程设计给了我们这样一个化理论为实践的机会,自己独立的完成这么一个任务,看起来很难,但当你深入到这个过程中去时,每一点点的成功都会让自己欣喜若狂,这是一个享受成功的过程,也是一个良好的学习机会。
当然,也遇到了很多困难,让我认识到了很多不足,我会在以后的学习生活当中不断磨练自己、完善自己,为自己以后的职业生活储备更多的知识,做一个生活的强者。
参考文献:
[1] 韩克.柳秀山.冯明库.薛迎霄.电子技能与EDA技术[M],第1版,曁南大学,2004.12.
[2] 江晓安.董秀峰.模拟电子技术[M],第2版,西安电子科技大学出版社,2005.1.
[3] 清华大学电子学教研组.余孟尝.数字电子技术基础简明教程[M],第2版,高等教育出版社,2005.5.
[4] 谭浩强.C程序设计[M],第3版,清华大学出版社,2005.7.
[5] 周润景.袁伟亭.景晓松.Proteus在MCS-51和ARM7A系统中的应用百例[M],第1版,电子工业出版社,2006.10.
[6]王思明.张金敏.苟军年.张鑫.杨乔礼.单片机原理及应用系统设计[M],第1版,科学出版社,2012.9.
附录1
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar shi,ge;
uint dx_cll,nb_cll,cll,i;
sbit jinji=P3^1;
sbit baojing=P3^0;
void delay(uint z) //延时子程序4ms
{
uint x,y;
for(x=500;x>0;x--) //循环500次
for(y=z;y>0;y--);
}
void display(uchar shi,uchar ge,uchar x) //数码管显示子程序
{
P2=table[ge]; //显示个位
delay(x); //调用延时程序
P1=table[shi]; //显示十位
delay(x); //调用延时程序
}
void timer(uchar x,uchar y) //显示倒计时程序
{
shi=x/10;
ge=x%10;
display(shi,ge,y);
}
uint suanfa(int m) //车流量算法
{
uint x,y,z;
x=TL0|(TH1<<8);
y=TL1|(TH1<<8);
if(x<=5&&y<=5)
return(20);
else if((5<x&&x<60)||(5<y&&y<45))
{
if(m==0)
return(x);
else if(m==1)
return(y);
else
return(20);
}
else if(x>=60&&y>=45)
{
x=x-60;
y=y-45;
z=x-y;
x=x+60;
y=y-45;
if(x>90)
x=90;
if(y>90)
y=90;
if(m==0)
return(x);
else if(m==1)
return(y);
else
return(20);
}
}
void jishuqi()
{
TMOD=0x55; //初始化定时器/计数器T0、T1为计数模式,工作于方式1,二进制计数
TH0=0x00;
TL0=0x00; //TH0,TL0清零
TH1=0x00;
TL1=0x00; //TH1,TL1清零
TR0=1; //启动T0计数
TR1=1; //启动T1计数
EA=1; //允许中断
}
void int0() //紧急车辆通过程序
{
while(jinji==1)
{
P0=0xdb;
baojing=1;
P2=table[0];
P1=table[0];
}
baojing=0;
}
void main()
{
P3=0x00; //P3口清零
dx_cll=60; //给东西方向绿灯时间赋初值60s
TMOD=0x55; //初始化定时器/计数器T0、T1为计数模式,工作于方式1,二进制计数
while(1)
{
jishuqi(); //计数器启动计数
for(;dx_cll>3;dx_cll--) //东西方向绿灯倒计时,直至4s
{
P0=0xde; //东西方向绿灯和南北方向红灯亮
timer(dx_cll,100); //延时0.5s
while(jinji==1) //检测P3.1口是否为高电平
int0();
}
for(i=3;i>0;i--) //黄灯倒计时3s
{
while(jinji==1); //检测P3.1口是否为高电平
int0()
P0=0xed;
timer(i,50);
P0=0xff;
timer(i,50); //黄灯闪烁点亮
}
TR0=0;
TR1=0; //计数器停止计数
i=1;
nb_cll=suanfa(i); //算出南北方向绿灯的时间
jishuqi(); //计数器启动计数
for(;nb_cll>3;nb_cll--) //南北方向绿灯倒计时,直至4s
{
P0=0xf3; //南北方向绿灯和南北方向红灯亮
timer(nb_cll,100); //延时0.5s
while(jinji==1) //检测P3.1口是否为高电平
int0();
}
for(i=3;i>0;i--) //黄灯倒计时3s
{
while(jinji==1) //检测P3.1口是否为高电平
int0();
P0=0xed;
timer(i,50);
P0=0xff;
timer(i,50); //黄灯闪烁点亮
}
TR0=0;
TR1=0; //计数器停止计数
i=0;
dx_cll=suanfa(i); //算出东西方向绿灯的时间}
}
. .。