十字路口自动红绿灯指挥系统课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)
题目名称十字路口自动红绿灯指挥系统
课程名称综合电子课程设计
学生姓名
学号
系、专业信息工程系通信工程
指导教师
2013年12 月27 日
摘要
近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。
本设计的模拟交通灯系统是利用单片机AT89C52作为核心元件,实现了通过信号灯对路面状况的智能控制。
从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整和紧急处理等功能。
关键词:AT89C52单片机、倒计时、循环显示
目录
第1章绪论 (1)
1.1课题来源 (1)
1.2课题研究的目的意义 (1)
1.3课题研究内容 (1)
第2章系统方案设计 (2)
2.1总体设计方案方框图 (2)
2.2方案论证 (3)
第3章电路设计 (4)
3.1工作原理 (4)
3.2AT89C52介绍 (4)
第4章程序设计 (6)
4.1系统主程序设计 (6)
4.2主函数 (7)
4.3延时函数 (9)
第5章系统仿真 (10)
5.1PROTEUS简介 (10)
5.2系统仿真 (10)
5.3系统运行截图 (11)
总结 (13)
致谢 (14)
参考文献 (15)
附录一:程序代码实现 (16)
附录二:系统实物图 (20)
第1章绪论
1.1课题来源
由于我国经济的快速发展从而导致了汽车数量的猛增,大中型城市的城市交通,正面临着严峻的考验,从而导致交通问题日益严重,其主要表现如下:交通事故频发,对人类生命安全造成极大威胁;交通拥堵严重,导致出行时间增加,能源消耗加大。
日常的交通堵塞成为人们司空见惯而又不得不忍受的问题,在这种背景下,结合我国城市道路交通的实际情况,开发出真正适合我们自身特点的智能信号灯控制系统已经成为当前的主要任务。
随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。
老师为了让我们深入了解并加强我们的实际操作能力,老师便提供课题十字路口自动红绿灯指挥系统的设计给我们这一组成员。
1.2课题研究的目的意义
(1)进一步熟悉和掌握单片机的结构和工作原理。
(2)掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
(3)通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
(4)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
(5)通过完成一个包括电路设计和程序开发的完整过程,为我们今后从事相应工作打下基础。
本次课程设计重点在于软件算法的设计及硬件的设计,需要有很巧妙的程序算法及硬件的焊接。
这次我们选了十字路口自动红绿灯的设计,使我们平时的学习运用到实践中去,让我们更加了解通信原理及单片机这两门课程,也让我们对这两门课程加以实践。
1.3课题研究内容
十字路口自动红绿灯指挥系统
主要要求及指标:
自动完成绿-黄-红-绿工作循环;每种信号灯亮的时间不等,如:绿灯亮20秒-黄灯亮5秒-红灯亮15秒,如此循环;用倒计时的方法,数字显示当前信号的剩余时间,提醒行人和司机;信号灯的时间分别可调,以适应不同路口、不同路段交通流量的需求。
第2章 系统方案设计
2.1总体设计方案方框图
复位 P0.0-P0.7控制LED 数码管
数字0-9的显示
P2.0-P2.1控制AD0-AD1
图2.1.1基于单片机的方案
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED 数码管就可以显示倒计时以提醒行使者,更具人性化。
本系统在此基础上,加入了紧急情况处理与时间调整功能。
图2.1.2系统的总体框图
据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,信号灯状态模块,LED 倒计时模块接受输出。
系统的总体框图如上所示。
单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED 数码管上实时显示。
在此过程中随时调用急停按键和时间调节中断。
2.2方案论证
2.2.1电源提供方案
为使模块稳定工作,须有可靠电源。
因此考虑了两种电源方案:
方案一:采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:采用单片机控制模块提供电源。
改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我选择第二种方案。
2.2.2显示界面方案
该系统要求完成倒计时功能。
基于上述原因,我考虑了二种方案:
方案一:采用数码管显示。
这种方案只显示有限的符号和数码字符,简单,方便。
方案二:采用点阵式LED显示。
这种方案虽然功能强大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。
综上所述,我选择第一种方案。
2.2.3输入方案:
题目要求系统能调节灯亮时间,并可处理紧急情况,我研究了两种方案:
方案一:采用8155扩展I/O口及键盘,显示等。
该方案的优点是:使用灵活可编程,并且有RAM,及计数器。
若用该方案,可提供较多I/O口,但操作起来稍显复杂。
方案二:直接在I/O口线上接上按键开关。
由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O口就可实现,且本身的计数器及RAM已经够用,故选择方案二。
第3章电路设计
3.1工作原理
单片机最小系统。
一个AT89C52单片机做为控制电路,运用其P1口来控制六个LED彩灯,通过P1给LED彩灯输入不同的电平信号,来实现LED彩灯按要求点亮。
P3口接中断按钮。
LED数码管是由a、b、c、d、e、f、g、h这8段发光二极管组成的“8”字型显示器件,共阳极管数码显示电路,公共端接正,对应段为低电平发光,D0 0 —
3.2AT89C52介绍
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编
程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。
如图3.2.1所示:
图3.2.1 单片机最小系统
第4章程序设计4.1系统主程序设计
图4.1.1主流程图
4.2主函数
void main()
{
SP=0x6f;
P0=0xff;
P2=0xff;
P1=0x00;
Init_Timer();
while(1)
{
Seg_Disp();
if(time_Count==200)
{
time_Count=0;
ge--;
if(t==3)
{
P1=0x01;
if(ge==0)
{
t=2;
ge=5;//黄灯显示时间5s,即可以适应不同的路段}
}
if(t==2)
{
P1=0x02;
if(ge==0)
{
t=1;
g e=15;//红灯显示时间15秒,即可以适应不同的路段}
}
if(t==1)
{
P1=0x04;
if(ge==0)
{
ge=0;
t=0;
}
}
if(t==0)
{
P1=0x04;
if(ge==0)
{
t=3;
ge=20;//绿灯显示时间20s,即可以适应不同的路段}
}
}
}
}
4.3延时函数
void delay(uchar z)
{
uchar a,b;
for(a=0;a<150;a++)
{
for(b=0;b<z;b++);
}
}
4.4定时器初始化
void Init_Timer()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
TR0=1;
EA=1
第5章系统仿真
5.1PROTEUS简介
Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
运行proteus 的ISIS程序后,进入该仿真软件的主界面。
在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。
通过工具栏中的p(从库中选择元件命令)命令,在pick devices窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source菜单的Definecode generation tools菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source 菜单的Add/removesource files 命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况。
5.2系统仿真
图5.2.1系统仿真图
5.3系统运行截图
5.3.1绿灯显示20秒
图5.3.1绿灯显示20秒5.3.2黄灯显示5秒
图5.3.2黄灯显示5秒
5.3.3红灯显示15秒
图5.3.3红灯显示15秒
总结
在这次实验中,我主要负责实物的制作,以及实验论文的总体设计与编排。
这次课程设计主要设计交通灯,让它自动完成绿-黄-红-绿工作循环,每种信号灯亮的时间不等,如:绿灯亮20秒-黄灯亮5秒-红灯亮15秒,如此循环,用倒计时的方法,数字显示当前信号的剩余时间,提醒行人和司机,信号灯的时间分别可调,以适应不同路口、不同路段交通流量的需求,这在程序中体现,只要改变相应的数值就能实现。
回顾起此次单片机课程设计,我仍感慨颇多,学到了很多的东西。
同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。
在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
通过这次课程设计我发现单片机原理应用行很强,只看也不中,只有自己动手去做才会发现自己确实有太多的不足,许多的原理,程序看似简单,真正去做才知道知识并没有自己想象的那样扎实。
从而懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
致谢
在此次设计中,黄老师作为我的指导老师,至始至终都给予我了不少帮助,从下任务书开始,就帮我制定规划,提醒我应注意的问题,借给我资料和实验器材,和我一起调程序,并提出了很多的修改意见以及完善方案。
此外还认真批阅了我的论文,指出其中很多瑕疵和不清晰的地方,更重要的是在我遇到困难时对我的鼓励,让我不懈怠、不退缩、也让我更有信心,可以说我的每一点进展都与黄老师的付出是分不开的。
当然还在此,我向身边关心我的老师、同学致以诚挚的谢意!有其他老师和同学都帮了我不少忙,在此不再赘述。
谨祝老师们工作顺利,万事如意,桃李满天下;同学们学业有成,前程似锦!
参考文献
[1] 赵晶.Protel99高级应用[M].人民邮电出版社, 2006.
[2] 谷树忠.Protel DXP实用教程[M].电子工业出版社,2003.
[3] 刘湘涛、江世民.单片机原理与应用[M].电子工业出版社, 2006.
[4] 孙育才. ATMEL新型AT89S51系列单片机及其应用[M].清华大学出版社, 2005.
[5] 李华.MCU-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993.
[6] 张迎新、雷道振.单片机初级教程[M].北京航天航空大学出版社, 2006.
附录一:程序代码实现
#include<reg52.h>
#define uchar unsigned char//定义为ucha r类型
#define uint unsigned int//定义为uint类型
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管显示0~9
uchar t=3;
uchar time_Count;//进行计时
uchar ge=21;//初始值,绿灯显示时间(21-1)s,即可以适应不同的路段void delay(uchar z)//一个延时函数
{
uchar a,b;
for(a=0;a<150;a++)
{
for(b=0;b<z;b++);
}
}
void Init_Timer()//定时器的初始化
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
TR0=1;
EA=1;
}
void Seg_Disp() //将个位十位分别显示在数码管上面
{
P2=0xfe;
P0=table[ge%10];
delay(1);
P2=0xfd;
P0=table[ge/10];
delay(1);
}
void main()//程序运行的主函数
{
SP=0x6f;
P0=0xff;
P2=0xff;
P1=0x00;
Init_Timer();
while(1)
{
Seg_Disp();
if(time_Count==200)
{
time_Count=0;
ge--;
if(t==3)
{
P1=0x01;
if(ge==0)
{
t=2;
ge=5;//黄灯显示时间5s,即可以适应不同的路段
}
}
if(t==2)
{
P1=0x02;
if(ge==0)
{
t=1;
ge=15;//红灯显示时间15秒,即可以适应不同的路段}
}
if(t==1)
{
P1=0x04;
if(ge==0)
{
ge=0;
t=0;
}
}
if(t==0)
{
P1=0x04;
if(ge==0)
{
t=3;
ge=20;//绿灯显示时间20s,即可以适应不同的路段}
}
}
}
}
void timer0() interrupt 1 using 1//定时器0的操作计时{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
time_Count++;
}
附录二:系统实物图
图5.4.1 十字路口自动红绿灯指挥系统实物图
图5.4.2 十字路口自动红绿灯指挥系统实物演示图。