《单片机交通灯设计报告大学毕设论文.doc》由会员分享,可在线阅读,更多相关《单片机交通灯设计报告大学毕设论文.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学校名称课程设计报告书课程名称: 交通信号灯模拟控制系统 学 院: 电气工程学院 专 业: 电子信息工程 班 级: 学 号: 学生姓名: 指导教师: 职 称: 年 月 日目录一、课程设计的性质和目的1二、设计任务1三、设计方案及原理1四、元件清单2 1.AT89C51单片机 22.L E D数码管33.发光二级管 3五、硬件电路图51.单片机主电路 32.交通灯接口电路 43.LED数码管显示电路 54.键盘接口电路 5六、软件设计71.程序流程图 72.主要功能模块 83.总汇编程序 94.仿真结果图12七、遇到的问题13八、心得体会13附:参考文献 14交通信号灯模拟控制系统设计一、课程设
2、计的性质和目的本课程设计的主要目的是通过对电子技术及单片机原理的学习,综合掌握电子电路综合设计的过程,设计要求和具体的设计方法。通过设计更好的复习、理解模拟电子、数字电子和单片机等课程内容,使理论和实际相结合,加强学生的动手能力以及查阅相关资料解决实际问题的能力,培养学生从事设计工作的整体观念。二、设计任务1、完成交通灯的变化规律,即一个十字路口为东西向和南北向,四个路口均有红黄绿三灯和两个LED数码显示管。交通灯上电以后进入初始状态即东西红灯,南北红灯。5s后转状态1:南北绿灯亮通车,东西红灯亮,禁止通行,持续30s;30s后转状态2:南北绿灯灭转黄灯闪亮,延时5s,东西仍然红灯;5s后转状
3、态3:东西绿灯亮通车,南北转红灯,持续30s;30s后转状态4:东西绿灯灭转亮黄闪灯,延时5s,南北仍然红灯。最后循环至状态1。2、用8个LED数码管(各方向均有两个LED数码管,分别表示个位和十位),显示倒计时。倒计时用于提醒驾驶员或行人信号灯发生改变的时间,以便他们在“停止”和“通行”两者做出合适的选择。3、紧急状态下,通过K1键手动设置,将所有路口的灯变为红灯;再次按下此键后进入状态1,然后依次循环。三、设计方案及原理直接进行片选和驱动LED数码显示的交通灯系统图 1 直接进行片选和驱动LED数码显示的交通灯系统 该方案直接采用单片机的I/O口对LED数码管进行数字显示和片选的驱动。时钟
4、电路和复位电路为单片机提供正常的工作环境。按键电路为在紧急情况下的应急处理系统,作用是使东西南北的等变为红灯。红绿灯电路由单片机I/O口直接驱动。四、元件清单表 1 元器件清单名 称规 格数 量单片机AT89C511排阻9脚4.7K 1排阻7脚1k 2晶振11.0592MHz 1发光二极管GREEN 4发光二极管RED 4发光二极管YELLOW 4 数码管 两位共阳 4 电阻1K 8按键 2电解电容10uF 1独石电容30pF 21.AT89C51单片机 AT89C51是美国 ATMEL 公司生产的低电压,高性能 CMOS 8 位单片机,片内含 8k bytes 的可反复擦写的只读程序存 储器
5、(PEROM)和 256 bytes 的随机存取数据存储器(RAM) ,器件采用 ATMEL 公司的高密度,非易失性存储技术生产, 与标准 MCS-51 指令系统及 8052 产品引脚兼容, 片内置通用 8 位中央处理器 (CPU) Flash 存储单元, 和 功能强大AT89C51单片机适合于许多较为复杂控制应用场合.图2 AT89C51单片机AT89C51为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控
6、信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握
7、手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。本实验硬件电路搭建采用STC89C51单片机,软件仿真的时候采用的是AT89C52单片机,虽然两个单片机电路功能稍有区别,但是在使用及编程的时候引脚通用,编程无影响。所以硬件编程代码同样适用于软件仿真。2.LED数码管 图3 LED数码管LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。如:显示一个“2”字,那么不同之分,也有0.5寸、1
8、寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。LED数码管分为共阴极和共阳极两种,本实验在硬件电路搭建的时候采用的是共阳极LED数码管,这样使用单片机容易驱动,而采用共阴极则不易驱动二极管。而在proteus软件仿真的时候由于采用共阴极数码管时出现乱码,在
9、寻找错误时也没有发现什么不对的地方,为了方便起见在软件仿真时选用了共阴极LED数码管,这时就需要在P0口驱动的时候加上一个反相器其结果才和硬件电路一样。3.发光二级管 图4发光二级管它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。常用的是发红
10、光、绿光或黄光的二极管。发光二极管和数码二极管一样分为共阴极和共阳极两种,本实验在硬件电路搭建的时候采用的是共阳极发光二级管,这样使用单片机容易驱动,而采用共阴极则不易驱动二极管,有时候采用高电平驱动则会产生单片机电压过低而无法点亮二极管致使单片机烧毁的情况。在proteus软件仿真的时候软件给出的发光二级管如图所示,该红绿灯模块为共阴极发光二级管模块,所以仿真时采用的驱动方式是高电平驱动。由于是软件仿真,所以不会出现无法驱动的情况,真实情况下需要考虑其驱动情况。五、硬件电路图1.单片机主电路图5单片机主电路如右图所示,单片机的主电路主要包括时钟电路和复位电路,以及5V电压和接地电压等。这几部
11、分保证了单片机可以正常的工作。时钟振荡电路采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。其发出的时钟脉冲直接送入片内定时控制部件。 复位电路采用上电+按钮电平复位方式,当按下按钮时,RST管脚高电平触发。为保证复位可靠,RC时间常数应大于两个机器周期,电容取10uf,电阻取1000欧。2.交通灯接口电路交通灯接口电路交通灯接口电路如右图所示。硬件电路的发光二级管是共阳极的,采用低电平驱动点亮方式,而在软件中提供的交通灯模块是共阴极的,本汇编程序最初编写是根据硬件电路共阳极二极管采用低电平驱动编写而成,所以在软件仿真的时候需要加一个非门来
12、将P0口输出的低电平变成高电平来驱动交通灯模块发光,经过实验得出其结果和硬件仿真的完全相同。由于是软件仿真,所以不会出现无法驱动的情况,真实情况下需要考虑其驱动情况。南北和东西的交通灯显示相同,所以本系统仅仅使用了六个I/O口来进行交通灯的控制。键盘接口电路3.LED数码管显示电路LED数码管显示电路如下图所示。该电路采用P2口进行数码管的数字显示,用P0.6、P0.7口对数码管进行片选。4.键盘接口电路键盘接口电路如右图所示。该电路比较简单,原理是先将P1.0口全部置1,然后在延迟代码段中加入检测P1口高低电平的代码,观察P1口是否变化,如果有变化则进入紧急情况的处理代码,在紧急情况处理代码
13、中继续检测P1口状态,如果变回全部为1则跳到初始状态重新开始。由程序代码可得,该电路连至P1任意一口都是可以的。用proteus绘制的整体电路图如下图整体电路图六、软件设计LED数码管显示判断状态几是否执行完现场恢复,中断返回再次赋值初始状态开始初始化选用方法调用PTMO,附初值开中断,开始计值现场保护,附初值判断按键是否按下判断是否是初始状态判断状态状态ZT1状态ZT4状态ZT3状态ZT2YNYN1.程序流程图2.主要功能模块数码管显示模块:LED:CLR P0.6SETB P0.7MOV A,23HDEC AMOVC A,A+DPTRMOV P2,AACALL DELAYCLR P0.7S
14、ETB P0.6MOV A,24HDEC AMOVC A,A+DPTRMOV P2,ADJNZ 20H,RTURN MOV 20H,#0AH延迟代码模块:用于四个数码管的循环扫描延时调用,以此来对计数器进行技术,代码主要如下:延迟代码段DELAY: MOV R6,#100D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET紧急控制模块 该模块的功能是为紧急情况下的应急系统,通过K1键手动设置,将所有路口的等变为红灯,代码主要如下:紧急控制代码段KEYIN: MOV P1,#0FFHMOV A,P1CJNE A,#0FFH,QUDOULJMP ZT0QUDOU: LC
15、ALL DELAYMOV A,P1CJNE A,#0FEH,ZT0KEY0: CLR P0.0CLR P0.3SETB P0.1SETB P0.2SETB P0.4SETB P0.5SETB P0.6SETB P0.7MOV P2,#03HSJMP KEY03.总汇编程序如下: ORG 0000HRESET:AJMP MAIN ORG 000BHAJMP ITOPORG 0100HMAIN: MOV SP,#60H MOV DPTR,#TAB1 MOV TMOD,#01HCLR AMOV 20H,#0AHMOV 21H,#00HMOV 22H,#05HMOV 23H,#0AHMOV 24H,#
16、03HMOV 25H,#00HMOV 26H,#00HMOV 27H,#00H ACALL PT0M0HERE: AJMP HEREPT0M0: MOV TL0,#0CH MOV TH0,#0FFHSETB ET0SETB EASETB TR0RETITOP: PUSH PSW PUSH Acc MOV TL0,#0CH MOV TH0,0FFHKEYIN: MOV P1,#0FFHMOV A,P1CJNE A,#0FFH,QUDOULJMP ZT0QUDOU: LCALL DELAYMOV A,P1CJNE A,#0FEH,ZT0KEY0: CLR P0.0CLR P0.3SETB P0.1
17、SETB P0.2SETB P0.4SETB P0.5SETB P0.6SETB P0.7MOV P2,#03HSJMP KEY0ZT0: MOV A,21HCJNE A,#00H,ZT1MOV 21H,#00HCLR P0.0CLR P0.3 CLR P0.6SETB P0.7MOV A,22HDEC AMOVC A,A+DPTRMOV P2,AACALL DELAYCLR P0.7SETB P0.6MOV P2,#03HDJNZ 20H,RTURN1 MOV 20H,#0AHDJNZ 22H,RTURN1MOV 21H,#01HMOV 22H,#01HRTURN1:LJMP RTURNZT
18、1: MOV A,25H CJNE A,#00H,ZT2MOV A,26HSETB P0.0 SETB P0.4CLR P0.3CLR P0.2LJMP LEDZT2: CJNE A,#01H,ZT3SETB P0.2CLR P0.3CPL P0.1LJMP LEDZT3: CJNE A,#02H,ZT4CLR P0.5CLR P0.0SETB P0.1SETB P0.3 LJMP LEDZT4: CPL P0.4SETB P0.5CLR P0.0SETB P0.5LED:CLR P0.6SETB P0.7MOV A,23HDEC AMOVC A,A+DPTRMOV P2,AACALL DEL
19、AYCLR P0.7SETB P0.6MOV A,24HDEC AMOVC A,A+DPTRMOV P2,ADJNZ 20H,RTURN MOV 20H,#0AHT:DJNZ 23H,RTURNMOV 23H,#0AHDJNZ 24H,RTURNMOV 24H,#03HMOV A,25HINC 25HCJNE A,#03H,XWMOV 25H,#00HXW:MOV A,26HMOV 27H,ADJNZ 27H,XW0 MOV 26H,#00HSJMP RTURNXW0:INC 26H CJNE A,#00H,RTURNMOV 23H,#05HMOV 24H,#01HRTURN:POP Acc
20、POP PSW RETIDELAY: MOV R6,#100D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RETTAB1: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09HEND4.仿真结果图七、遇到的问题1.单片机的I/O口是否够用,不够用怎么办?本系统中交通灯需要用掉6个I/O口,数码管显示信号及片选信号需要用到10个I/O口,应急系统按键电路需要用到1个I/O口,加起来一共17个,而单片机共有32个I/O口,所以对于本系统完全够用。考虑到南北方向和东西方向的交通灯以及数码管显示相同,所以实际上用到的I/O口只有17个。在本实
21、验中不存在I/O口不够用的情况,若存在不够用的情况,则可以用CD4511译码器和74LS138译码器对数码管的数字和片选信号进行译码,从而减少I/O口的使用。本系统中I/O口完全够用,而使用CD4511译码器和74LS138译码器不仅增加了电路成本和复杂度,而且还使程序的编写难度增加了,所以本实验中不使用译码器,采用直接片选和数码管信号的输出。2.如何驱动发光二级管?设计本系统的时候是先进行实物电路的搭建编程,然后进行软件仿真的。在实物电路中发光二级管采用的是共阳极二极管,所以是用低电平驱动二极管发光,低电平驱动二极管发光比较容易,不会出现由于发光二级管工作电压过高而不能正常驱动的情况,甚至出
22、现烧毁单片机的情况。而在proteus软件仿真的时候程序给出的红绿灯模块采用的是共阴极二极管,由于程序已经使用了低电平驱动,为了是工作量减少,所以软件仿真的时候给驱动发光二级管的I/O口加了一个非门,从而程序由低电平驱动变为高电平驱动,大大减少了实验工作量。3、数码管显示电路如何设计?本实验一共有八个数码管,每个包括八个数码管显示信号输入引脚和两个片选信号输入端。由于采用的是双位共阳极数码管,所以设计的方法是用P2口配合上拉电阻输入低电平信号对八个数码管显示信号进行控制;同时用P0.6和P0.7对双位数码管进行片选。以此来实现数码管的选择与显示。4、如何实现定时功能?采用计数器减1功能来进行定
23、时任务。确定定时时间,然后依据系统指令执行时间来计算初值,以此达到所需定时时间的目的。5、如何读取键盘数据?本实验采用扫描P1口的方式来读取键盘数据。将键盘和P1的其中一个口相连,对P1口赋初值0FFH,在延时子程序中加入P1口状态的扫描:MOV A,P1判断是否相同;CJNE A,#0FFH, QUDOU不同则跳转紧急情况处理段代码进行紧急情况处理。6.编程产生的hex文件硬件可以使用而软件仿真无法正确执行?本实验程序是通过硬件逐步编写而成,所以在硬件上可以正确的执行该程序。但是在进行软件仿真的时候发现其效果和硬件的不一样,数码管可以正确地显示但是红绿灯出现了错误。由于proteus是做该设
24、计是临时自学的,所以起初认为可能是软件模块有哪方面的设定是自己不知道的,在咨询了同学以后,同学说没有出现类似的情况,于是对程序代码又从头至尾理了一遍,结果发现在给红绿灯的I/O口送数据的时候没有加“#”号,导致其显示混乱,但是这在硬件中没有错误,说明软件仿真和硬件还有有些许区别的。这个问题究竟为什么会这样到现在还没有明确的答案,不过我会通过各种渠道进行解决的。八、心得体会通过这次毕业设计,让我把以前学习到的知识得到巩固和进一步的提高,对已有知识有了更进一步的理解和认识。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日
25、后成为合格的应用型人才打下良好的基础。用单片机实现交通灯控制,可以使我们的生活方便快捷。这项看起来不需要多少技术的工作却是非常需要耐心和精力,短短一周的设计对我来说的意义,不仅仅是让我们把所学的理论知识与实践相结合起来,还提高了我们的实际动手能力和独立思考的能力,虽然我们这次设计仓促,制作有些简单,但我们得到了很多远大于设计的东西!由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流。使得这些问题得到了很好地解决。但是在设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则效率还不是很高等等,这需要在实践中进一步完善。当然,通过这
26、次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我。参考文献1徐刚强、陈忠平、曹巧媛、曹琳琳、刘琼,单片机原理及接口第二版,北京:清华大学出版社,2011.10,166页。2张毅刚、彭喜元、彭宇,单片机原理及应用第二版,北京:高等教育出版社,2010.5,354页。3周景润、张丽娜,基于PROTEUS的电路及单片机系统设计与仿真北京航空航天大学出版社,2006.54张义和、陈敌北,例说8051 人民邮电出版社 2006.15 赵建领、薛园园,51单片机开发与应用技术详解 电子工业出版社 2009.16 张毅刚、彭喜元、彭宇,单片机原理及应用 高等教育出版社 2011.12第 15 页