基于proteus智能交通灯的设计与实现.docx
《基于proteus智能交通灯的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于proteus智能交通灯的设计与实现.docx(23页珍藏版)》请在冰豆网上搜索。
![基于proteus智能交通灯的设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-1/1/e2c14508-deef-4a5c-b0b6-64e32e706e98/e2c14508-deef-4a5c-b0b6-64e32e706e981.gif)
基于proteus智能交通灯的设计与实现
摘要
随着社会经济的发展,城市交通问题越来越引起人们的关注。
而现代社会交通十分发达十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
靠的就是城市交通信号灯的自动指挥控制系统。
城市交通自动指挥控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
文中采用PROTEUS制作的智能交通灯可以根据城市道路的具体情况设计出一种较好的控制电路,交通灯设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。
加上一个倒计时的显示计时器来控制行车。
文中采用PROTEUS制作的智能交通灯在Keil,Wave6000上进行交通模拟仿真软件上测试,测试结果表明该智能交通灯各项功能在实际运行中的可行性,同时在实际应用及运行中也取得了不错的效果。
关键词:
PROTEUS;交通灯;单片机;仿真
前言
交通是一个城市经济的动脉,它不但体现了一个城市的发展活力,也直接与老百姓的生活息息相关。
随着我国经济的高速发展,人们对私家车、公交车的需求越来越大。
相应地,我国进入WTO以后,我国经济贸易与世界接轨,汽车业关税大大降低,使很多人都能负担得起,买私家车已经不再是遥不可及的梦。
但是,车辆的增加无疑会对我国城市交通系统带来沉重的压力。
而交通灯在这个交通环境中起着一个重要的角色,智能的交通灯能有效地缓解城市的交通压力,减少交通事故;智能的交通灯能为当地人民节省大量出行时间,创造出更多的社会价值;智能的交通灯为交通顺畅提供了保障,对当地经济起着一个不可估量的作用。
目前设计交通灯的方案有很多,有应用CPLD设计实现交通信号灯控制器方法,有应用PLC实现对交通灯控制系统的设计。
有应用单片机实现对交通信号灯设计的方法。
目前,国内的交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯。
加上一个倒计时的显示计时器来控制行车。
对于一般情况下的安全行车,车辆分流尚能发挥作用。
但在十字路口,经常一个车道为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间应该短些。
但在实际行车过程中,两车道的车辆轮流放行时间相同且固定。
这样就会存在一定的缺陷。
目前国内交通灯的发展趋势是拥有自动调整亮灯时间长短的功能。
譬如说,它能自动感应该地区的交通情况,如果塞车的话该交通灯能自行控制红、黄与绿等的亮灯时间长短。
系统还可以加上红外线接收器,相应地,紧急车辆(如消防车、救护车等)上应当装置红外线放射器。
这样,在离交通信号灯远处,紧急车辆就可以开红外线放射器使交通信号灯全部显示红灯,避免因交通问题导致不必要的人命伤亡和金钱损失。
另外系统还可以加一个点阵式LED中文显示屏,用以显示温度、天气情况、空气指数等,方便司机对外界情况的了解。
第一章交通灯的设计思路
1.1系统模拟交通灯的控制要求
假设十字路口为东西南北走向,初始状态0东西南北都是红灯,然后转状态1东西绿灯通车25s,南北红灯,过25s转状态2东西绿灯闪3s转黄灯亮2s,南北仍亮红灯。
过后转状态3南北绿灯通车25s,东西红灯,过25s转状态4南北绿灯闪3s转黄灯亮2s,东西仍亮红灯。
依次循环执行下去。
1.2设计方案
目前设计交通灯的方案有很多,有应用CPLD实现交通信号灯控制器的设计,有应用PLC实现对交通灯控制系统的设计。
有应用单片机实现对交通信号灯设计的方法。
由于AT89S51单片机自单带有2计数器,6个中断源,能满足系统的设计要求。
用单片机设计不但设计简单,而且成本低,用其设计的交通灯也满足了要求,所以本文采用单片机设计交通灯,系统构图如(图1-1)所示:
图1-1系统构图
1.3设计思路
用6只发光二极管模拟交通信号灯,以单片机的P2口控制东西南北灯的走向;口线输出高电平则“信号灯”亮,口线输出低电平则“信号灯”熄,各口线控制功能及相应的控制码如(表1-1)所示:
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
东西绿灯
东西黄灯
东西红灯
南北绿灯
南北黄灯
南北红灯
1
0
0
0
0
1
0
1
0
0
0
1
0
0
1
1
0
0
0
0
1
0
1
0
表1-1控制码表
控制码所对应的流程图如(图1-2)所示
图1-2流程图
第二章单片机主控电路和中断系统
2.1主控电路及管脚说明
2.1.1主控电路
单片机主控电路一般采用的主要元件是AT89C51,但在实际应用中我们主要采用AT89S51,AT89S51相对于AT89C51增加的新功能包括:
--新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低。
--ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。
是一个强大易用的功能。
--最高工作频率为33MHz,而89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
--具有双工UART串行通道。
--内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
--双数据指示器。
--电源关闭标识。
--全新的加密算法,这使得对于89S51的解密变为不可能,程序的XX性大大加强,这样就可以有效的保护知识产权不被侵犯。
--兼容性方面:
向下完全兼容51全部字系列产品。
比如8051、89C51等早期MCS-51兼容产品。
也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。
AT89S51的外形及单片机最小系统如(图2-1)所示:
图2-1AT89S51外形及最小系统
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51是一个低功耗高性能单片机,40个引脚,8kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),5个中断优先级2层中断嵌套中断,看门狗(WDT)电路,片内时钟振荡器。
32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S51可以按照常规方法进行编程,也可以在线编程。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
2.1.2管脚说明
VCC(40):
供电电压,引入单片机的工作电源。
(本设计中隐藏)
GND(20):
接地。
(本设计中隐藏)
P0口(32-39)双向输入/出口,如果系统接有外部存储器则P0口作为数据总线和低8位的地址总线,通过分时操作达到服用的目的。
CPU对外部存储器操作时先作地址总线,在ALE信号的下降沿,将地址锁存,然后转为数据总线。
P1口(1-8)准双向输入/出口,准双向是指该口内部有上拉电阻,能驱动4个LS/TTF负载。
P2口(21-28)准双向输入/出口,能驱动4个LS/TTF负载。
如果系统接有外部存储器,则CPU访问外部存储器时改口成为高8位地输出线。
P3口(10-17)准双向输入/出口,能驱动4个LS/TTF负载。
P3口每一引脚都有两种功能,其第二功能如下:
P3.0RXD,串行口接收端。
P3.1TXD,串行口发送端。
P3.2
,外部中断请求0的输入端。
P3.3
,外部中断请求0的输入端。
P3.4T0,定时/计数器0的外部计数信号输入端。
P3.5T1,定时/计数器1的外部计数信号输入端。
P3.6
外部数据存储器写选通信号。
P3.7
,外部数据存储器读选通信号。
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
此引脚也可作为备用电源输入端,当Vcc失电期间,由Vpd向片内RAM提供电源,以保护其中内容。
ALE/
(30)用于输出允许地址锁存信号。
8051单片机可寻址64KB,应有16条地址线,其中低8位的地址线与数据线共用P0口,在发出低8位的地址信号时ALE有效,用它控制外部锁存器锁存地址低8位,发出数据时,ALE无效,P0输出数据。
正常操作时又因能按主振频率1/6的固定频率,从ALE端发出正脉冲信号。
所以有时可以加以利用,但应注意,每次访问外部数据存储器时会少输出一个ALE脉冲。
这个引脚另一功能是在EPROM编程时,作为编程脉冲输入。
(29)用于输出外部程序存储器选通信号。
在对外部程序存储器取指操作时非PSEN置有效(低电平);在执行对片内程序存储器取指操作时,非PSEN为无效(高电平)。
对外部取指时,
每个机器周期有效两次。
/Vpp(31)用于输入从外部程序存储器取指或从内部程序存储器取指的选择信号。
当
接高电平时低4KB指令在片内读取,
接低电平时则所有指令均在片外读取。
XTAL1(18)外接晶体的一个引脚,若采用外部时钟信号,此引脚接地。
XTAL2(19)外接晶体的另一个引脚,若采用外部时钟信号,此引脚接外部振荡器。
2.2MCS-51的中断源
引起终端的原因,或者能发出中断申请的来源,称为中断源。
中断可以认为设定,也可以是为响应突发性随机事件而设置,通常有I/O设备,实时控制系统中的随机参数和信息故障源等,8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。
其中5个中断源的程序入口地址如(表2-1)所示:
中断源的服务程序入口地址
中断源
入口地址
外中断0
0003H
定时/计数器0
000BH
外中断1
0013H
定时/计数器1
001BH
串行口中断
0023H
(表2-1)中断源程序入口地址
2.3中断处理流程
CPU响应中断请求后,就立即转入执行中断服务程序。
它们的一般处理流程如图(2-2)所述:
图2-2中断一般处理流程
但对于不同的中断源、不同的中断要求可能有不同的中断处理方法,具体如图(2-3)所述:
图2-3具体的中断处理流程
(1)现场保护和现场恢复:
中断是在执行其它任务的过程中转去执行临时的任务,为了在执行完中断服务程序后,回头执行原先的程序时,知道程序原来在何处打断的,各有关寄存器的内容如何,就必须在转入执行中断服务程序前,将这些内容和状态进行备份——即保护现场。
我们举个例子,在看书时,玲响需传去接时,必须在书本上做个记号,以便在接完后回来看书时,知道从哪些内容继续往下看。
计算机的中断处理方法也如此,中断开始前需将有关寄存器的内容压入堆栈进行保存,以便在恢复原来程序时使用。
中断服务程序完成后,继续执行原先的程序,就需把保存的现场内容从堆栈中弹出,恢复积存器和存储单元的原有内容,这就是现场恢复。
如果在执行中断服务时不是按上述方法进行现场保护和恢复现场,就会是程序运行紊乱,程序跑飞,自然使单片机不能正常工作。
(2)中断打开和中断关闭:
在中断处理进行过程中,可能又有新的中断请求到来,这里规定,现场保护和现场恢复的操作是不允许打扰的,否则保护和恢复的过程就可能使数据出错,为此在进行现场保护和现场恢复的过程中,必须关闭总中断,屏蔽其它所有的中断,待这个操作完成后再打开总中断,以便实现中断嵌套。
(3)中断服务程序:
中断服务程序从中断入口地址执行,到返回指令RETI为止,一般包括两部分内容:
一是保护现场;二是完成中断源请求的任务。
既然有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容,一般以子程序的形式出现,所有的中断都要转去执行中断服务程序,进行中断服务。
(4)中断返回:
中断返回通常是指中断服务完成后,计算机返回原来断开的位置(即断点),继续执行原来的程序,中断返回由中断返回指令RETI来实现,这条指令的功能是指断点地址从堆栈中弹出,送回到程序计时器PC,此外,还通知中断系统已完成中断处理,并同时消除优先级状态触发器。
2.4交通灯的中断处理流程
(1)现场保护和现场恢复:
有特殊车辆要通过时就要进行中断,在中断之前,先将交通灯中断前情况保护好,当中断执行后再恢复现场,包括信号灯和时间显示电路。
(2)中断打开和中断关闭:
为了使特殊车辆通行按一下打开中断开关就可以打开中断,关闭中断开关就关闭中断。
(3)中断服务程序:
如有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容:
即如果有特殊车辆需要经过时,南北东西均亮红灯,让特殊车辆通过。
(4) 中断返回:
执行完中断服务程序后,必然要返回,中断返回就是被程序运行从中断服务程序转回到原工作程序上来。
在MCS-51单片机中,中断返回是通过一条专门的指令实现的,自然这条指令是中断服务程序的最后一条指令。
2.5交通灯的硬件设计原理图
交通灯的硬件设计原理图如(图2-4)所示:
图2-4原理图
2.6交通灯的软件设计流程图及部分程序
根据智能交通灯的设计要求与原理我们设计的交通灯的软件设计流程图如(图2-5)所示:
设T0的工作方式为工作方式1,T0的定时初值为50ms,设东西南北各路口的时间显示初值为25s。
但东西南北时间警告时设定的东西南北计时初值为5s,绿灯闪烁3s,黄灯闪烁2s。
图2-5程序设计流程图
部分程序如下:
LOOP:
MOVR2,#20;置1s计数初值,50ms*20=1s
MOVR3,#20;红灯亮20s
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;判断1s到否?
未到继续状态1
MOVR2,#20;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持20s
子程序如下:
DISPLAY:
;数码显示
MOVA,SECOND1;东西路口计时寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+3,A
MOVA,B
MOVDBUF+2,A
MOVA,SECOND2;南北路口计时寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+1,A
MOVA,B
MOVDBUF,A
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#4
STATE1:
;状态1
SETBLED_G1;东西路口绿灯亮
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
第三章基于PROTEUS的电路设计和仿真
3.1PROTEUS软件简介
PROTEUS嵌入式系统仿真与开发平台是由英国公司开发的EDA工具软件,是目前世界上最先进最完整的嵌入式系统设计和仿真平台,Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,Proteus为我们建立了完备的电子设计开发环境。
真正实现了在没有目标原形时就可对系统进行调试,测试和验证,PROTEUS软件大大提高了企业的开发效率,降低了开发风险。
3.2PROTEUS软件的强大功能
Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计.
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型.
(1)支持许多通用的微控制器,如PIC,AVR,HC11以及8051.
(2)交互的装置模型包括:
LED和LCD显示,RS232终端,通用键盘,
(3)强大的调试工具,包括寄存器和存储器,断点和单步模式
(4)IARC-SPY和KeiluVision2等开发工具的源层调试
(5)应用特殊模型的DLL界面-提供有关元件库的全部文件
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
所以说PROTUES是一种十分优秀的软件。
3.3用PROTEUS绘制电路图
运行PROTEUSVSM的ISIS后出现如(图3-1)所示的界面,点状的栅格区域为绘图区。
左侧的上方为电路图概览区,下方是元器件列表区。
单击P后出现(图3-2)所示的PickDevice添加元器件的对话框,输入所要添加的器件名称,则该器件就会出现在右侧,单击OK按钮,完成一个元器件的添加。
重复以上过程,添加好电路中所需的元器件。
绘图区
图3-1 运行PROTEUSVSM的ISIS后出现的界面
图3-2 添加元器件的对话框
在元器件列表区选中某元器件后,在电路图概览区会出现该元器件,用鼠标将其拖至绘图区,将所有需要的元器件在绘图区放置好,即可开始连线。
连线方法很简单,将鼠标移至元器件引脚后会出现一个小十字,单击鼠标左键后移动鼠标,将线引至某一引脚处会再次出现小十字,再次单击左键就完成了一条连线。
在布线时,如果需要转弯,可以在转弯处单击鼠标左键。
此处以89S51构成的交通灯为例,(图3-3)是绘制完成的电路图。
图3-3绘制完成的电路图
3.4PROTEUS和KEIL编译器的结合使用
Proteus在设计时已经注意到和单片机各种编译程序的整合了,如它可以和Keil,Wave6000等编译模拟软件结合使用。
由于Keil使用方便,具备强大的软件仿真和硬件仿真功能。
把Proteus和Keil结合起来调试硬件就方便多了,本设计就是采用“Proteus+Keil”的仿真方法,具体步骤如下:
(1)首先运行PROTEUSVSM的ISIS,选择Source→DefineCodeGenerationTool菜单项,将出现如(图3-4)所示定义代码生成工具对话框。
图3-4定义代码生成工具对话框
在Tool下拉列表框中选择代码生成工具,在这一示例中,电路中的微处理器为8051系列单片机,因此选择ASEM51,单击Browse按钮,选取Keil的安装路径。
单击OK按钮,结束代码生成工具的定义。
选择Source→Add/RemoveSourceFile菜单项,将出现Add/RemoveSourceCodeFiles对话框,如(图3-5)所示:
图3-5添加/删除源文件对话框
在CodeGenerationTool选项区,单击下三角按钮,选择ASEM51工具。
(2)单击New按钮,将出现如(图3-6)所示对话框。
图3-6创建源代码对话框
选择用Keil创建好的AA.ASM文件,即完成了文件的创建。
就这样当用Keil对AA.ASM文件进行更改时每一次运行PROTEUSVSM的ISIS对电路进行仿真时Keil都会对AA.ASM进行编译,AA.HEX文件也会随时更新。
3.5PROTEUS对单片机的仿真
电路图绘制完成后,再添加AT89S51的应用程序。
将鼠标移至AT89S51上,单击鼠标右键使之处于选中状态,在该器件上单击左键,打开如(图3-7)所示的对话框。
在ProgramFile栏添加编译好的十六进制格式的程序文件AA.hex(可以接受3种格式的文件),给AT89S51输入晶振频率,此处默认为8MHZ,单击OK按钮完成程序添加工作,下面就可以进行系统仿真了。
单击主界面下方的按钮开始系统仿真。
PROTEUSVSM所进行的是一种交互式仿真,在仿真进行中可以对各控制按钮、开关等进行操作,系统对输入的响应会被真实的反映出来。
仿真结果如(图3-8、3-9、3-10、3-11)所示。
在本设计中,开始仿真后,开关,按钮通过鼠标单击来改变状态,所改变状态的状态会在LED和数码管显示出来。
图3-7为AT89S51添加程序
图3-8东西绿灯南北红灯
图3-9东西黄灯警告
图3-10东西红灯南北绿灯
图3-11南北黄灯警告
以上是一个完整的交通灯仿真结果。
图(3-8)是东西绿灯南北红灯,显示时间是25s,若25s未到则继续执行,若25s时间到则转至图(3-9)东西黄灯警告黄灯亮2s;若2s时间到就继续循环执行转至图(3-10)东西红灯南北绿灯,同样执行25s,若25s未到则继续执行,若25s时间到则转至图(3-11)南北黄灯警告黄灯亮2s。
程序则一直如此循环执