交通灯 课程设计.docx
《交通灯 课程设计.docx》由会员分享,可在线阅读,更多相关《交通灯 课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
交通灯课程设计
课程设计说明书
课程名称:
《单片机技术》
设计题目:
交通灯设计
院系:
学生姓名:
学号:
专业班级:
指导教师:
2012年5月18日
课程设计任务书
设计题目
交通灯设计
学生姓名
所在院系
电子信息与电气工程学院
专业、年级、班
设计要求:
1.具有电源开关及指示灯,有复位按键。
2.开始执行程序,,初始态为四个路口的红灯全亮之后,南北路口的绿灯亮东西路口的红灯亮,南北路口方向通车。
延时一段时间后南北路口的绿灯熄灭,黄灯开始闪烁。
闪烁若干次后,南北路口红灯亮,而同时东西路口的绿灯亮,东西路口方向开始通车,延时一段时间后,东西路口的绿灯熄灭,黄灯开始闪烁。
闪烁若干次后,再切换到南北路口方向,之后重复以上过程。
学生应完成的工作:
1.根据应用系统的要求,初步掌握总体结构的方法和构思,从中选择一种最佳的设计方案;
2.根据应用系统结构规模的要求,掌握在单片机外部扩展系统硬件设计的基本过程;
3.根据设计任务和要求,首先画出程序总体流程图,然后进行各控制模块程序的设计、编写系统程序;
4.掌握如何应用单片机仿真器来开发应用系统及仿真调试的过程。
参考文献阅读:
[1]童诗白,华成英.模拟电子技术基础第四版[M].北京:
高等教育出版社,2006.
[2]邱关源,罗先觉.电路第五版[M].北京:
高等教育出版社,2006.
[3]周润景,张丽娜.基与PROTEUS的电路及单片机仿真[M].北京:
航空航天大出版社,2007.
[4]张毅刚,彭喜元.单片机原理及应用[M].北京:
高等教育出版社,2010.
工作计划:
5月7日至11日:
设计原理图;
5月12日至13日:
程序设计;
5月14日:
焊接电路;
5月15日:
烧程序并调试电路;
5月16日至18日:
撰写课程设计报告。
任务下达日期:
2012年5月7日
任务完成日期:
2012年5月18日
指导教师(签名):
学生(签名):
交通灯
摘要:
随着人们交通工具的不断发展和数量的不断增加,交通事故频频出现,交通灯越来越成为一种必需。
交通灯通常是由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。
绿灯亮时,准许车辆通行,黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。
交通灯的设计对于人们出行有着极其重要的意义。
本文介绍了基于AT89S52单片机设计的交通灯,通过对其编程使其驱动LED灯模拟现实生活中的交通灯运行,通过驱动数码管显示时间模拟生活中的交通灯的时间计时。
关键词:
交通灯;AT89S52单片机;LED灯;数码管
目录
1.设计背景1
1.1交通灯的背景1
1.2单片机简介1
2.设计方案2
2.1方案提出2
2.2方案论证2
3.方案实施3
3.1硬件电路3
3.2软件设计4
3.3系统调试与制作6
4.结果与结论8
4.1结果8
4.2结论8
5.收获与致谢9
6.参考文献10
7.附件11
附录1元器件清单11
附件2硬件原理图12
附件3系统仿真图12
附录4实物照片13
附录5源程序13
1.设计背景
1.1交通灯的背景
19世纪初,在英国中部的约克城,红、绿装分别代表女性的不同身份。
其中,着红装的女人表示我已结婚,而着绿装的女人则是未婚者。
后来,英国伦敦议会大厦前经常发生马车轧人的事故,于是人们受到红绿装启发,1868年12月10日,信号灯家族的第一个成员就在伦敦议会大厦的广场上诞生了,由当时英国机械师德·哈特设计、制造的灯柱高7米,身上挂着一盏红、绿两色的提灯--煤气交通信号灯,这是城市街道的第一盏信号灯。
在灯的脚下,一名手持长杆的警察随心所欲地牵动皮带转换提灯的颜色。
后来在信号灯的中心装上煤气灯罩,它的前面有两块红、绿玻璃交替遮挡。
不幸的是只面世23天的煤气灯突然爆炸自灭,使一位正在值勤的警察也因此断送了性命。
从此,城市的交通信号灯被取缔了。
直到1914年,在美国的克利夫兰市才率先恢复了红绿灯,不过,这时已是“电气信号灯”。
稍后又在纽约和芝加哥等城市,相继重新出现了交通信号灯。
1.2单片机简介
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称微控制器。
在MCS-51系列单片机中,有两个子系列:
51子系列和52子系列。
每个子系列有若干种型号。
51系列有5051、8751和8031三个型号,后来经过改进产生了80c51、87c51、80c31三个型号;52系列有5021、8752、8032三个型号,改进后的型号是80c52、87c52、80c32。
改进后的型号更加省电。
52比对应的51系列增加了定时器T2并将内部程序存储器增加到8kb。
Intel公司停止生产MCS-51系列单片机之后将成产权转让给了许多其他公司,于是出现了许多与MCS-51兼容的单片机。
现在生产MCS-51兼容单片机的公司对其进行了不同程度的改进和提高。
我们现在使用比较多的是AT89C51、AT89S51等。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
CUP、IO接口、存储器等。
因此,单片机只需要和适当的软件及外部设备结合,并可以成为一个单片机控制系统。
单片机经过1、2、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引脚的多功能化以及低电压低功耗化。
2.设计方案
2.1方案提出
方案一:
硬件采用单片机最小系统模块和交通灯显示电路模块,主要由单片机直接驱动NPN型或PNP型三极管进行驱动LED数码管显示。
由软件来译码,软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理。
软件上采用主电路程序加上对应不同灯闪烁和计时的子程序,红灯20秒绿灯15秒黄灯5秒或采用红灯20秒绿灯17秒黄灯3秒,当主程序执行一遍后再循环执行。
方案二:
在方案一的硬件基础上改成由8位移位寄存器74LS164来静态驱动显示电路数码管显示,硬件译码就是显示的段码完全由硬件完成,单片机只要送出标准的BCD码即可,软件部分不变。
2.2方案论证
在硬件电路图仿真的时候通过对方案一和方案二对比发现方案二用8位移位寄存器74LS164驱动数码管静态显示的时候接线比较复杂,没有用方案一直接用三极管驱动简单,静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多,并且原理也不容易理解,用方案一实物制作时也可以简化板子排版。
在硬件通过仿真器的仿真还发现如果方案一用PNP型三极管驱动数码管的话数码管不能正常工作,于是换成NPN后能正常工作,最终决定采用NPN型三极管驱动数码管显示。
在交通灯闪烁或维持亮的时间问题上,通过在交通灯路口的观察和仿真后发现,黄灯闪烁5秒有点长,导致LED不能正常闪烁,使LED黄灯看起来是一直在亮而没有闪烁,于是把设置时间设定为闪烁3秒,红灯亮20秒绿灯亮17秒。
通过以上的方案一和方案二对比最终确定采用方案一。
3.方案实施
3.1硬件电路
本次单片机硬件电路设计总分为两大模块:
单片机最小系统模块和交通灯外围电路模块。
最小系统模块分为AT89S52单片机、时钟电路模块、复位电路模块、电源电路模块。
具体介绍如下:
3.1.1AT89S52单片机
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
3.1.2时钟电路模块
时钟电路模块采用现成的外部振荡器产生脉冲信号,利用11.0592Mhz的晶振和两个30pf的电容组合在一起形成时钟电路模块给单片机提供脉冲。
如图3.1所示:
图3.1时钟电路
3.1.3复位电路模块
复位电路模块采用按键手动电平复位电路。
按键手动电平电路复位是通过RST端经电阻与VCC接通来实现。
如图3.2所示:
图3.2复位电路
3.1.4电源电路模块
电源电路模块采用12V交流电经过三端稳压器W7805输出为5V直流电模块。
图中C2用于抵消输入线较长时的电感效应,一般选1UF。
电容C1用与消除输出电压的高频噪声,选取100UF的电容,用于输出较大的脉冲电流,为了防止输入端突然断开,C1将从稳压器输出端向稳压器放电,造成稳压器损坏。
因此,在二极管的输入端和输出端跨接一个二极管。
如图3.3所示:
图3.3电源电路
3.1.5显示电路模块
交通灯外围电路模块由东西南北四个方向的4个两位共阳一体数码管和东西南北4个方向的12个LED灯组成。
P0口驱动LED灯,P1口驱动八个八位数码管的段码,P3口驱动NPN型三极管来驱动数码管的位选。
如图3.4所示:
图3.4显示电路
3.2软件设计
在写程序之前需要根据课程设计要求先确定好程序流程图,然后根据程序流程图确定好主程序部分和需要的子程序部分。
具体介绍如下:
3.2.1程序流程图设计
根据设计要求设计如下主程序流程图3.5所示:
图3.5主程序流程图
南北灯数码管显示子程序流程图3.6所示:
图3.6南北灯数码管显示子程序流程图
南北黄灯闪烁子程序流程图3.7所示:
图3.7黄灯闪烁子程序流程图
3.2.2程序分析
根据设计流程图主程序主要就是定时器和串口的初始化设置,子程序包括一秒中断子程序、数码管显示子程序、黄灯闪烁子程序、红绿灯发亮子程序等,具体程序参照附件三。
3.3系统调试与制作
通过系统的软件和硬件的调试,硬件电路的调试主要用到了仿真软件Proteus,Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
软件的调试主要用到了Kiel,KielC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
通过软件的调试排出了软件程序中部分不正确的程序,从而实现了软件的正确,为后面的硬件连接垫定了基础。
仿真调试完成后,在仿真软件上实现了所需的设计要求,之后进行硬件连接,通过硬件调试,实现了设计要求。
在电路焊接的过程中应注意以下事项:
1.焊接时,要使焊点周围都有锡,将其牢牢焊住防止虚焊。
2.在焊接时,注意极性电容的极性。
3.芯片在安装前最好先两边的针脚稍稍弯曲,使其有利于插入底座对应的插口中。
4.在焊接时,不要把芯片插入底座上焊,防止烧坏。
5.晶振在焊接时应尽量和单片机靠近。
6.对引脚过长的电器元件,焊接完后,将其剪短。
4.结果与结论
4.1结果
在仿真软件Proteus上进行了硬件电路搭建,之后在Keil软件上编制源程序,生成.hex文件,第一次仿真发现数码管的闪亮不连续,LED黄灯并不闪烁,经过认真分析,确定是延时程序设计的时间太长,而导致数码管闪亮不连续。
又因为黄灯的闪烁设置的太快,导致黄灯看起来没闪烁,之后重新调整了黄灯闪烁程序,设计为每一秒闪烁一次,这样就完成了课程设计的要求。
之后在焊制电路板时,由于焊锡过多使复位按钮持续接触高电平,使上电之后单片机程序根本不运行,在拿着万用表一个一个脚仔细检查后发现问题所在并及时改正,最后完成了实物制作,实物能达到设计要求。
4.2结论
本系统采用AT89S52单片机为中心器件来设计交通灯控制器,本系统在充分利用单片机I/O引脚功能的前提下,我们实现了交通灯倒计时准确,红绿黄灯指示正确的功能,可以可靠应用到为解决道路拥堵的问题。
本设计电路简洁可靠性高,成本低廉。
由此可见,此设计是一种高可靠性,低成本的单片机交通灯设计方案。
本系统的不足之处在于没有遇到紧急情况时的应急处理机制。
如遇到特殊车种经过时交通灯该怎么亮、需要亮多长时间等等。
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
5.收获与致谢
做了两周的课程设计,使我感受颇多,收获也颇多,收获有来自于单片机课程设计本身的,还有是关于人与人之间关系方面的。
单片机方面本来我学的不是很好,但是通过这次课程设计我把许多课本上迷茫的东西都弄清楚了,尤其是汇编程序这一块,因为我们的课程设计程序用到很多的子程序,老师在课堂上讲的时候没听太明白,这次理论联系实际真正明白了很多指令是用在什么地方的,对应控制哪个硬件的,都有了比较深的体会。
还有就是硬件实物制作这一块,因为之前有做过类似制作电路板的经历,所以一开始我觉得会非常简单,一下午就应该能搞定,但是具体做的时候,却发现了很多的问题。
之前的经历是器件的排布格式已经给出了,只要照着排器件就行了,但这次需要自己排布器件,因为这次器件比较多,我们最终商定用俩个板子实现,于是就费了很多的工夫。
但同时我们也意识到当遇到问题时不能简单的拿以前的经验来评估,那样会照成错误。
在人际关系之间我也学会了很多东西,如果没有团队的合作是根本完不成的,每个子模块的设计我们都查了大量的资料问了很多人,之间我们也产生了很多分歧,不过我们始终还是很冷静地去找出解决方案,而不是各执己见像其他组那样几个人争得面红耳赤,最终问题还是得不到解决。
我还发现只要我们几个配合的好,效率是很快的,当我们的硬件原理图最终确定,软件最终实现,仅仅用了一周就完成了,而别的组都还在忙着设计原理图和写程序。
在这次课程设计期间我要特别感谢我们的指导老师宋清华老师,她在我们拿不定主意的时候给了我们很多意见。
尽管她指导的组很多,但对于我们她还是非常的耐心。
正是一开始在我们迷茫的时候老师给了我们细心的指导,才使得我们组整体的课程设计有了大致的确定,为我们组高效的完成任务奠定了基础。
因此在这里我们要再一次感谢一下老师。
6.参考文献
[1]童诗白,华成英.模拟电子技术基础第四版[M].北京:
高等教育出版社,2006.
[2]邱关源,罗先觉.电路第五版[M].北京:
高等教育出版社,2006.
[3]周润景,张丽娜.基与PROTEUS的电路及单片机仿真[M].北京:
航空航天大出版社,2007.
[4]张毅刚,彭喜元.单片机原理及应用[M].北京:
高等教育出版社,2010.
7.附件
附录1元器件清单
元器件名称
型号规格
数量
备注
两位共阳一体数码管
7SEG-MPX2-CA
4
有极性电容
20pf
1
无极性电容
30pf
2
无极性电容
100uf
2
整流桥堆
2W10
1
三端稳压器
7805
1
开关
1
摁下就启开
单片机
AT89S51
1
电阻
500Ω
8
电阻
10k
1
发光二极管
红色4个
黄色4个
绿色4个
晶振
12mhz
1个
三极管
NPN型
4个
附录2硬件原理图
图7.1硬件原理图
附录3系统仿真图
图7.2系统仿真图
附录4实物照片
图7.3系统实物图
附录5源程序
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIMER0INT//P3.4,P3.5控制东西数码管的位选,P3.6,P3.7控制南北数码管的位选
MAIN:
MOVSP,#60H
MOVDPTR,#TABLE//数码管段码地址送入DPTR
MOVP0,#0F6H//初始化路口交通灯全部为红灯
TIMERINIT:
//定时器0初始化为方式1,延时50ms
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR1,#20//设置20个50ms中断为1s
SETBEA
SETBET0
SETBTR0
DOUBLE:
MOVP0,#0DEH//东西红灯亮,南北绿灯亮
MOVA,#20
MOVR0,A//R0用于保存累加器A的当前值
NEXT0:
//下一秒
SETBF0
HERE0:
LCALLDISPLAY1_20
LCALLDISPLAY1_17
JBF0,HERE0
MOVA,R0
DECA
LCALLYELLOWFLASH1
MOVR0,A
JNZNEXT0//红灯未亮20s,继续下一秒发亮
MOVP0,#0F3H//南北红灯亮,东西绿灯亮
MOVA,#20
MOVR0,A
NEXT1:
//下一秒
SETBF0
HERE1:
LCALLDISPLAY2_20
LCALLDISPLAY2_17
JBF0,HERE1
MOVA,R0
DECA
LCALLYELLOWFLASH2
MOVR0,A
JNZNEXT1
LJMPDOUBLE//进入下一次循环
TRAN:
//16进制转化为BCD码子程序
MOVB,#10
DIVAB
MOVR2,A//R2用于存放数码管显示的十位码
MOVR3,B//R3用于存放数码管显示的个位码
RET
DISPLAY1_20:
//东西红灯20S的点亮数码管
PUSHACC
LCALLTRAN
MOVA,R2
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#10H
LCALLDELAY10MS
MOVA,R3
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#20H
LCALLDELAY10MS
POPACC
RET
DISPLAY1_17:
//南北绿灯17秒倒计时
PUSHACC
CLRC
SUBBA,#3
JZFLASH1
JCFLASH1
LCALLTRAN
MOVA,R2
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#40H
LCALLDELAY10MS
MOVA,R3
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#80H
LCALLDELAY10MS
POPACC
LJMPOK1
FLASH1:
//南北黄灯闪烁程序
//MOVP0,#0FEH
//CPLP0.4
LCALLDISPLAY1_3
POPACC
OK1:
RET
DISPLAY1_3:
//南北黄灯闪烁数码管3s显示子程序
CLRC
ADDCA,#3
LCALLTRAN
MOVA,R2
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#40H
LCALLDELAY10MS
MOVA,R3
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#80H
LCALLDELAY10MS
RET
DISPLAY2_20:
//南北红灯倒计时20s闪烁
PUSHACC
LCALLTRAN
MOVA,R2
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#40H
LCALLDELAY10MS
MOVA,R3
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#80H
LCALLDELAY10MS
POPACC
RET
DISPLAY2_17:
//东西绿灯17S倒计时显示
PUSHACC
CLRC
SUBBA,#3
JZFLASH2
JCFLASH2
LCALLTRAN
MOVA,R2
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#10H
LCALLDELAY10MS
MOVA,R3
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#20H
LCALLDELAY10MS
POPACC
LJMPOK2
FLASH2:
//东西黄灯闪烁3秒倒计时子程序
//MOVP0,#0F7H
//CPLP0.1
LCALLDISPLAY2_3
POPACC
OK2:
RET
DISPLAY2_3:
//东西黄灯闪烁数码管显示子程序
CLRC
ADDCA,#3
LCALLTRAN
MOVA,R2
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#10H
LCALLDELAY10MS
MOVA,R3
MOVCA,@A+DPTR
MOVP3,#00H
MOVP1,A
MOVP3,#20H
LCALLDELAY10MS
RET
DELAY10MS:
MOVR7,#01H
DL1:
MOVR6,#26H
DL0:
MOVR5,#82H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
RET
YELLOWFLASH1:
//南北黄灯闪烁3秒倒计时子程序
PUSHACC
CLRC
SUBBA,#3
JZFAN0
JCFAN1
JNCRETURN1
FAN0:
MOVP0,#0FEH
FAN1:
CPLP0.4
RETURN1:
POPACC
RET
YELLOWFLASH2:
PUSHACC//东西黄灯闪烁3秒倒计时子程序
CLRC
SUBBA,#3
JZFAN2
JCFAN3
JNCRETURN2
FAN2:
MOVP0,#0F7H
FAN3:
CPLP0.1
RETURN2:
POPACC
RET
TIMER0INT:
PUSHACC
MOVTH0,#3CH
MOVTL0,#0B0H
MOVA,R1
DECA
MOVR1,A
JNZGO
CLRF0
MOVR1,#20
GO:
SETBTR0
POPACC
RETI
TABLE:
DB0C0H,0F9H,0A4H,0B0H
DB