AT89C52单片机控制交通灯系统Word下载.docx
《AT89C52单片机控制交通灯系统Word下载.docx》由会员分享,可在线阅读,更多相关《AT89C52单片机控制交通灯系统Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
7参考文献............................................................12
8附录................................................................13
附件1程序清单.....................................................13
附件2系统仿真图...................................................16
摘要
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本系统采用单片机AT89C52为中心器件来设计交通信号灯控制器,系统实用性强、操作简单、扩展性强。
本设计系统就是由单片机最小系统、交通灯状态显示系统、LED数码显示系统、复位电路和按键操作电路等几大部分组成。
系统除具有基本的交通信号灯功能外,还具有倒计时、时间调整和紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用KEILC编程,主要编写了主程序,LED数码管显示程序,中断程序,延时程序等。
经过整机调试,实现了对十字路口交通灯的模拟。
关键字:
AT89C52交通灯PROTUES中断程序
1交通信号灯控制系统设计任务和性能指标
1.1设计任务
利用单片机设计一个十字路口交通信号灯控制系统,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外,并有倒计时系统显示信号灯转换时间。
用红、绿、黄发光二极管作信号灯,两位八段数码管显示时间来控制交通信号灯的变化。
模拟框图如图1所示。
图1交通信号灯模拟图
1.2性能指标
(1)东西和南北方向的车辆交替通行,任意时刻只有一个方向通行,以黄灯闪烁来转换。
(2)系统开始运行时设置每次放行10秒,其中有2秒是黄灯闪烁提醒行人和车辆禁止通行。
(3)通行时间可在0~99秒内任意设置。
(4)有紧急情况处理功能,比如:
有急救车辆通行时,暂时禁止其他车辆通行。
2交通信号灯控制系统设计方案
2.1设计思路
2.1.1设计思路
(1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
(2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有基本的交通功能,还增加了倒计时显示提示,基于实际情况,又增加了紧急状况处理和通行时间可调这两项特殊功能。
(3)选择器件,大体分配各个器件及模块的基本功能要求,设计主控电路、显示电路,信号灯状态电路,按键电路等。
(4)进行软件系统的设计,对于本系统,本人采用单片机C语言编写,对单片机内部结构和工作情况做了充足的研究,在深入了解了定时器,中断以及延时原理后,完成了软件的编写。
2.1.2功能设计
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整和紧急情况处理等功能。
(1)基本功能
采用红绿黄三种颜色的LED灯的亮灭来模拟信号灯,从而达到控制车辆的通行。
(2)倒计时显示功能
采用两位八段数码管来显示时间,来告知行人和车辆通行时间和要等待的时间。
(3)时间可调功能
通过键盘对时间进行手动设置,增加了人为的可控性,避免车少长等和减缓车多交通堵塞的麻烦。
(4)紧急处理
交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,由此在交通控制中增设禁停按键。
2.2总体设计
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。
本系统在此基础上,加入了紧急情况处理与时间调整功能。
2.2.1通行方案设计
十字路口分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如图2所示。
说明:
黑色表示亮,白色表示灭。
交通状态从状态1开始变换,直至状态4然后循环至状态1,周而复始。
S1东西通行S2东西禁行过渡状态
S3南北通行S4南北禁行过渡状态
图2交通信号灯状态
通过对具体的十字路口交通信号灯状态的演示分析,可以把这四个状态归纳如下:
状态S1:
东西方向绿灯亮,允许通行,南北方向红灯亮,禁止通行;
状态S2:
东西方向绿灯转黄灯闪烁,允许通行,南北方向红灯亮,禁止通行;
状态S3:
东西方向红灯亮,禁止通行,南北方向绿灯亮,允许通行;
状态S4:
东西方向红灯亮,禁止通行,南北方向绿灯转黄灯闪烁,允许通行;
依据上述分析,东西的通行时间为状态S1和状态S2的时间之和,南北的通行时间为状态S3和状态S4的时间之和,因此可以列出各个路口灯的状态转换如表1所示(其中逻辑值“1”代表执行通行,逻辑值“0”代表禁止通行,逻辑值“L”代表绿灯转黄灯):
表1交通灯状态转换表
状态
时间
东西
南北
绿灯
黄灯
红灯
绿灯
红灯
S1
8s
1
S2
2s
L(闪烁)
S3
S4
2.2.2硬件设计方案
本系统选用Atmel公司的AT系列单片机AT89C51为中心器件设计交通信号灯控制器,实现了红绿灯循环点亮,绿灯变红灯中间为黄灯闪烁警示的功能。
每个方向采用红绿黄三色的LED灯的亮灭来模拟信号灯,采用两位八段共阳数码管,显示十字路口通行或禁止的剩余时间,通过键盘对时间进行手动设置,增加了人为的可控性,避免车少长等和减缓车多交通堵塞的麻烦,同时增设了紧急情况处理按键,因为交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻。
所设计的系统硬件框图如图3所示。
图3系统硬件框图
2.2.3软件设计方案
设计要求为:
首先南北方向红灯、东西方向绿灯亮,南北方向红灯10秒、东西方向绿灯8秒,相应的数码管显示对应的数字并读秒,同时南北方向红色的二极管和东西方向的绿色二极管接通点亮显示,当东西方向的绿灯时间到,则东西方向的绿灯转为黄灯,同时数码管显示黄灯的时间2秒,东西方向的黄色二极管接通点亮,此时南北方向的红灯不变。
南北方向的红灯和东西方向的黄灯时间同时到,此时南北方向的红灯跳转为绿灯,时间同样为8秒,东西方向有黄灯跳转为红灯,时间为10秒。
当南北方向的绿灯时间到,南北绿灯跳转为黄灯,东西方向的红灯不变,当南北方向的黄灯和东西方向的红灯时间到,南北方向的黄灯跳转为红灯,东西方向的红灯跳转为绿灯。
进入开始的状态,循环执行。
此外还利用单片机的中断设计了紧急情况处理和时间调整的功能。
根据设计要求,程序框图如图4所示。
软件采用KEILC语言完成。
软件设计可以分为以下几个功能模块:
图4程序结构框图
3交通信号灯控制系统硬件设计
3.1系统硬件框图
根据设计的要求,单片机选用AT89C52,其内部带有8KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。
四个方向各采用三个不同色的LED灯和1个两位的数码管显示,来实现该方向的指示灯的点亮时间倒计时。
按键可以根据系统的需要进行操作。
图5系统硬件框图
3.2单元电路设计
3.2.1单片机最小系统
对51系列单片机来说,单片机要正常工作,必须具有五个基本电路,也称五个工作条件:
1、电源电路,2、时钟电路,3、复位电路,4、程序存储器选择电路,5、外围电路。
因此,单片机最小系统一般应该包括单片机、晶振电路、复位电路、外围电路等,如下面的框图所示:
图6单片机最小系统框图
(1)电源电路设计
单片机芯片的第40脚为正电源引脚VCC,一般外接+5V电压。
第20脚为接地引脚GND,常见电源电路设计如下图7所示:
图7电源设计
(2)时钟电路设计
单片机是一种时序电路,必须要有时钟信号才能正常工作。
单片机芯片的18脚(XTAL2)、19脚(XTAL1)分别为片内反向放大器的输出端和输入端,只要在18脚(XTAL2)和19脚(XTAL1)之间接上一个晶振,再加上2个20PF的瓷片电容即可构成单片机所需的时钟电路,本设计就采用图8所示时钟电路。
图8时钟电路
此外,当采用外部时钟时,19脚(XTAL1)接地,18脚(XTAL2)接外部时钟信号。
(3)复位电路设计
单片机芯片的第9脚RST(Reset)是复位信号输入端。
单片机系统在开机时或在工作中因干扰而使程序失控,或工作中程序处于某种死循环状态等情况下都需要复位。
复位的作用是使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。
AT89C52单片机的复位靠外部电路实现,信号从RST引脚输入,高电平有效,只要保持RST引脚高电平2个机器周期,单片机就能正常复位。
常见的复位电路有上电复位电路和按键复位电路二种,如图9所示。
本设计采用手动复位电路。
A.上电复位B.手动复位
图9复位电路
(4)程序存储器选择电路
单片机芯片的第31脚(EA)为内部与外部程序存储器选择输入端。
当EA引脚接高电平时,CPU先访问片内8KB的程序存储器,执行内部程序存储器中的指令,当程序计数器超过0FFFH时,将自动转向片外程序存储器,既是从1000H地址单元开始执行指令;
当EA引脚接低电平时,不管片内是否有程序存储器,CPU只访问片外程序存储器。
AT89S52内部有8KB的程序存储器,所以根据该脚的引脚功能,只要将该脚接上高电平,才能先从片内程序存储器开始取指令。
常见的程序存储器选择电路就是将第31脚直接接到正电源上。
(5)外围电路的设计
外围电路的设计主要依据项目要实现的功能,本项目要实现的功能是用单片机控制交通信号灯。
3.2.2交通信号灯显示电路
本系统采用LED作为信号灯来使用,单片机的I/O口直接与LED连接。
在十字路口的四组红、黄、绿三色交通灯中,东西方向的同色灯连接在一起,南北方向的同色灯也彼此连接,受单片机AT89C52的P0.0—P0.5控制。
12个LED指示灯采用共阳极的连接方式,因此I/O口输出低电平时,与之相连的LED会亮,输出高电平时,LED熄灭。
3.2.3倒计时显示电路
该交通信号灯控制系统在正常工作情况下,为方便提示路上行人及车辆交通灯转换的剩余时间,专门为控制系统提供了一个倒计时的显示装置。
该装置采用2位八段数码管来显示,每个路口需要1个,共4个,在设计电路时,本系统采用用共阳数码管,直接和P2口连接,作为段选,来控制每个数码管数字的显示,再通过P1.0—P1.3进行位选,来选择要显示的数码管。
3.2.3按键操作电路
该系统最大的好处就是可以实现时间的调整和紧急停车功能,通过六个按键来达到对路面通行状态的实时控制。
4交通信号灯控制系统程序设计
4.1理论基础知识
4.1.1定时器原理
定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。
它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算公式:
TC=M-C
式中,M为计数器模值。
计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。
计算公式变为:
T=(M-TC)T0
模值和计数器工作方式有关,本系统选用方式1计数。
在方式1时M的值为65536,单片机的主脉冲频率为12MHZ,经过12分频后,采用方式1最大延时是65.536毫秒。
所以选择扫描周期为50ms。
若使用软件则会耽搁程序流程,显然不可行。
相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。
4.1.2软件延时原理
AT89C52单片机的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
4.1.3中断原理
本系统主要使用了定时器中断和外部中断,中断信号由引脚T0、INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,单片机允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。
以IT0为例,IT0=0,为电平触发方式,IT0=1,为负边沿触发方式,本设计采用电平方式,IE0为其中断标志位,有中断信号则置位,中断服务子程序响应后,IE0自动清零。
IE中的EA为允许中断的总控制位,为1开启,EX0为外部中断允许控制位,为1开启。
使用proteus软件进行电路仿真,芯片AT89C52还需要载入代码文件来支持其正常工作以实现预期功能要求。
程序代码编写是整块设计的核心内容,本系统中利用一个定时器T0完成了交通指示灯所有的切换过程和数码管的倒计时功能,其中指示灯的切换有4种不同的操作,数码管的切换有2种不同的操作,用变量i表示状态的切换。
采用C语言进行编程,下面简要介绍下各段程序代码的意义和功能。
4.2主程序框图
主程序为交通灯四个状态循环转换的死循环,主程序代码和程序框图如下所示。
voidmain()
{Init();
//初始化,基本功能循环工作
while
(1)
{key();
if(flag1==1&
&
flag_all!
=1)//不在全部通行的模式下时正常刷新计数
{adjust_Time();
flag1=0;
}
if(flag2==1)
{yellowled();
flag2=0;
display();
}}
全部控制程序实际上分为若干模块:
键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序,中断服务子程序,红绿灯时间调整程序等。
整个软件程序方面主要分两大部分:
主程序部分和中断处理程序。
图10系统程序流程图
设计说明:
该交通信号灯控制系统的软件设计采用的是顺序执行并反复循环的方法。
在正常工作的情况下,每20s循环变化一次。
每个循环周期在还剩2s时,正在通行路口的黄灯同时点亮并开始闪烁,以提醒路人上的行人及车辆,交通灯即将发生变化,当紧急情况需要禁止通行时,按下全部禁行按键,黄灯闪3秒后四个方向全变红灯,直到路面恢复正常后,通过按三次功能键即可复位。
5调试分析及所用芯片
5.1调试环境
本设计使用仿真软件Proteus和KeilC进行联合调试。
原理图在Proteus提供的模板中选择恰当的元器件进行设计绘图,完成电路的搭建,发现设计中的错误及时改正。
所有c语言源程序都在KeilC下编写,对仿真软件进行相应的设置后,KeilC和Proteus能进行通信,即在KeilC中全速运行程序时,Proteus中的单片机系统也会自动运行。
系统的软件调试借助于STC仿真器,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。
软件调试主要分以下几个步骤进行:
1.功能子程序的调试,主要是查看每个子程序是否正确,这样方便查错。
2.程序流程的调试。
主要是查看程序运行的步骤是否正确,在某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。
5.2所用芯片及参数
表2所用芯片
序号
名称
元件型号
参数
数量
单片机
AT89C52
2
指示灯
LED-RED\GREEN\YELLOW
12(各4个)
3
8段两位共阳数码管
7SEG-MPX2-CA
4
电容
CAP
22pF
5
电解电容
CAP-ELEC
10μF
6
晶振
CRYSTAL
12MHZ
7
电阻
RES
100Ω
12
8
500Ω
9
排阻
RESPACK-8
10K
10
按键
BUTTON
6个人小结
这次是我认为最有意义的一次课程设计,从原理图设计到软件仿真,我从中收获了许多。
刚开始设计时,我就在校门口仔细观察交通灯的转换,经过研究思考最终得到了上述的交通灯状态转换表。
对于交通灯这个题目,由于刚学了PLC实现交通信号灯的控制实验,所以就想通过不同的核心器件来实现同样的功能,来加深自己在这个题目上的深入研究,在确定题目之后,查阅了大量的资料,初步完成了电路设计方案。
在程序编写上,我选择了用KEILC语言进行编程,。
在整个程序的编写过程中,采用模块化,编一个子程序仿真一个,通过Keil和proteus两个软件来实现的。
Keil帮助检查程序是否存在语法错误之类的问题,同时可以生成hex文件,供proteus软件仿真使用。
通过一周的课程设计,使我更深入的学习了AT89C52单片机,尤其是在中断程序的编写上学到了好多。
七参考文献
[1]张毅坤.单片微型计算机原理及应用,西安电子科技大学出版社1998
[2]夏继强.单片机实验与实践教程.北京:
北京航空航天大学出版社,2001
[3]彭伟.单片机C语言程序设计100例.北京:
电子工业出版社,2009
[5]雷丽文.微机原理与接口技术.北京:
电子工业出版社,2001
[6]于永.51单片机C语言常用模块与综合系统设计.北京:
电子工业出版社,2007
[7]谭浩强.C语言程序设计.北京:
清华大学出版社,2005
[8]于永.51单片机C语言常用模块与综合系统设计.北京:
8附录
附件1程序代码
#include<
reg52.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbityellowled_nb=P0^3;
//南北黄灯