基于单片机的数显交通灯控制系统设计.docx
- 文档编号:23365906
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:35
- 大小:880.24KB
基于单片机的数显交通灯控制系统设计.docx
《基于单片机的数显交通灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数显交通灯控制系统设计.docx(35页珍藏版)》请在冰豆网上搜索。
基于单片机的数显交通灯控制系统设计
基于单片机的(数显)交通灯控制系统设计
1、设计背景
随着微控技术的日益完善和发展,单片机的应用在不断走向深入。
它的应用比定导致传统的控制技术从根本上发生变革。
也就是说单片机应用的出现是对传统控制技术的革命。
它在工业控制、数据采集、智能化仪表、机电一体化、家用电器等领路得到了广泛应用,极大的提高了这些领域的技术水平和自动化控制。
因此单片机的开发应用已成为高技术工程领域的一项重大课题。
因此了解单片机知识,掌握单片机的应用技术具有重大的意义。
当前,在世界范围内,一个以微电子技术,计算机的通讯技术为先导的,一信息技术及信息产业的信息革命时期。
而计算机技术怎样与实际应用更有效的结合并有效地发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。
本文主要从计算机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。
2、实际实现功能
西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。
某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。
紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。
工作寄存器及存储单元分配
1.工作寄存器
R2设置为定时器定时中断次数,R6、R7用于延时程序中的寄存器
2.片内存储单元
30H、31H作为两组数码管显示数据存储单元;32H、33H作为交通灯初始状态存储单元;40H、41H作为交通灯显示数据存储单元
3、硬件设计
1、AT89C51的介绍
1.1特性概述
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
1.2管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚
特殊功能
口管脚
特殊功能
P3.0RXD
串行输入口
P3.4T0
记时器0外部输入
P3.1TXD
串行输出口
P3.5T1
记时器1外部输入
P3.2
外部中断0
P3.6
外部数据存储器写选通
P3.3
外部中断1
P3.7
外部数据存储器读选通
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/
:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
三种单片机外形及AT89C51的引脚排列
AT89S51系列单片机的内部结构示意图
1.3振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2、硬件设计思路
2.1控制器的原理框图
按要求,可画出该控制器的原理框图,为确保十字路口的交通安全,往往都采用交通灯自动控制系统来控制交通信号。
其中红灯(R)亮,表示禁止通行;黄灯(Y)亮表示暂停;绿灯(G)亮表示允许通行。
2.2紧急转换电路
一般情况下交通灯按照车流量大小合理分配通行时间,按一定规律变化,但考虑紧急车通行车况,设计紧急通行开关,下面简述单片机的中断原理。
8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制,其中5个中断源的程序入口地址如表所示:
中断源程序入口
中断源的服务程序入口地址
中断源
入口地址
外中断0
0003H
定时/计数器0
000BH
外中断1
0013H
定时/计数器0
001BH
串行口中断
0023H
2.3交通灯中的中断处理流程
(1)现场保护和现场恢复:
有特殊车辆要通过时就要进行中断,在中断之前,先将交通灯中断前情况保护好,当中断执行后再恢复现场,包括信号灯和时间显示电路。
(2)中断打开和中断关闭:
为了使特殊车辆通行按一下打开中断开关就可以打开中断,关闭中断开关就关闭中断。
(3)中断服务程序:
有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容:
即如果南北方向有特殊车辆要求通过,南北方向转换为绿灯,东西方向为红灯;如果东西方向有特殊车辆要求通过,东西方向转换为绿灯,南北方向为红灯。
(4) 中断返回:
执行完中断服务程序后,必然要返回,即回交通灯信号回到中断前状态,显示时间也和中断前一样。
3、软件设计思路
3.1软件设计流程图
3.2每秒钟的设定
延时方法可以有两种一中是利用STC-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软件延时的方法。
计数器硬件延时
a计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为213;在方式1时M的值为216;在方式2和3为28
b计算公式
T=(M-TC)T计数或TC=M-C/T计数
T计数是单片机时钟周期TCLK的12倍;TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 *1微秒=8.912毫秒
方式1 TMAX=216 *1微秒=65.536毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
3.31秒的方法
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到可以返回到输出时间显示程序。
相应程序代码
(1)主程序
定时器需定时50毫秒,故T0工作于方式1。
初值:
TC=M-T/T计数 =216 -50ms/1us=15536=3CBOH
ORG1000H
INIT:
MOV R2, #20 ;软件计数器赋初值
MOVTMOD,#01H;令T0为定时器方式1
MOVTH0,#3CH;装入定时器初值
MOVTL0,#BOH ;
MOVIE, #82H;开T0中断
SEBT TRO ;启动T0计数器
(2)中断服务子程序
ORG000BH
LJMP DSZD
DSZD:
PUSHACC;保护现场
PUSHPSW
AJMPTIME;跳转到时间及信号灯显示子程序
DJNZ:
MOVR0,#14H ;恢复R0值
MOVTH0,#0B0H;重装入定时器初值
MOVTL0,#3CH ;
DJNZR2,DS_C;判定1S时间是否到达
MOVR2,#20;恢复R2值
3.4紧急中断处理程序
URZD:
PUSHACC;;;保护现场
PUSHPSW
CLRIE0;;;清除中断标志位
CLRTR0;;;关定时器
CPLURF;;;紧急事件标志位
JBURF,UR_CON;;;紧急结束;跳转
MOVP0,#49H;;;各路口灯全显示红灯亮
MOVP2,#15H
AJMPUR_R
UR_CON:
SETBTR0;;;恢复正常交通
MOVA,32H
MOVP0,A
MOVA,33H
MOVP2,A
UR_R:
POPPSW;;;恢复现场
POPACC
RETI
3.5软件延时
MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为6MHZ。
机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
D5MS:
MOVR7,#5延时5ms秒子程序
D1MS:
MOVR7,#10
MOVR6,#50
L1:
MOVR6,$;延时1ms子程序
MOVR7,L1
RET
MOVRN,#DATA;字节数数为2,机器周期数为1
所以此指令的执行时间为2ms,而l1为一个双重循坏循环次数为10*50=500所以延时时间=500*2=1000us约为1ms。
由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
4、电路图操作步骤及各部分功能图:
4.1电路图操作步骤
(1)在Pretues中放置元器件,布线
元器件清单:
7SEG-MPX2-CC
DISPLAY
CAP-ELEC
DEVICE
AT89C51
MSC8051
RES
DEVICE
器件名称
所在库
器件名称
所在库
BUTTON
ACTIVE
RESPACK-8
DEVICE
CAP
DEVICE
TRAFFICLIGHT
ACTIVE
CRYSTAL
DEVICE
(2)为AT89C51加载程序
在keil程序中将程序输入,然后生成.HEX文件,方法如下:
鼠标选中target1,在工具栏中找到project中的optionsfor‘Target1’可见下图,在output选项中选择生成HEX文件,即可编译
回到Pretuse软件中双击单片机AT89C51,如下图在programfile处加载刚刚生成的.HEX文件
(3)接下来仿真运行即可
(4)进行封装
1.进行电器检查(tools:
electricalrulecheck),没有错误(如图)后进行下面步骤
2.将没有封装的元器件进行封装(在ARES中根据元器件尺寸绘制单个元器件封装图)
以7SEG-MPX2-CC为例,在ARES中画好封装图,如下
然后,选中它右键选择makedevice,将元器件封装进库
OK即可
3.在ISIS中把封装加入未封装的元器件(同理makedivice)
在BROWSE中选择先前的封装图,NEXT即可直到OK
4.生成网络表(tools:
netlistcomplier)
5.将网络表加入ARES(tools:
netlisttoARES)
6.设置电路板工作层以及工作环境(system:
setlayerusage)
设置为如下即可
7.在boardedge画出机械层,之后自动布线(tools:
autoplacer)
8.整理好之后,布线(tools:
outrouter:
beginrouting)
如图:
9.检测(tools:
connectivitychecker)
9.覆铜(tools:
powerplanegenerator),选择GND/VCC以及哪一层
10.生成3D效果(output:
3Dvisualization)
4.2各部分功能图
1、AT89C51单片机的复位方式和复位电路
复位操作:
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或者操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键以重新启动。
89C51的RST脚为复位信号输入端,低电平复位,在每次开机时进行复位,然后在+5V的高电平进入工作状态。
10uS电容用于使芯片在反复上电的情况下得到可靠复位。
根据应用的要求,复位操作通常有两种基本形式:
上电自动复位和按键手动复位。
上电复位要求接通电源后,自动实现复位操作。
通常用的上电复位电路如图2-3所示。
图中电容C和电阻R对电源Vcc来说构成微分电路。
上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R也能达到上电复位的操作功能。
所谓手动复位,是指通过接通一按钮开关,使单片机进入复位状态。
系统上电运行后,若需要复位,一般是通过手动复位来实现的。
通常采用手动复位和上电复位结合,其电路如下图所示:
复位操作还对单片机的个别引脚信号有影响,例如把ALE和PSEN非信号变为无效状态,即ALE=0,PSEN=1;复位信号及其产生RST引脚是复位信号的输入端,复位信号是高电平有效,其有效时间持续24个振荡脉冲周期(即2个机器周期)以上,若使用频率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。
整个复位电路包括芯片内外两部分。
外部电路产生的复位信号(RST)送施密特触发器,再由片内复位电路在每个机器周期的S5时刻对施密特触发器的输出进行采样。
然后才得到内部复位操作所需要的信号。
2、时钟振荡电路
该电路由89C51的XTAL1和XTAL2脚内电路及外接的晶体和外接电容等组成。
振荡电路产生的振荡信号提供给微电脑电路作为时基信号。
振荡电路的振荡频率为6MHZ,由晶体振荡频率确定。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路如图2-9所示,图中,电容器C1、C2起稳定振荡频率、快速起振的作用,其电容值通常取30PF左右。
晶振频率的典型值位12MHZ,采用6MHZ的情况也比较多。
内部振荡方式的时钟信号比较稳定,实用电路中使用较多。
由图外部振荡信号由XTAL2引入,XTAL1接地。
为了提高输入电路的驱动能力,通常使外部信号经过一个带有上拉电阻的TTL反相门后接入XTAL2。
3、键盘电路
因本系统使用的按键数目少,故按键采用硬件去抖。
按键电路如图2-8所示。
用两个与非门构成一个RS触发器。
当按键按下时情况依次为南北向延时、东西向延时、紧急情况,如下图:
4、显示电路
交通显示由trafficlight和7seg-mpx2-cc组成,如图
5、系统分析及改进措施
智能控制交通系统实现是目前研究的方向,也已经取得不少成果,但传统的定时交通灯控制仍然在一些地方广泛应用,那是车流量不大,而且交通道路相对好的地方,传统的定时交通灯控制还是起到了一定的作用。
但随着社会的高速发展,城市化日益完善,车的数量必然增多,给交通的压力也增大,这时候,智能交通灯控制将会起到疏导交通,改善城市交通环境,推动城市化日益完善!
基于Proteus智能交通灯控制系统软件设计上有两个主要特点,一方面是本设计采用模糊控制方法实现交通的控制,由于模糊控制不需要建立被控对象精确的数学模型,特别适用于随机的.复杂的城市交通控制,因此以多变少为例子,在通行时间方面控制设置为40s→25s→40s→25s→40s为一个循环,根据车流量,合理分配了通行时间。
另一方面,设计应急转换开关,考虑紧急车通过时,譬如,急救车或消防车执行紧急任务通过时,两车道的车都应停止,让紧急车通过。
实验测试结果证明用本系统STC单片机能完成交通灯控制过程,有效地疏导交通,提高了交通路口的通行能力.
该系统应用了单片机实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能力.
但功能还不够完善,比如交通灯红、黄、绿时间还不能按交通紧松完成手控调整,软件编写实现功能还不能很好控制硬件,本系统将增加更多功能,比如手控时间的调节,摄像机交通监控的控制,盲人通过时交通灯的控制等,使系统更加完善.
总结
经过两周的努力工作,终于完成了老师交给的任务。
在本次的实训中我主要完成了以下的工作:
(1)pretuse电路图的绘制以及封装
(2)学会了利用Keil对汇编语言进行PROTEUS软件的联调
(3)掌握了电子系统设计的流程,熟悉了各种硬件电路以及软件编程方法。
(4)理解了单片机的各部分组成及特性。
(5)熟练使用了各种计算机辅助设计工具完成设计。
通过本次的课程设计,学会了如何操作Pretues软件,以及keil联调,学习了新知识的同时有巩固了原有所学,为以后的毕业设计打好了良好的基础。
附录:
源程序:
;------------------------------------
;程序实现功能
;西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。
;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。
;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。
;工作寄存器及存储单元分配
;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
;///////////初始化程序
INIT:
SETBSNF
SETBEWF
SETBURF
MOVR2,#20;;;定时器中断20次为1s
MOVTMOD,#01H;;;初始化定时器
MOVTL0,#0B0H
MOVTH0,#3CH
SETBEA;;;开定时中断与紧急中断
SETBET0
SETBTR0
SETBEX0
SETBIT0;;;设置中断程控方式
MOVDPTR,#TAB;;;数值首地址放入DPTR中
MOV40H,#40;;;东南西北通行时间设置
MOV41H,#40
MOV30H,#40;;;通行时间初始化
MOV31H,#60
MOVP0,#4CH;;;初始化时南北通行并把交通灯状态分别放在32H和33H中
MOV32H,#4CH
MOVP2,#15H
MOV33H,#15H
RET
;////////////显示子程序
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,D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 交通灯 控制系统 设计