资源描述
交通灯的控制
摘 要:本设计以AT89C51单片机为主控模块,主要由按钮开关,数码管,发光二极管组成,利用汇编语言编写程序来模拟对十字路口的交通管理,系统包括左右拐,直行,人行道四个基本的交通等功能.南北方向亮绿灯60s,然后黄灯闪烁3次,每次一秒(亮灭各40ms),红灯40s,同时东西方向红灯65s,绿灯35s,黄灯闪烁3s。各路灯用LED模拟显示,同时用七段数码管显示两路的倒计时时间.利用键盘可修改灯亮时间PC机设置灯亮时间,利用PC与单片机串口通信实现 。为防止出现紧急情况(如119,110通过时),该系统还设置了中断,可通过按键使各个路口为红灯其它车辆禁行,特殊车辆通行的状态,当东西方向为通行状态时,南北方向有突发情况,也可通过手动按键使东西方向为红灯,南北方向为绿灯.
在对系统的分析基础上,提出了几种设计方案,经比较选择各方较好的LED动态循环显示方案进行设计,设计包括硬件和软件两大部分单片机最小系统,时间显示,交通等显示三部分。以AT89C51为控制核心,东西南北各设置3个交通灯,东西,南北方向各设置一个2位的数码管时间显示器,交通灯显示则采用红绿黄三色高亮发光二极管模拟,软件采用模块化的设计方法,主要分为主程序,定时中断服务子程序,倒计时显示子程序,交通灯模拟显示子程序。
软件设计完成,经过对该设计程序模拟测试,可实现对十字路口交通的良好管理,预期目标全部达到,该系统操作简单,实用性强,扩展功能好.
关键词:AT89C51 数码管 光二极管 中断 模拟
目录
1前言5
1.1该课程选题背景5
1。2该课程选题现实意义5
1。3单片机交通灯研究任务5
2设计方案6
2.1方案设计目的6
2。2方案设计思路6
2.3方案设计原理7
3系统硬件设计8
3。1 AT89C51芯片简介8
3。2 74LS47芯片简介11
3。3系统总框图12
3。4、交通灯硬件线路12
3.5、系统工作原理12
4.软件设计13
4.1每秒钟的设定13
4.2秒的方法13
4。3相应程序代码13
4.4、键盘显示流程图14
4。5、 软件延时14
5 Proteus软件仿真15
5。1正常运行时状态15
5。2黄灯亮时状态16
5。3应急情况下状态16
6 设计心得体会17
附录1:源程序代码18
附录2:硬件连接图23
参考文献23
1前言
1.1单片机交通控制系统的选题背景
世界上第一盏正式投入使用的交通信号灯出现在1868年12月10日,这盏身高7米,由德哈特设计的红绿两色煤气灯出现在议会大厦前的十字路口。一位警察手持长杆牵动皮带转换红绿两色:红灯停,绿灯行。
随着人口快速的增多,交通工具的爆炸性的发展,以及道路资源的有限性,交通控制就应运而生,在人类的生活、工作环境中,交通扮演着极其重要的角色,人们的出行都无时不刻与交通打着交道。自18世纪工业革命以来,工业发展带动整个交通运输的发展,从而催生了单独的交通控制学问与管理机构.
道路交通信号灯是交通安全产品中的一个类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具.适用于十字、丁字等交叉路口,由道路交通信号控制机控制,指导车辆和行人安全有序地通行。
1.2 单片机交通控制系统选题的现实意义
城市道路交通自动控制系统的发展是以城市交通信号控制技术为前导,与汽车工业并行发展的。在其各个发展阶段,由于交通的各种矛盾不断出现,人们总是尽可能地把各个历史阶段当时的最新科技成果应用到交通自动控制中来,从而促进了交通自动控制技术的不断发展。
交通网络是城市的动脉,象征着一个城市的工业文明水平。交通关系着人们对于财产,安全和时间相关的利益。具有优良科学的交通控制技术对资源物流和人们出行都是十分有价值的,保证交通线路的畅通安全,才能保证出行舒畅,物流准时到位,甚至是生命通道的延伸。
1。3单片机交通控制系统主要研究的内容
基于整个交通控制系统的发展情况,本设计主要进行如下方面的研究:用智能,集成,且功能强大的单片机芯片为控制中心,设计出一套十字路口的交通控制系统,以指挥该路口的实时通行状态.
本设计主要做了如下几方面的工作:
一是确定系统交通控制的总体设计,包括十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还增加了倒计时显示提示,基于实际情况,又要求了对车流量检测及自调整模拟功能,违规检测及处理,紧急状况处理。
二是进行智能传感器的硬件电路,显示电路等的设计对各器件的选择及连接,大体分配各个器件及模块的基本功能要求。
2方案设计
2。1课程设计目的
2。1.1巩固和加深对单片机原理和接口技术知识的理解;
2。1。2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;
2。1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;
2。1。5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图.
2。1。6通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。
2。1。7通过交通信号灯控制系统的设计,掌握定时/计数器及中断的使用方法,和简单程序的编写,最终提高我们的逻辑抽象能力。
2。2设计思路
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。设东西道比南北道的车流量大,指示灯燃亮的方案如表1:
车道\时间
60s
3s
2s
35s
3s
东西道
绿灯
黄灯
红灯
红灯
红灯
南北道
红灯
红灯
红灯
绿灯
黄灯
表1
表1说明:(1)当东西道为绿灯,此道车辆通过,行人禁止通行。时间为60秒;南北方向为红灯,此道车辆禁止通行,南北道行人可通过。
(2)当东西方向为黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换;南北方向为红灯,此道车辆禁止通行,南北道行人可通过。
(3)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;当南北方向为红灯,此道车辆禁止通行,南北道行人可通过.
(4)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;东西道为绿灯,此道车辆通过,行人禁止通行。时间为35秒。
(5)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北方向为黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换。
(6)此表可根据车流量动态设定红绿灯初始值。
2。3设计原理
人行道
人行道
人行道
人行道
1、首先了解实际交通灯的变化情况和规律.假设一个十字路口如上图所以,为东南西北走向。初始状态0为东西南北都红灯亮。然后转状态1东西红灯亮,南北绿灯亮通行.过一段时间后,转状态2,黄灯亮,东西红灯灭,南北绿灯灭。再转状态3,东西绿灯通车,南北红灯亮.过一段时间后转状态4,黄灯亮,东西绿灯灭南北红灯灭.一段时间后,又循环至状态1。中间可通过中断按钮产生中断,跳入中断程序执行中断。列出交通信号灯的状态表如下:(其中,1代表灯亮,0代表灯灭)
状态
北
西
南
东
绿黄红
绿黄红
绿黄红
绿黄红
0
001
001
001
001
1
100
001
100
001
2
010
010
010
010
3
001
100
001
100
4
010
010
010
010
2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。
3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理.每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。
4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展.
5、通过脉冲中断编写中断程序,可实现中断。
3系统硬件设计
选用设备:AT89C51单片机一片,74LS47芯片二片,电阻排RESPACK—7三个,共阴极的七段数码管7SEG-MPX2-CA两个,红、黄、绿交通灯各四个,开关键盘、连线、电阻、电容若干。
3。1、AT89C51芯片简介
AT89C51单片机内部结构
AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线.
MCS—51的引脚说明:
MCS—51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用
经综合对本系统的分析,选用AT89C51单片机就非常合适,
AT89C51有P0,P1,P2,P3四个外部接口,介绍如下:
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入端用。
在访问外部数据存储器或程序存储器时,P0口被分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1"时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).
此外,P1。0和P1.2分别作定时器/计数器2的外部计数输入(P1。0/T2)和时器/计数器2的触发输入(P1。1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。
P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路.对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口.P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路.对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流。
RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG-—当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节.一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG).
PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号.
EA/VPP—-外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地).需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
下图是MCS-51系列单片机的内部结构示意图1。
图1
单片机的复位及初始化如图2:
图2
3。274LS47芯片简介
74LS47的端子功能图如下图3:
图3
74LS47的主要功能端如下:
BI为熄灭输入端,低电平有效,当BI=0时,无论其他输入端状态如何,译码器输出七段同时熄灭;BI=1时,不影响译码器正常译码。
LT为测试输入端,低电平有效,用于检查数码管的七段是否正常发光.当LT=0,同时BI=1时,不管输入的B南北码是什么状态,都可使驱动数码管的七段同时点亮。译码器要正常译码,必须LT输入无效电平。
RBI为灭零输入端,低电平有效.设置灭零输入端的目的是为了能将不希望显示的0熄灭,例如一个四位数码显示电路,整数部分两位,小数部分两位,在显示6。4时,将出现06.40的字样,如果将前、后多余的0熄灭,显示的结果更醒目一些.灭零输入端只能对显示的0进行熄灭,而对其他数字没有影响。
在原理图中,译码器与数码管的连接如图4:
图4
3。3系统总框图如下:
74LS47七段驱动器数据口
数码管显示CD方向时 间
89C51系 统 处 理
键盘设置时间参数
东西和CD方向红绿黄三种灯的显示情况
74LS47七段驱动器数据口
数码管显示东西方向时 间
3。4、交通灯硬件线路图:
3.5、系统工作原理
(1)开关键盘a、改变数码管显示的时间;b、开关控制十字路口十个方向的灯同时显示红灯且数码管显示00.
(2) 由AT89C51单片机每秒钟通过P0、P2口向74LS47的数据口送信息,由P1口显示红、绿、黄灯的燃亮情况;由7SEG—MPX2—CA显示每个灯的燃亮时间。
(3)AT89C51 P3。3为低电平时,P1口对应的红灯即四个方向的红灯亮,数码显示为00.
(4 AT89C51 P3。2有下降沿触发时,时间暂停,进入时间显示状态,当P3.6为低电平时,时间显示以240ms的速度进行加1;当P3。7为低电平时,时间显示以240ms的速度进行减1;当P1.0为低电平时,时间暂停消除,恢复正常.
(5)初始状态东西方向绿灯60秒南北方向红灯65秒.
(6)当东西方向绿灯60秒倒计时完了。进入下一阶段,东西方向黄灯3秒,且黄灯以40ms的速度闪烁;南北方向红灯5秒。
(7)当东西方向黄灯3秒倒计时完。进入第三阶段,东西方向红灯40秒;南北方向红灯2秒.
(8)当南北方向红灯2秒倒计时完.进入第四阶段,东西方向红灯38秒;南北方向绿灯35秒。
(9)当南北方向绿灯35秒倒计时完.进入第五阶段,东西方向红灯3秒;南北方向黄灯3秒,且黄灯以40ms的速度闪烁。
(10)东西方向红灯和南北方向黄灯3秒同时倒计时完毕,重新循环。
4.软件设计
4.1、每秒钟的设定
延时方法可以有两种一中是利用AT89C51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
4。2、秒的方法
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。
4.3、相应程序代码
(1)主程序
定时器需定时10毫秒,故T0工作于方式1。 初值:
T0初值=216—fose/12Xt=216-(12X106X0.01)/12=55536D=D8F0H
ORG 0000H
MAIN: MOV TMOD,#01H
MOV TL0,#0F0H
MOV TH0,#0D8H
SETB EA
SETB ET0
SETB TR0
SETB EX0
SETB EX1
SETB IT0
CLR IT1
SETB PT0
(2)中断服务子程序
ORG 000BH
ZHD2: MOV TL0,#0F0H ;重先赋值
MOV TH0,#0D8H
CLR P3。4
RETI
4。4、键盘显示流程图
键盘“设置”按下
主程序
“加”键按下
程序设 置
“加”数字显示程序
“减”数字显示程序
主程序
“减”键按下
4.5、 软件延时
MCS—51的工作频率为2—12MHZ,我们选用的AT89C51单片机的工作频率为12MHZ。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12M)=1us.我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
DEL: MOV R7,#40 ; ;延时10ms
DEL1: MOV R6,#123
NOP
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
5 、Proteus软件仿真
5。1交通灯控制系统正常运行时仿真图(见下图)
5。2 交通灯东西方向向南北方向转变,黄灯亮
5。3应急情况下,东西南北方向都为红灯,如下图
6、设计心得体会
通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步.本次课程设计的过程是艰辛的,不过收获却是很大的.
在设计过程中,会出现了一些问题,但都是常见的小问题,如:代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调试时出现异常,不过这些都是经常性错误,经过调试修改都一一解决,程序顺利完成,并实现了其功能。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流.
由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高等等,这需要在实践中进一步完善.
当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我。
附录1: 源程序代码
ORG 0000H ;伪指令、程序开始、中断入口地址
LJMP MAIN
ORG 0003H
LJMP ZHD1
ORG 000BH
LJMP ZHD2
ORG 0013H
LJMP ZHD3
ORG 1000H
;主程序
MAIN:MOV TMOD,#01H ;设工作方式
MOV TL0,#0F0H ;设初值 ,单片机晶振12M,定时10ms
MOV TH0,#0D8H
SETB EA ;开放总中断
SETB ET0 ;开放T0中断
SETB TR0 ;启动T0定时
SETB EX0 ;开放外中断0
SETB EX1 ;开放外中断1
SETB IT0 ;设外中断0为边沿触发
CLR IT1 ;设外中断1为低电平有效
SETB PT0
CYCLE:MOV R0,#60 ;AB方向绿灯显示时间
MOV R1,#65 ;CD方向红灯显示时间
MOV R2,#25 ;为延时1秒而用
;CD红灯 AB绿灯
LOOP1:SETB P3.4
MOV P1,#01H
SETB P1.7 ;点亮红灯
SETB P1。4 ;点亮绿灯
LCALL DISPLAY ;调用显示程序
DJNZ R2,LOOP1
MOV R2,#25
DEC R1
DJNZ R0,LOOP1
MOV R0,#3 ;AB方向黄灯显示时间
;CD红灯 AB黄灯
LOOP2:MOV P1,#01H
SETB P1。7 ;点亮红灯
SETB P1.3 ;点亮黄灯
LLJ: LCALL DISPLAY ;调用显示程序
CPL P1。3
DJNZ R2,LLJ
DEC R1
MOV R2,#25
DJNZ R0,LOOP2
MOV R0,#40 ;AB方向红灯显示时间
;CD红灯 AB红灯
LOOP3:MOV P1,#01H
SETB P1.7 ;点亮红灯
SETB P1。2 ;点亮红灯
LCALL DISPLAY ;调用显示程序
DJNZ R2,LOOP3
MOV R2,#25
DEC R0
DJNZ R1,LOOP3
MOV R1,#35 ;CD方向绿灯显示时间
;CD绿灯 AB红灯
LOOP4:MOV P1,#01H
SETB P1。5 ;点亮绿灯
SETB P1。2 ;点亮红灯
LCALL DISPLAY ;调用显示程序
DJNZ R2,LOOP4
MOV R2,#25
DEC R0
DJNZ R1,LOOP4
MOV R1,#3 ;CD方向黄灯显示时间
;CD黄灯 AB红灯
LOOP5:MOV P1,#01H
SETB P1.6 ;点亮黄灯
SETB P1.2 ;点亮红灯
LLJ1: LCALL DISPLAY ;调用显示程序
CPL P1。6
DJNZ R2,LLJ1
MOV R2,#25
DEC R0
DJNZ R1,LOOP5
LJMP CYCLE
;键盘中断程序
ZHD1: LCALL DISPLAY
JB P3。6,Q2
INC R1
INC R0
CJNE R1,#99,TIAO2
MOV R1,#00H
TIAO2:CJNE R0,#99,TIAO3
MOV R0,#00H
TIAO3:LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
JNB P1.0,Z2
Q2: JB P3。7,WAIT1
DEC R1
DEC R0
CJNE R1,#00H,TIAO
MOV R1,#99
TIAO: CJNE R0,#00H,TIAO1
MOV R0,#99
TIAO1:LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
WAIT1:JNB P1.0,Z2
WAIT: LJMP ZHD1
Z2: RETI
;时间中断程序
ZHD2: MOV TL0,#0F0H ;重先赋值
MOV TH0,#0D8H
CLR P3。4
RETI
;应急通道中断程序
ZHD3:MOV P1,#85H
MOV P0,#30H
MOV P2,#30H
JNB P3。3,ZHD3
RETI
;数显显示
DISPLAY:MOV A,R0 ;AB方向时间的显示
MOV B,#10
DIV AB ;把要显示的数的十位存放在A中,个位存放在B中
ADD A,#10H ;位选通十位
MOV P0,A ;显示十位数字
TI0: JNB P3。4,TT
SJMP TI0
TT: SETB P3。4
MOV A,B
ADD A,#20H ;位选通个位
MOV P0,A ;显示个位数字
TI1: JNB P3.4,TT1
SJMP TI1
TT1: SETB P3。4
;CD方向的显示
MOV A,R1 ;CD方向时间的显示
MOV B,#10
DIV AB
ADD A,#10H ;位选通十位
MOV P2,A ;显示十位数字
TI2: JNB P3。4,TT2
SJMP TI2
TT2: SETB P3.4
MOV A,B
ADD A,#20H ;位选通个位
MOV P2,A ;显示个位数字
TI3: JNB P3。4,TT3
SJMP TI3
TT3: SETB P3。4
RET
附录2:硬件连接图
参考文献
1、《单片微机原理与接口技术》主编:曾一红 副主编:刘虹、李寿强
2、《数字电子技术》蒋正萍、刘虹、张松、李小平编著
3、
展开阅读全文