交通灯.docx
《交通灯.docx》由会员分享,可在线阅读,更多相关《交通灯.docx(23页珍藏版)》请在冰豆网上搜索。
交通灯
信息科学与技术学院
单片机
课程设计报告
1.设计思路
(1)分析目前交通路口的基本控制技术以及各种通行方案,并以此为基础提出自己的交通控制的初步方案。
(2)确定系统交通控制的总体设计,包括,十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还增加了倒计时显示提示,基于实际情况,又增加了紧急状况处理和通行时间可调这两项特特殊功能。
(3)进行显示电路,灯状态电路,按键电路的设计和对各器件的选择及连接,大体分配各个器件及模块的基本功能要求。
(4)进行软件系统的设计,对于本系统,采用单片机汇编语言编写,了解定时器,中断以及延时原理,总体上完成了软件的编写。
2.单片机交通控制系统总体设计
2.1单片机交通控制系统的通行方案设计
设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如下图所示。
说明:
黑色表示亮,白色表示灭。
交通状态从状态1开始变换,直至状态6然后循环至状态1,周而复始,即如图2.1所示:
图1交通状态
状态总结:
(1)东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。
此状态下,东西向禁止通行,南北向允许通行。
(2)东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时5秒。
此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。
(3)南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时20秒。
此状态下,东西向允许通行,南北向禁止通行。
(4)南北方向绿灯灭,同时黄灯亮,东西方向红灯亮,倒计时5秒。
此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。
2.2单片机交通控制系统的功能要求
设计模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的
信号发生,还能进行倒计时显示,通行时间调整和紧急处理等功能。
(1)倒计时显示
倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。
驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。
倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择。
(2)时间的设置
本设计中可通过键盘对时间进行手动设置,增加了人为的可控性,避免自动故障和意外发生,并再紧急状态下,可设置所有灯变为红灯。
键盘是单片机系统中最常用的人机接口,一般情况下有独立式和行列式两种。
前者软件编写简单,但在按键数量较多时特别浪费I/0口资源,一般用于按键数量少的系统。
后者适用于按键数量较多的场合,但是在单片机I/0口资源相对较少而需要较多按键时,此方法仍不能满足设计要求。
本系统要求的按键控制不多,且I/0口足够,可直接采用独立式。
(3)紧急处理
交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,我们都必须尽量允许其畅通无阻,毕竟在这种情况下是分秒必争的,时时刻刻关系着公共财产安全,个人生死攸关等。
由此在交通控制中增设禁停按键,就可达到想此目的。
3.单片机交通控制系统的基本构成及原理
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。
本系统在此基础上,加入了紧急情况处理与时间调整功能。
图2系统的总体框图
据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,信号灯状态模块,LED倒计时模块模块接受输出。
系统的总体框图如上所示。
单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。
在此过程中随时调用急停按键和时间调节中断。
4.智能交通灯控制系统的硬件设计
(1)时钟电路:
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
(2)中断系统:
中断系统的作用主要是对外部或内部的终端请求进行管理与处理。
4.1交通灯中的中断处理流程
(1)现场保护和现场恢复:
有特殊车辆要通过时就要进行中断,在中断之前,先将交通灯中断前情况保护好,当中断执行后再恢复现场,包括信号灯和时间显示电路。
(2)中断打开和中断关闭:
为了使特殊车辆通行按一下打开中断开关就可以打开中断,关闭中断开关就关闭中断。
(3)中断服务程序:
有中断产生,就必然有其具体的需执行的任务,中断服务程序就是执行中断处理的具体内容:
即如果南北方向有特殊车辆要求通过,南北方向转换为绿灯,东西方向为红灯;如果东西方向有特殊车辆要求通过,东西方向转换为绿灯,南北方向为红灯。
(4) 中断返回:
执行完中断服务程序后,必然要返回,即回交通灯信号回到中断前状态,显示时间也和中断前一样。
4.2系统硬件总电路构成及原理
实现本设计要求的具体功能,可以选用P87C51FB单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块,8个LED东西南北各两个构成倒计时显示模块,若干按键组成时间设置和紧急按钮。
4.2.1系统硬件电路构成
本系统以单片机为核心,系统硬件电路由状态灯,LED显示,按键,组成。
其具体的硬件电路总图如图3.1所示。
其中P0用于送显两片LED数码管,P1用于控制红绿黄发光二极管,XTAL1和XTAL2接入晶振时钟电路,REST引脚接上复位电路,P2.6与P2.7对数码管进行片选,P3.2即INT0紧急情况处理按键,P3.3即INT1接时间调整中断按键。
4.2.2系统工作原理
系统上电或手动复位之后,系统先显示状态灯及LED数码管,将状态码值送显P1口,将要显示的时间值的个位和十位分别送显P0口,在此同时用软件方法计时1秒,到达1s就要将时间值减1,刷新LED数码管。
时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值,
当然,还要开启两个外部中断,其一为紧急情况处理中断,一旦信号有效,即K3键为低电平时进入中断服务子程序,东西南北路口的红灯全亮禁止全部通行,再按一下K3键,中断结束返回。
其二为通行时间调整中断,若K4按键有效,进入相应的中断子程序,对时间进行调整,此后再按K4键则中断结束返回。
4.2.3发光二极管
根据本设计的特点,红绿灯的显示不可少,红绿灯的显示采用普通的发光二极管。
每个方向上设置红绿黄灯,总共4组。
如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的。
4.2.4按键控制
本设计设置了有5个键:
K1键P3.0,K2键P3.1,K3键P3.2,K4键P3.3,K5键P3.4,每个按键一端接地,另一端接对应的P3端口。
低电平有效,当按键按下端口接地,单片机捕获到低电平,从而知道相应的输入信息。
5.程序主体设计流程
全部控制程序实际上分为若干模块:
键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序,中断服务子程序,红绿灯时间调整程序等。
整个软件程序方面主要分两大部分:
主程序部分和中断处理程序。
流程图如图3所示。
图3系统总流程图
5.1理论基础知识
5.1.1定时器原理
定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。
它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值。
计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。
计算通式变为:
T=(M-TC)T0
模值和计数器工作方式有关。
在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。
就此可以算出各种方式的最大延时。
如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。
这就是为什么扫描周期为50ms的原因,
若使用软件则会耽搁程序流程,显然不可行。
相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。
5.1.2软件延时
MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
5.1.3中断原理
本系统主要使用了外部中断,中断信号有引脚INT0和INT1输入,低电平有效,CPU每个时钟周期都会检测INT0和INT1上的信号,8051允许外部中断以电平方式或负边沿方式两种中断方式输入中断请求信号,可由用户通过设置TCON中IT0和IT1位的状态来实现。
在优先级的允许下,一旦有外部中断信号产生,单片机CPU首先保护断点,PC值进栈,然后执行相应的中断服务子程序,执行完后,用RETI指令返回,此时CPU会从堆栈中取保存的断点地址,送回PC,程序再正常执行。
5.2子程序模块设计
5.2.1状态灯显示及判断
在本设计中,实际控制的灯只有6个,即:
东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯。
定义IO端口如下,其中均是低电平有效。
H_REDBITP1.0
H_YELLOWBITP1.1
H_GREENBITP1.2
L_REDBITP1.3
L_YELLOWBITP1.4
L_GREENBITP1.5
共有4钟状态:
东西红灯亮,南北绿灯亮(0F3H);东西红灯亮,南北黄灯亮(0F5H);东西绿灯亮,南北红灯亮(0DEH);东西黄灯亮,南北红灯亮(0EEH)。
括号中是P1端口8个引脚值对应的十六进制码。
用于显示发光二极管时,部分程序如下:
;东西红,南北绿,计时时间为20s
MOVP1,#0F3H
MOV60H,61H
A1:
MOVR1,#50
A2:
ACALLBCD
ACALLDISPCLK
DJNZR1,A2
MOVA,60H
MOVR0,60H
ADDA,#99H
DAA
MOV60H,A
CJNER0,#05H,A1
5.2.2LED倒计时显示
LED计时每1秒都要刷新1次,采用的是动态显示,首先将R4除以10H,整数即十位放在50H中,余数即个位放在51H中,设置7段LED显示数据的数据表,用数据指针寄存器DPTR指向数据表的首地址,再加上A中的偏移量,就可以指向十位数字,然后送显即可,个位显示同理。
具体程序如下:
BCD:
;将十位数送到(51H),个位数送到(50H)
MOVA,60H;60H单元放的是倒计时值
MOVB,#10H
DIVAB
MOV51H,A
MOVA,B
MOV50H,A
RET
DISPCLK:
;显示部分
MOVDPTR,#TAB
MOVA,50H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.6
LCALLDELAY
SETBP2.6
MOVA,51H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.7
LCALLDELAY
SETBP2.7
RET
5.2.3紧停及调整时间中断子程序
紧停按键连接到外部中断引脚P3.2,即INT0捕获到一个低电平,则进入该中断进行相关处理。
程序如下:
;紧急情况处理
IINT0:
CLREA
JBP3.2,$
PUSH60H
PUSHP1
PUSHP2
B0:
JNBP3.0,NH
JNBP3.1,DH
;全红
A9:
MOVP1,#0F6H
SETBP2.6
SETBP2.7
ACALLDELAY
JNBP3.2,B0
JMPJE
;只允许东西方向车辆通行
NH:
MOVP1,#0DEH
SETBP2.6
SETBP2.7
ACALLDELAY
JNBP3.2,B0
JMPJE
;只允许南北方向车辆通行
DH:
MOVP1,#0F3H
SETBP2.6
SETBP2.7
ACALLDELAY
JNBP3.2,B0
JMPJE
JE:
POPP2
POPP1
POP60H
SETBEA
RETI
5.2.4红绿灯时间调整程序
时间调整按键连接到外部中断引脚P3.3,即INT1捕获到一个低电平,则进入该中断进行相关处理。
程序如下:
;加减程序
IINT1:
CLREA
JBP3.3,$
PUSHP1
PUSHP2
B1:
JNBP3.1,DDEC
IINC:
JNBP3.0,SINC;加1程序
ZINC:
;自动加1
MOVR0,#15
A10:
ACALLBCD
ACALLDISPCLK
DJNZR0,A10
MOVA,60H
ADDA,#01H
DAA
MOV60H,A
JNBP3.3,B1
JMPJS
SINC:
;手动加1
MOVR3,#20
A11:
ACALLBCD
ACALLDISPCLK
DJNZR3,A11
MOVA,60H
ADDA,#01H
DAA
MOV60H,A
B2:
JBP3.3,JS
JNBP3.4,SINC
JMPB2
DDEC:
;减1程序
JNBP3.0,SDEC
ZDEC:
MOVR4,#15
A12:
ACALLBCD
ACALLDISPCLK
DJNZR4,A12
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
JBP3.3,JS
JMPB1
SDEC:
;手动减1程序
MOVR5,#20
A13:
ACALLBCD
ACALLDISPCLK
DJNZR5,A13
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
B3:
JBP3.3,JS
JNBP3.4,SDEC
JMPB3
JS:
MOV61H,60H
POPP2
POPP1
SETBEA
RETI
6、学习心得
通过此次实习,了解了很多元件的作用和用法。
熟悉了单片机的使用,熟悉了单片机的各个管脚的功能。
这可以说是给我上了深刻的复习课,在我即将忘记单片机知识的时候,又让我加深了我对它的认识,而且了解了更多以前没有注意的问题。
通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步。
本次课程设计的过程是艰辛的,不过收获却是很大的。
通过这次课程设计,对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力。
经历了从最初的设计到最后做出产品的开发过程,提高了对专业的认识及兴趣,对于我们工科来说,对以后就业有及其重大的影响。
参考文献:
[l]边海龙,孙永奎.单片机开发与典型工程项目实例详解[J].电子工业出版社,2008,(10):
143-160.
[2]张鑫,华臻,陈书谦.单片机原理及应用[J].电子工业出版社,2008(5).
[3]黄智伟.凌阳单片机课程设计指导[J].北京航空航天大学出版社,2007,
[4]余锡存曹国华.单片机原理及接口技术[M].陕西:
西安电子科技大学出版社,2000.7
附录一:
电路图
附录二:
程序:
ORG0000H
LJMPSTART
ORG0003H
LJMPIINT0
ORG0013H
LJMPIINT1
ORG0030H
START:
MOVSP,#6FH;系统初始化
MOV61H,#20H
MOV60H,61H
LIGHT:
SETBEA
SETBEX0
SETBEX1
CLRIT1
CLRIT0
MOVP1,#0F3H;东西红,南北绿,计时时间为15s
MOV60H,61H
A1:
MOVR1,#50
A2:
ACALLBCD
ACALLDISPCLK
DJNZR1,A2
MOVA,60H
MOVR0,60H
ADDA,#99H
DAA
MOV60H,A
CJNER0,#05H,A1
MOVP1,#0F5H;东西红,南北黄灯闪烁5s
MOVR2,#5
A3:
MOVR1,#50
A4:
ACALLBCD
ACALLDISPCLK
DJNZR1,A4
CPLP1.1
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
DJNZR2,A3
MOVP1,#0DEH;东西绿,南北红,计时时间20s
MOV60H,61H
A5:
MOVR1,#50
A6:
ACALLBCD
ACALLDISPCLK
DJNZR1,A6
MOVR0,60H
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
CJNER0,#05H,A5
MOVP1,#0EEH;南北红,东西黄灯闪烁5s
MOVR2,#5
A7:
MOVR1,#50
A8:
ACALLBCD
ACALLDISPCLK
DJNZR1,A8
CPLP1.4
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
DJNZR2,A7
LJMPLIGHT;连续运行返回部分
DISPCLK:
;显示部分
MOVDPTR,#TAB
MOVA,50H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.6
LCALLDELAY
SETBP2.6
MOVA,51H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.7
LCALLDELAY
SETBP2.7
RET
BCD:
;将十位数送到(51H),个位数送到(50H)
MOVA,60H
MOVB,#10H
DIVAB
MOV51H,A
MOVA,B
MOV50H,A
RET
IINT0:
;紧急情况处理
CLREA
JBP3.2,$
PUSH60H
PUSHP1
PUSHP2
B0:
JNBP3.0,NH
JNBP3.1,DH
A9:
MOVP1,#0F6H;全红
SETBP2.6
SETBP2.7
ACALLDELAY
JNBP3.2,B0
JMPJE
NH:
MOVP1,#0DEH;只允许东西方向车辆通行
SETBP2.6
SETBP2.7
ACALLDELAY
JNBP3.2,B0
JMPJE
DH:
MOVP1,#0F3H;只允许南北方向车辆通行
SETBP2.6
SETBP2.7
ACALLDELAY
JNBP3.2,B0
JMPJE
JE:
POPP2
POPP1
POP60H
SETBEA
RETI
IINT1:
;通行时间加减程序
CLREA
JBP3.3,$
PUSHP1
PUSHP2
B1:
JNBP3.1,DDEC
IINC:
JNBP3.0,SINC;加1程序
ZINC:
;自动加1
MOVR0,#15
A10:
ACALLBCD
ACALLDISPCLK
DJNZR0,A10
MOVA,60H
ADDA,#01H
DAA
MOV60H,A
JNBP3.3,B1
JMPJS
SINC:
;手动加1
MOVR3,#20
A11:
ACALLBCD
ACALLDISPCLK
DJNZR3,A11
MOVA,60H
ADDA,#01H
DAA
MOV60H,A
B2:
JBP3.3,JS
JNBP3.4,SINC
JMPB2
DDEC:
;减1程序
JNBP3.0,SDEC
ZDEC:
MOVR4,#15
A12:
ACALLBCD
ACALLDISPCLK
DJNZR4,A12
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
JBP3.3,JS
JMPB1
SDEC:
;手动减1程序
MOVR5,#20
A13:
ACALLBCD
ACALLDISPCLK
DJNZR5,A13
MOVA,60H
ADDA,#99H
DAA
MOV60H,A
B3:
JBP3.3,JS
JNBP3.4,SDEC
JMPB3
JS:
MOV61H,60H
POPP2
POPP1
SETBEA
RETI
;10MS延时
DELAY:
MOVR6,#25
DEL1:
MOVR7,#200
DEL2:
DJNZR7,DEL2
DJNZR6,DEL1
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END