单片机课程设计-交通灯1.doc_第1页
单片机课程设计-交通灯1.doc_第2页
单片机课程设计-交通灯1.doc_第3页
单片机课程设计-交通灯1.doc_第4页
单片机课程设计-交通灯1.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计报告 模拟交通灯组长:祝帅组员:李传东 郭林 李华建 贺敬文 刘强指导老师:刘鹏烟台大学机电工程学院101-5摘要:近年来,随着我国国民经济的快速发展,我国机动车辆发展迅速,而城镇道路建设由于历史等各种原因相对滞后,交通拥挤和堵塞现象时常出现。如何利用当今计算机和自动控制技术,有效地疏导交通,提高城镇交通路口的通行能力,减少交通事故是很值得研究的一个课题。目前,国内的交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯加上一个倒计时的显示器来控制行车。关键词: 80C51,交通规则,交通灯,绿灯倒计时时间调整一、设计目的:1、通过交通信号灯控制系统的设计,掌握80C51传输数据的方法,以控制发光二极管的亮与灭以及数码管的显示;2、用80C51作为输出口,控制十二个发光二极管熄灭,模拟交通灯管理.3、通过单片机控制设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高动脑和动手的能力;4、完成控制系统的硬件设计、软件设计、仿真调试。二、设计内容和功能:交通信号灯模拟控制系统设计利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭。用8051做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。在一个交通十字路口有一条主干道(南北方向),一条从干道(东西方向),主干道的通行时间(60s)比从干道通行时间(30s)长,四个路口安装红,黄,绿灯各一盏;如图所示: 北 主干道 西 支干道 支干道 东 南 主干道 1、设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(从干道)车道两条交叉道路上的车辆交替运行,时间可设置修改。 2、在绿灯转为红灯时,要求黄灯闪烁,才能变换运行车道 3、黄灯亮时,要求每秒闪亮一次。 4、调整倒计时显示装置暂停,四个路口的信号灯全部变成红灯,调节结束红灯延时5s后各道口灯恢复正常。三、各功能模块说明及系统使用说明;3.1总体设计电路如图所示3.2交通灯电路 为了方便实验,可以用发光二极管作为交通灯来使用,单片机的I/O接口直接和交通灯(发光二极管)连接。在十字路口的四组红、黄、绿三色交通灯中,东西方向道路上的两组同色灯连接在一起,南北方向道路上的两组同色的灯也彼此连接在,受单片机P2.0P2.5控制。单片机的I/O接口与交通灯电路的具体连接方式为:P2.0P2.2分别接南北方向的红、黄、绿共6个放光二极管,P2.3P2.5分别接东西方向的红、黄、绿共6个发光二极管。12个发光二极管采用了共阳极的连接方式,因此I/O口输出低电平时,与之相连的发光二极管会亮,I/O口输出高电平是,相应的发光二极管会灭。交通灯电路如图所示:3.3倒计时显示电路 该交通灯控制系统在正常情况下,每60s循环一次,为方便提示路上行人及车辆交通灯转换的剩余时间,专门为控制系统设计了一个倒计时显示装置。该显示装置选用七段数码管来显示交通灯转换的剩余时间,根据控制要求,每个路口需要两个数码管,这样四个路口就要求八个数码管。有序80C51单片机的I/O作为输出时,具有较强吸收电流能力,因此我们可以选用7SEG-MPX2数码管,这样由单片机的I/O就可以直接驱动,从而简化硬件电路的设计。四个路口倒计时为动态显示东西南北四个方向共四个路口,所谓动态显示,就是显示器十位和个位交替显示(5ms),相应的数码管由p1.0p1.3控制。倒计时显示电路如图所示。3.4调整绿灯时间电路该系统的K1、K2、K3、K4四个按键分别于单片机的P3.0、P3.1、P3.2、P3.3相接,它们可以在调整绿灯时间情况下使用。例如,按下K4键,四个路口同时变红灯,倒计时显示装置暂停,接着按下n次K1键,主干道倒计时显示器加n,按下K2键5s后倒计时继续。按下K3键,四个路口同时变红灯,倒计时显示装置暂停,接着按下n次K1键,支干道倒计时显示器加n,按下K2键5s后倒计时显示装置继续。交通灯控制系统又开始正常工作。按键电路如图所示。四、调试与检测:4.1.硬件检测: 第一步:目测,检查外部的各种元件或则电路是否有断点; 第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象; 第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值; 第四步:是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。 4.2.软件调试:软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。程序后,编辑,查看程序是否有逻辑的错误。五、实验心得5.1 我们的心得:这次课程设计,我们小组做的智能交通等控制系统。如往常每一次实训,我获得了很大的收获。通过这两周的单片机课程设计,我们运用所学的知识,利用单片机控制原理设计了一个交通灯控制系统,我们对单片机有了更深的体会。我们了解和掌握了一些简单的编程思想和对I/O口的使用。这次课设通过单片机的I/O口来控制交通灯。通过这次的实践,我们对单片机的I/O口的使用的条件有更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧,特别是汇编语言的掌握方面都能向前迈了一大步。这次的课程设计让我们把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践有着能检验理论的正确性,让我们受益非浅,对我们以后参加工作或者继续学习将会产生巨大的帮助和影响。在课设过程中遇到的硬件和软件问题都通过询问老师、同学和去图书馆、上网得到了解决。在课设结束后我们会找相关资料完善我们的交通灯,争取做到最好。首当其谈的是我们学到的团队精神,这次课程设计需要多人协作分工完成,我们有幸聚集了六位认真负责且乐于交流讨论的队友,在这个讨论、分工、请教、学习、汇总的过程中,我们的友谊进一步增强,而且我们锻炼了各自的团结协作能力,并且增强了我们踏上社会为祖国做贡献的信心和勇气。我们经过讨论协商后,主要讲这次单片机课程设计分成绘电路图、设计程序框图、编写程序、调试程序等部分,之后我们对这次写作进行的合理的分工。其后,我们着眼全局,互帮互助,不仅将各自分工部分效率的完成了,还在构建交通灯控制系统的全过程中了解了其他的环节,提高了学习效率。我感觉到,明确分工固然重要,团队合作才更能体现一个团队的优势,提高工作效率!其次,就是对于大学相关课程特别是单片机的深入理解和巩固。经过这次课设,我学会更具要求设计电路。通过交通灯的设计,我们了看到科技服务人类的冰山一角,大大激起我们对于知识应用的兴趣,我们小组分析了另外许多类似交通灯的控制系统。另外,这次课设涉及广泛,我还熟练了用keil编译程序,掌握了用proteus仿真电路原理图,用STC窜口下载程序等许多平时书本学习不会太过关注的步骤,可谓真正锻炼了动手能力,真正做出东西来。这次选交通灯为题目来做课设一是经验不足,二是信心不足。通过这次课设,我既积累了经验,也获取了信心,今后会找寻机会再做一些与拖动相关的电子设计,因为我们自动化专业和电机是息息相关的。六、参考文献1 单片机原理及应用(王贵平). 机械工业出版社.2 单片机应用系统设计M. 机械工业出版社.3 百度文库.4 “单片机原理与应用”课程设计计划七、程序清单 ORG 0000H AJMP MAIN ORG 0003H ;跳到支干道调节时间 LJMP EINT0 ORG 000BH ;跳到定时器 LJMP MLP1 ORG 0013H LJMP EINT1 ; 跳到主干道调节时间 ORG 0300HTAB: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH/*主程序*/ MAIN: MOV SP,#60H ;初始化程序,设置堆栈 MOV 33H,#60 ; 主干道通行时间初始值,存到33H单元 MOV 34H,#30 ; 支干道通行时间初始值,存到34H单元 SETB IT0 ; 外部中断一边沿触发 MOV IE,#8FH ; 开中断 SETB PX0 ;INT0中断优先级控制为高优先级 SETB PX1 ;INT1中断优先级控制为高优先级 SETB EA ;开所有中断 SETB TR0 ;定时器0运行 SETB EX0 ;开INT0中断 SETB EX1 ;开INT1中断 MOV TMOD,#01H ;设置定时器0工作模式1 MOV TH1,#0FFH ;设置计数初值 MOV TL1,#06H LJMP ZHU_LD ;跳转到主干道绿灯 /*主干道绿灯支干道红灯*/ ZHU_LD: MOV R1,33H ;为主干道方向显示时间做准备ZHU_LD1: MOV 20H,R1 ;北主干道通行时间60秒(33H)=60,(ZHU_LD即主干道绿灯) MOV P2,#1EH ;点亮主干道绿灯支干道红灯 MOV A,R1 ; ADD A,#3 ; MOV 21H,A ;为支干道方向显示时间做准备 LCALL SJXS1 ;显示通行所剩时间,其中有0.5秒延时 LCALL SJXS1 ;再次显示以便数码管不闪,且再延时0.5秒以便凑够一秒 DJNZ R1,ZHU_LD1 ;判断60秒是否已完,若未完则从新显示、延时/*主干道黄灯*/HUANGD: MOV R2,#3 ;黄灯闪亮3秒 HD: MOV P2,#1DH ;点亮黄灯 MOV 22H,R2 ;为显示时间做准备 LCALL SJXS2 ;黄灯闪亮剩时显示 ,其中延时0.5秒 MOV P2,#1FH ;熄灭黄灯 LCALL SJXS2 ;显时,且再延时0.5秒以便凑够1秒 DJNZ R2,HD ;判断3秒是否已完,若未完则从新闪灭、延时和显示/*主干道红灯支干道绿灯*/ZHI_LD: MOV R3,34H ;支干道通行30秒 (34H)=30, (ZHI_LD即支干道绿灯)ZHI_LD1: MOV P2,#33H ;点亮主干道红灯支干道绿灯 MOV 24H,R3 ;为支干道方向显示时间做准备 MOV A,R3 ; ADD A,#3 ; MOV 23H,A ;为主干道方向显示时间做准备 LCALL SJXS3 ;时间显示 ,其中有0.5秒延时 LCALL SJXS3 ;凑够1秒时间 DJNZ R3,ZHI_LD1 ;判断30秒是否已完/*支干道黄灯*/HUANGD1: MOV R2,#3 ; 转入黄灯闪亮3秒 HD1: MOV 22H,R2 ; 为显示做准备 MOV P2,#2BH ; 点亮主干道红灯支干道黄灯 LCALL SJXS2 ; 显示时间,并延时0.5秒 MOV P2,#3BH ; 点亮支干道红灯关闭东西黄灯 LCALL SJXS2 ; 显时,且再延时0.5秒以便凑够1秒 DJNZ R2,HD1 ; 判断3秒是否到,若未到继续闪灭支干道黄灯 AJMP ZHU_LD ; 主程序到此完 /*定时5ms子程序*/MLP1: MOV R0,#0 ;延时5msMLP2: JNB TF0,MLP2 MOV TH0,#0FFH MOV TL0,#06H CLR TF0 INC R0 CJNE R0,#20,MLP2 ;当R0不等于20时,跳转到MLP2 RET/*定时10ms子程序*/MLP3: MOV R0,#0 ;延时10ms MLP4: JNB TF0,MLP4 MOV TH0,#0FFH MOV TL0,#06H CLR TF0 INC R0 CJNE R0,#40,MLP4 ;当R0不等于40时,跳转到MLP2 RET/*定时1ms子程序*/MLP5: MOV R0,#0 ;延时1msMLP6: JNB TF0,MLP6 MOV TH0,#0FFH MOV TL0,#06H CLR TF0 INC R0 CJNE R0,#4,MLP6 ;当R0不等于4时,跳转到MLP2 RET/*主干道通行时间显示子程序*/SJXS1: MOV P0,#0 MOV R7,#25 RP1: MOV A,20H ; 主干道要显示时间移到寄存器A MOV DPTR,#TAB ; 要显示的数字代码表首地址 MOV B,#10 DIV AB ; 要显示的时间与10相除,求出十位和个位 MOVC A,A+DPTR ; 找到十位的显示代码 MOV P1,#00001110B ; 选择南北数码管十位片 MOV P0,A ; 送出十位显示代码 LCALL MLP1 ; 延时5ms以点亮数码管 MOV A,B ; 把个位数移到寄存器A MOVC A,A+DPTR ; 找到个位数显示代码 MOV P1,#00001101B ; 选择主干道数码管个位片 MOV P0,A ; 送出个位数显示代码 LCALL MLP1 ; 延时5ms以点亮数码管 MOV A,21H ; 支干道方向要显时间移到寄存器A MOV DPTR,#TAB ; 要显示的数字代码表首地址 MOV B,#10 DIV AB ; 要显示的时间与10相除,求出十位和个位 MOVC A,A+DPTR ; 找到十位的显示代码 MOV P1,#00001011B ; 选择支干道数码管的十位片 MOV P0,A ; 送出十位显示代码 LCALL MLP1 ; 延时5ms以点亮数码管 MOV A,B ; 把个位数移到寄存器A MOVC A,A+DPTR ; 找到个位的显示代码 MOV P1,#00000111B ; 选择支干道数码管的个位片 MOV P0,A ; 送出个位显示码 LCALL MLP1 DJNZ R7,RP1 ; 是否已循环25次 RET/*黄灯时间显示子程序*/SJXS2: MOV P0,#0 ; 熄灭数码管 MOV R7,#25 ; 以下调用两次0.01秒延时程序, RP2: MOV A,22H ; 要显示的时间移到寄存器A MOV DPTR,#TAB ; 要显示的数字代码表首地址 MOV B,#10 DIV AB ; 要显示的时间与10相除,求出十位和个位 MOVC A,A+DPTR ; 找到十位的显示代码 MOV P1,#00001010B ; 选择主干道数码管十位片和支干道数码管十位片 MOV P0,A ; 送出十位显示代码 LCALL MLP1 ; 延时10ms以点亮数码管 LCALL MLP1 MOV P1,#00000101B ; 选择主干道支干道数码管个位片 MOV A,B ; 把个位数移到寄存器A MOVC A,A+DPTR ; 找到个位数显示代码 MOV P0,A ; 送出个位数显示代码 LCALL MLP3 ; 延时10ms一点亮数码管 DJNZ R7,RP2 RET/*支干道通行时间显示子程序*/SJXS3: MOV P0,#0 ; 熄灭数码管 MOV R7,#25 ; 以下调用4次调用延时程序, RP3: MOV A,23H ; 要主干道方向显示的时间移到寄存器A MOV DPTR,#TAB ; 要显示的数字代码表首地址 MOV B,#10 DIV AB ; 要显示的时间与10相除,求出十位和个位 MOVC A,A+DPTR ; 找到十位的显示代码 MOV P1,#00001110B ; 选择支干道数码管十位片 MOV P0,A ; 送出十位显示代码 LCALL MLP1 ; 延时5ms以点亮数码管 MOV A,B ; 把个位数移到寄存器A MOVC A,A+DPTR ; 找到个位数显示代码 MOV P1,#00001101B ; 选择主干道道数码管个位片 MOV P0,A ; 送出个位数显示代码 LCALL MLP1 ; 延时5ms一点亮数码管 MOV A,24H ; 要支干道方向显示的时间移到寄存器A MOV B,#10 DIV AB ; 要显示的时间与10相除,求出十位和个位 MOVC A,A+DPTR ; 找到十位的显示代码 MOV P1,#00001011B ; MOV P0,A ; 送出十位显示代码 LCALL MLP1 ; 延时5ms以点亮数码管 MOV A,B MOVC A,A+DPTR MOV P1,#00000111B ; 选择支干道数码管个位片 MOV P0,A ; 送出个位显示代码 LCALL MLP1 DJNZ R7,RP3 RET/*调节时间显示子程序*/SJXS4: MOV P0,#0 ; 熄灭数码管 MOV R7,#10 ; 以下调用两次0.01秒延时程序? RP4: MOV A,27H ; 要显示的时间移到寄存器A MOV DPTR,#TAB ; 要显示的数字代码表首地址 MOV B,#10 DIV AB ; 要显示的时间与10相除,求出十位和个位 MOVC A,A+DPTR ; 找到十位的显示代码 MOV P1,#00001010B; 选择主干道支干道数码管十位片 MOV P0,A ; 送出十位显示代码 LCALL MLP3 ; 延时10ms以点亮数码管 MOV A,B ; 把个位数移到寄存器A MOVC A,A+DPTR ; 找到个位数显示代码 MOV P1,#00000101B; 选择主干道支干道数码管的个位片 MOV P0,A ; 送出个位数显示代码 LCALL MLP3 ; 延时10ms一点亮数码管 DJNZ R7,RP4 RET/*调节主干道时间*/ EINT1: PUSH P0 ;保护现场 PUSH ACC SETB P3.0 ;输入键值前,先将p3.0,P3.1置一 SETB P3.1 MOV P2,#1BH ; 点亮主干道支干道红灯 MOV 27H,33H ; TJSJ: LCALL SJXS4 ; 显示时间TJSJ1: JB P3.0,TJSJ3 ;判断P3.0是否按下,否转TJSJ3 LCALL MLP5 ;有键按下,延时1ms JB P3.0,TJSJ1 ;是否松开,否,转TJSJ1TJSJ2: JNB P3.0,TJSJ2 ;是否松开,否,再判断 INC 33H ;所要调节的数值加一 MOV 27H,33H ;将调节完的时间输入27H LCALL SJXS4 ;调用SJXS4,显示调节完的时间TJSJ3: JB P3.1,TJSJ ;判断P3.0是否按下,否转TJSJ LCALL MLP5 ;有键按下,延时1ms JB P3.1,TJSJ3 ;是否松

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论