基于STC89C52单片机的数显交通灯设计.docx
《基于STC89C52单片机的数显交通灯设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的数显交通灯设计.docx(29页珍藏版)》请在冰豆网上搜索。
基于STC89C52单片机的数显交通灯设计
单片机系统开发与应用工程实习报告
选题名称:
基于STC89C52单片机的数显交通灯设计
系(院):
计算机工程学院
专业:
班级:
姓名:
学号:
指导教师:
学年学期:
2009~2010学年第2学期
2010年5月30日
摘要:
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
交通灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
本项目主要从单片机应用上来实现十字路口交通灯智能化的管理,用来控制过往车辆的正常运行。
我们采用MSC-51系列单片机STC89C52和驱动芯片74LS245为中心器件,两位共阴数码管和红、黄、绿LED灯为显示器件来设计交通灯控制器,实现了东西南北路口直行,转弯交替通行;人行道通行;数码管显示直行通行时间倒计时;红、绿灯循环点亮,倒计时剩4秒时黄灯闪烁警示;某一方向拥挤时,可通过p3.0,p3.1处的两个按键,实现人工调节通行时间;紧急情况时,可通过p3.2处的中断按键,实现各路口显示红灯,数码管数据保持不变等功能。
本系统实用性强、操作简单、扩展功能强。
关键词:
单片机;交通灯;数码管;STC89C52;74LS245;中断
目录
1绪言1
1.1课题背景1
1.2单片机概述1
2项目概述2
2.1项目要求2
2.2系统设计2
3硬件设计3
3.1方案比较、设计与论证3
3.1.1电源提供方案3
3.1.2显示界面方案3
3.2芯片简介4
3.2.1MSC-51芯片简介4
3.2.274LS245引脚,参数及功能说明7
3.2.32位共阴数码管7
3.3交通管理的方案论证8
3.4系统硬件设计9
4软件设计10
4.1程序流程图10
4.2延时的设定12
4.2.1硬件延时12
4.2.2软件延时13
4.3程序代码分析13
4.3.1程序实现功能13
4.3.2工作寄存器及存储单元分配14
4.3.3初始化程序14
4.3.4显示子程序15
4.3.5定时中断处理程序16
4.3.6南北通行到达最后4秒时黄灯闪烁17
4.3.7东西方向通行时间剩余4秒钟黄灯闪烁18
4.3.8紧急中断处理程序19
4.3.9查表指令0,1,2,3,4,5,6,7,8,920
4.3.10延时5ms与1ms20
5测试及结果20
总结22
参考文献23
1绪言
1.1课题背景
随着我国国民经济的迅速发展,城市街道车辆大幅度增长,给城市交通带来巨大压力,交通拥堵已经成为影响城市可持续发展的一个全局性问题。
而街道各十字路口,又是车辆通行的瓶颈所在。
已有的许多建立在精确模型基础上的交通系统控制方案都存在着一定的局限性。
研究车辆通行规律,找出提高十字路口车辆通行效率的有效方法,对缓解交通阻塞,提高畅通率具有十分现实的意义。
地面道路是一个庞大的网络,交通状况十分复杂,使目前交通灯控制器的单一时段控制已不能满足现代交通流量的多变性,特别是在交通流量高峰时,往往会造成交通路口的通过率下降,甚至出现交通混乱现象,城市的交通拥挤问题正逐渐引起人们的注意。
道路平面交叉口(简称交叉口)是交通网中通行能力的“隘口”和交通事故的“多发源”,国内外城市的交通事故约有一半发生在交叉口。
因此,交叉口这个事故多发源不能不引起人们的高度关注。
随着交通技术、电子技术的发展及微机技术的应用,人们设计出了适应各种需要的交通检测器、信号控制机和交通信号灯。
交通灯是交管部分管理城市交通的重要工具。
现在交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯,加上一个倒计时的显示计时器来控制行车,对于一般情况下的安全行车、车辆分流发挥着作用。
目前绝大部分交通灯其时间都是设定好的,采用的是单段式定时控制或多段式定时控制,其最大的缺点是绿灯时间和绿信比是固定的或是分时段固定的,且最佳绿灯时间和最佳绿信比的整定较为困难,需要大量的实测统计数据,且很多情况下整定所得值并不是最优的,甚至是不合理的。
控制起来都不是很灵活,这使得城市车流的调节不能达到最优。
这次设计正是针对这一弊端进行了改进,较好地解决了这一问题。
根据实时车流量对各路口的绿灯时间进行动态调节,大大加强了其灵活性和实时性,本系统本着“先到先服务”的原则,在保证交通安全性不降低的条件下提高了交通效率。
与传统的交通控制系统相比,该控制系统有一定的智能水平和很强的控制能力。
1.2单片机概述
随着微控技术的日益完善和发展,单片机的应用在不断走向深入。
它的应用比定导致传统的控制技术从根本上发生变革。
也就是说单片机应用的出现是对传统控制技术的革命。
它在工业控制、数据采集、智能化仪表、机电一体化、家用电器等领路得到了广泛应用,极大的提高了这些领域的技术水平和自动化控制。
因此单片机的开发应用已成为高技术工程领域的一项重大课题。
因此了解单片机知识,掌握单片机的应用技术具有重大的意义。
本文主要从计算机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。
2项目概述
随着微控技术的日益完善和发展,单片机的应用在不断走向深入。
它的应用必定导致传统的控制技术从根本上发生变革。
它在工业控制,数据采集,智能化仪表,机电一体化,家用电器等领域得到了广泛应用,极大地提高了这些领域的技术水平和自动化控制。
本项目主要从单片机应用上来实现十字路口交通灯智能化的管理,用来控制过往车辆的正常运作。
2.1项目要求
基于STC89C52单片机的数显交通灯的设计,主要功能有:
(1)东西南北路口直行与转弯交替通行,数码管显示直行通行倒计时。
(2)红黄绿灯显示包括人行道在内的道路交通状态。
(3)某一方向道路拥挤时,可以人工控制调节东西南北通行时间。
(4)紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。
2.2系统设计
按照系统设计的要求和功能,将系统分为主控模块、LED显示模块、电源电路、复位电路、按键电路、晶振电路、驱动电路等几个模块,系统组成框图如图2-1所示。
图2-1基于STC89C52单片机的数显交通灯系统组成框图
3硬件设计
3.1方案比较、设计与论证
3.1.1电源提供方案
为使模块稳定工作,须有可靠电源。
我们考虑了两种电源方案
方案一:
采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:
采用单片机控制模块提供电源。
改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我们选择第二种方案。
3.1.2显示界面方案
该系统要求完成倒计时、状态灯等功能。
基于上述原因,我们考虑了三种方案:
方案一:
完全采用数码管显示。
这种方案只显示有限的符号和数码字苻,无法胜任题目要求。
方案二:
完全采用点阵式LED显示。
这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。
方案三:
采用数码管与点阵LED相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。
这种方案既满足系统功能要求,又减少了系统实现的复杂度。
权衡利弊第三种方案可互补一二方案的优缺,我们决定采用方案三以实现系统的显示功能。
3.2芯片简介
3.2.1MSC-51芯片简介
MCS-51单片机内部结构:
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM):
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
图3-18051内部结构
程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
图3-2MCS-51结构图
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
如图3-3所示:
图3-3MCS-51的引脚说明
Pin9:
RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。
8051的复位方式可以是自动复位,也可以是手动复位,见下图3-4。
此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
图3-4复位和时钟方式
Pin30:
ALE/
当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。
而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。
更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间,
将用于输入编程脉冲。
Pin29:
当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
Pin31:
程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,
端必须接地。
在编程时,
脚还需加上5V的编程电压。
3.2.274LS245引脚,参数及功能说明
74LS245是8路3态双向缓冲驱动,也叫做总线驱动门电路或线驱动。
主要使用在数据的双向缓冲,原来常见于51的数据接口电路,比如,早期电路中,扩展了很多的8255/8155/8251/8253/573等芯片的时候,担心8031的数据驱动能力不足,就使用一片245作为数据缓冲电路,增强驱动能力;也常见与ISA卡的接口电路,图3-5为245驱动芯片的管脚排列
图3-5245驱动芯片的引脚图
=0,DIR=0,B->A;
=0,DIR=1,A->B;
=1,DIR=X,X=0或者1,输入和输出均为高阻态;高阻态的含意就是相当于没有这个芯片。
3.2.32位共阴数码管
LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。
LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。
以八段2位共阴管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示SP,即点),每个发光二极管的阴极连在一起接地。
这样,一个LED数码管就有2根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。
相应在程序软件上,可以通过调用程序给定的秒值经过特定计算算出需要显示的个位和十位,然后有DPTR调取table的代码。
LED8段数码管的设置为每个方位上的一个2位显示器。
四个方位上总共用4个2位共阴LED接在单片机的p1口上。
如图3-7所示:
图3-72位共阴数码管
3.3交通管理的方案论证
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
设东西道比南北道的车流量大,指示灯燃亮的方案
(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。
时间为10秒。
(2)南北黄灯闪烁4秒,警示车辆和行人红、绿灯的状态即将切换。
(3)南北左拐,东西左右拐10秒。
(4)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。
时间为20秒。
东西方向车流大通行时间长。
(5)东西黄灯闪烁4秒,警示车辆和行人红、绿灯的状态即将切换。
(6)南北左右拐,东西左拐10秒。
(7)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
(8)此表可根据车流量动态设定红绿灯初始值。
3.4系统硬件设计
核心器件:
单片机系统采用STC89C52芯片,晶振选用12MHz,电源电压采用5V。
信号输出设计:
用驱动芯片74ls245与单片机的p0,p2口相连,由74ls245将信号输送到红黄绿灯上。
信号灯采用发光二极管,选用红黄绿三种颜色。
红灯停,绿灯行,黄灯等待。
低电平时,灯亮;高电平时,灯熄灭。
时间显示设计:
采用LED八段2位共阴显示,采用动态显示方式。
电路图如图3-8:
图3-8交通灯总电路图
4软件设计
4.1程序流程图
本系统的软件包括主程序,显示程序和中断程序三部分。
主程序:
初始化子程序,循环执行显示子程序,中断系统初始化,显示缓冲区赋初值,设置状态标志,状态切换。
具体流程如下:
图4-1中断服务程序图
图4-2主程序
图4-3按键功能
4.2延时的设定
延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
4.2.1硬件延时
计数器初值计算:
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C(4-1)
公式中,M为计数器摸值,该值和计数器工作方式有关。
在方式0时M为
;在方式1时M的值为
;在方式2和3为
计算公式:
T=(M-TC)/T计数
或TC=(M-T)/T计数(4-2)
T计数是单片机时钟周期TCLK2倍;TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 *1微秒=8.192毫秒
方式1 TMAX=216 *1微秒=65.536毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题。
1秒的方法:
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒。
这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到可以返回到输出时间显示程序。
相应程序代码:
定时器需定时50毫秒,故T0工作于方式1。
初值:
MOVTMOD,#01H;;;初始化定时器
MOVTL0,#0B0H
MOVTH0,#3CH
SETBEA;;;开定时中断与紧急中断
SETBET0
SETBTR0
SETBEX0
SETBIT0;;;设置中断程控方式
4.2.2软件延时
MCS-51的工作频率为2-12MHZ,我们选用的8051单片机的工作频率为12MHZ。
机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定时间。
具体的延时程序分析:
去抖延时子程序
D5MS:
MOVR7,#50;延时5ms
MOVR6,#50
L1:
DJNZR6,$
DJNZR7,L1
RET
D1MS:
MOVR7,#10;延时1ms
MOVR6,#50
L2:
DJNZR6,$
DJNZR7,L2
RET
4.3程序代码分析
4.3.1程序实现功能
1、东西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。
2、某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。
3、紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。
4.3.2工作寄存器及存储单元分配
1、工作寄存器:
R2设置为定时器定时中断次数,R6、R7用于延时程序中的寄存器
2、片内存储单元:
30H、31H作为两组数码管显示数据存储单元;32H、33H作为交通灯初始状态存储单元;40H、41H作为交通灯显示数据存储单元。
3、标志位:
00H:
南北通行标志位;01H:
东西通行标志位;02H:
紧急事件标志位。
SNFEQU00H;;;南北通行标志位
EWFEQU01H;;;东西通行标志位
URFEQU02H;;;紧急事件标志位
ORG0000H
LJMPMAIN;;;上电转主程序
ORG000BH;;;定时中断入口
LJMPDSZD
ORG0003H;;;紧急中断入口
LJMPURZD
ORG0030H
MAIN:
LCALLINIT;;;调用初始化子程序
LOOP:
LCALLDIS;;;循环执行显示子程序
AJMPLOOP
4.3.3初始化程序
INIT:
SETBSNF
SETBEWF
SETBURF
MOVR2,#20;;;定时器中断20次为1s
MOVTMOD,#01H;;;初始化定时器
MOVTL0,#0B0H
MOVTH0,#3CH
SETBEA;;;开定时中断与紧急中断
SETBET0
SETBTR0
SETBEX0
SETBIT0;;;设置中断程控方式
MOVDPTR,#TAB;;;数值首地址放入DPTR中
MOV40H,#10;;;东南西北通行时间设置
MOV41H,#10
MOV30H,#10;;;通行时间初始化
MOV31H,#20
MOVP0,#0B3H;;;初始化时南北通行并把交通灯状态分别放在32H和33H中
MOV32H,#0B3H
MOVP2,#0ABH
MOV33H,#0ABH
RET
4.3.4显示子程序
DIS:
MOVP3,#0DFH;;;选中南北方向的十位数码管
MOVA,30H;;;把显示数据送人数码管显示
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
MOVP3,#0EFH;;;选中南北方向的个位数码管
MOVA,B;;;送入数码管显示
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
MOVP3,#7FH;;;选中第东西方向的十位数码管
MOVA,31H;;;送入数码管显示
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
MOVP3,#0BFH;;;选中第东西方向的个位数码管
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
SETBP3.0
SETBP3.1
JNBP3.0,DIS_S;;;查询是否第一个按键按下
JNBP3.1,DIS_E;;;查询是否第二个按键按下
AJMPDIS_R;;;没有键按下则返回
DIS_S:
LCALLD5MS;;;按键去抖
JNBP3.0,DIS_SN
AJMPDIS_R
DIS_SN:
MOV40H,#50;;;对通行时间从新分配,南北通行时间加长
MOV41H,#30
AJMPDIS_R
DIS_E:
LCALLD5MS;;;按键去抖
JNBP3.1,DIS_EW
AJMPDIS_R
DIS_EW:
MOV40H,#30;;;东西通行时间加长
MOV41H,#50
DIS_R:
RET
4.3.5定时中断处理程序
DS_C:
LJMPDS_R;;;接力跳转
DSZD:
PUSHACC;;;保护现场
PUSHPSW
CLRTR0;;;关定时器及中断标志位并重新赋值
CLRTF0
MOVTL0,#0B0H
MOVTH0,#3CH
DJNZR2,DS_C;;;判断1s时间是否到达