单片机交通灯课程设计.doc_第1页
单片机交通灯课程设计.doc_第2页
单片机交通灯课程设计.doc_第3页
单片机交通灯课程设计.doc_第4页
单片机交通灯课程设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

课程设计说明书 题 目:单片机交通灯课程设计 院 系: 机械工程学院 专业班级: 11质量2班 学 号: 11101322xx 学生姓名: xxx 指导教师: 王正家 二 0 1 4 年 月 日湖 北 工 业 大 学摘 要近年来,随着科技的飞速发展,单片机的应用在不断的深入,同时带动传统控制检测技术日益更新。单片机往往作为一个核心部件来使用。当今时代是一个自动化时代,交通灯控制等很多行业的设备都与计算机密切相关。一个好的交通控制系统,将给道路拥挤,违章控制等方面给予技术革新,随着大规模集成电路及计算机技术的迅速发展,以及在控制技术方面的广泛应用。设备有了很大的发展,是现代科技发展的主流方向。本设计采用单片机系统,采用的是单片机汇编语言来编写程序。基于AT89S51这款单片机,在仿真软件PROTUES上画了电路图,程序设计是使用软件KEIL4编写,使用USB将程序生成HEX文件下载到单片机里面然后再运行。本文主要从单片机的应用上来实现交通灯的管理,用以控制过往车辆和行人的正常通行。关键词:单片机;交通灯;汇编目 录1 功能概述4 1.1 课题任务与功能要求4 1.2 方案概述42 课题硬件系统设计5 2.0设计功能 .5 2.1 各模块的电路简介5 2.1.1 单片机最小系统5 2.1.2 按键电路5 2.1.3 复位电路5 2.1.4 流水灯电路6 2.1.5 数码管电路6 2.2 系统电路图7 2.3 软件设计83 课题软件系统设计8 3.1 单片机资源使用情况9 3.2 软件各模块简要介绍9 3.2.1 主程序9 3.2.2 显示程序9 3.2.3 键处理和键扫描程序9 3.2.4 延时程序9 3.2.5 数码管显示程序9 3.3 程序清单94 交通灯的设计结论17 4.1 使用说明17 4.2 交通灯运行图17 4.3 设计体会17结束语19致谢201 功能概述1.1 课题任务与功能要求4、交通灯设计一上电时显示黄色灯,数码管无数字。启动按钮启动后,显示绿灯10秒、黄灯1秒、红灯5秒循环。如果此时有行人过马路,则按行人通行按钮,留3秒时间让行人通行,具体执行为:系统显示1秒黄灯后,亮红灯3秒。如果行人按钮时为绿灯状态,则行人通过后继续未显示完的绿灯,若为红灯状态,则亮至行人时间与剩余时间的最大值后转换为红灯。注:三种颜色的灯显示当前状态,数码管显示时间 1.2 方案概述本设计采用的是单片机以及仿真电路,数码管的P0口接段控,P1口接位控。除此之外还有晶振电路、复位电路、电源电路和按键。程序设计采用的是汇编语言编写,本设计是交通灯,KEY键为行人按键。 AT89S51 是一种低功耗,高性能的CMOS 8位微型计算机。它带有4K bytes 的可系统编程的Flash只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,兼容标准的80C51指令系统及引脚,集Flash 程序存储器既可在线编程,也可用传统方法进行编程及通用8位微处理器于单片芯片上,可用与解决复杂的问题,且成本较低。交通灯系统结构如图1如示。AT89S518位数码显示按键晶振电路复位电路LED电路 图1 交通灯系统结构图2 课题硬件系统设计2.0 设计功能1.完成交通灯的基本功能,结合实际情况,控制红、黄、绿交通灯的亮和灭.其工作流程是:绿、黄、红分时间段开通,循环往复,计时电路以秒为单位作倒计时,计数为0时进行切换,计时时间可由LED数码管显示(需符合交通规则);2.红、黄、绿交通灯的亮和灭的时间可调节;3.若有行人要过马路,可以通过按键处理目前的状态;4.采用LED数码管显示红或绿交通信号灯亮的剩余时间;5.通过延时程序设定红和绿交通信号灯亮一次的总时间;6.控制系统的原理图和接线图采用PROTEL,PROTEUS等专用绘图软件绘2.1 各模块的电路简介2.1.1 单片机最小系统单片机最小系统包括电源电路、晶振电路和复位电路。只有当单片机有了这些电路才会工作。电源电路给单片机供电,晶振电路给单片机提供信号,复位电路可以实现单片机的复位。2.1.2 按键电路按键电路的设计就是在一段公共接地,另一端接到P3.2口,当有键按下时,相应的口就会变成低电平,产生一个下降沿。 2.1.3复位部分复位电路采用上电+按钮电平复位是上电复位与按钮复位的组合。上电瞬间复位端(RST/Vpd)的电位与Vcc相同,随着充电电路电流的减少,RST/Vpd的电位下降,最后为0V,当按钮按下后,电源Vcc通过电阻R,施加在单片机复位端RST/Vpd上实现复位,电路连接图如图(2): 2.1.4 流水灯电路流水灯电路直接挂接在单片机的P2口上,采用共阳接法。2.1.5 数码管电路数码管的段控口接在单片机的P0口上,位控接在单片机的P1口上。2.2 系统电路图 2.3 软件设计1.工作流程图开始现场保护黄灯亮时间送显N当前红灯?1秒到了?黄灯灭,红灯亮 Y红灯亮绿灯亮当前时间3s?时间送显时间送显N YN N时间送显5秒到了?3秒到了?红灯灭,绿灯亮 Y 3秒到了?恢复中断时间送显 Y NN Y10秒到了? 中断程序流程图主程序流程图 3 课题软件系统设计3.1 单片机资源使用情况、P1口为数码管管的位选端、P0口用作数码管的段选端、P2口用作二极管控制端、P3.2口线作为键盘输入端既在AT89S51的P2口用来接三个发光二极管的阴极,控制其亮与灭,P0口和P1口外接由8个LED数码管构成的显示器,用P0口作LED的段码输出口(P0.0P0.7对应于LED的adp),P1口作LED的位控输出线。3.2 软件各模块简要介绍软件的设计是由汇编语言来编写的,分成各个模块分别为主程序、显示程序、中断程序、延时程序和数码管显示程序,以下给予相应的介绍。3.2.1 主程序主程序是程序的入口,在主程序中会一直调用显示程序和延时程序,当没有键按下时,就不会进到中断程序,当有键按下时,就会按操作执行中断程序。3.2.2 显示程序显示程序主要完成数码管的动态显示,将相应的段控码送往P0口,相应的位控码送往P1口,实现显示需要的字符信息。3.2.3 中断程序中断程序我选用的是外部中断INT0入口,当有行人按键按下时,就会进到中断程序,如果行人按钮时为绿灯状态,则行人通过后继续未显示完的绿灯,若为红灯状态,则亮至行人时间与剩余时间的最大值后转换为红灯。3.2.4 延时程序主程序和中断程序中将会调用到延时程序,是用来倒计时的时候延时时间的作用。3.2.5 数码管显示程序 数码管显示程序是在延时里面调用的子程序,它将所有延时程序里的时间以倒计时的形式显示出来,我将0,1,2,3,4,5,6,7,8,9这些数字显示的十六进制数写进表里,通过查表的形式来实现倒计时。3.3 程序清单/*主程序*/ORG 0000H AJMP MAIN ORG 0003H AJMP KEY ORG 0030H MAIN: CLR IT0; JB P3.2,START SETB EX0; SETB EA;START: MOV P2,#0FFH CLR P2.2; 黄灯亮 1s MOV 30H,#10 LCALL DELAY SETB P2.2 CLR P2.4; 红灯亮5s MOV 30H,#50 LCALL DELAY SETB P2.4 CLR P2.3; 绿灯亮 10s MOV 30H,#100 LCALL DELAY SETB P2.3 LJMP START/*中断程序*/KEY: PUSH PSWPUSH ACCJB P2.3,NEX;P2.3不为零,即为绿灯熄,则跳转至NEXJNB P2.3,L;P2.3为零,即为绿灯亮,则跳转至LCLR P2.3POP ACCPOP PSWRETINEX:MOV A,R5 ;A为中断时灯已亮时间 SUBB A,#3O; 若差大于零,则表示剩余时间小于三秒,反之,大于三秒 JNB ACC.7,LPOP ACCPOP PSWRETIL: SETB P2.3 CLR P2.4 LCALL DELAY1 SETB P2.4 RET/*延时程序*/DELAY :MOV R5,30H DEL0:MOV R6,#200 DEL1:MOV R7,#250 DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 LCALL NET DJNZ R5,DEL0 RETDELAY1 :MOV R2,#30 DEL11:MOV R3,#200 DEL12:MOV R4,#250 DEL13: DJNZ R4,DEL13 DJNZ R3,DEL12 LCALL NET DJNZ R2,DEL11 RET/*数码管程序*/NET:MOV DPTR,#TAB MOV A,R5 MOV B,#100 DIV AB MOVC A,A+DPTR MOV P0,A;P0为你的数码管接口 ,第二个数码管为个位数字 SETB P1.0 MOV DPTR,#TAB MOV A,R5 CLR P1.0 MOV B,#10 DIV AB MOVC A,A+DPTR MOV P0,A;P1为你的数码管接口 ,第二个数码管为个位数字 SETB P1.1 RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END附:我们在用汇编写程序的同时用C也编了程序,如下(其电路图和接口跟汇编的有所不同,但大同小异,在此不再赘述)#includetypedef unsigned char uchar;typedef unsigned int uint;uchar tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0;sbit key1=P32;sbit key2=P33;sbit led_y=P22;sbit led_r=P24;sbit led_g=P23;uint MS,state=0,flag=0,INT_MS;void seg_display();void delay(uint ms);void init();void delay_led();void led_display();void main() led_y=0; /黄灯亮 if(key2=0) /按键 if(key2=0) /按键确实按下 init(); /中断初始化 led_y=1; /黄灯灭 /label:; while(1)led_display(); void delay_led()/这样分开赋值,防止全局变量MS在进入中断后值发生改变 uint j; if(flag=0) /中断标志位为0情况,即未进入中断 for(MS;MS0;MS-) seg_display(); for(j=10;j0;j-); else if(flag) /中断标志位为1情况,进入中断 for(INT_MS;INT_MS0;INT_MS-) seg_display(); for(j=10;j0;j-); flag=0; void led_display() led_y=0; /黄灯亮 state=1; /按键标志位设为1 MS=300; / 延时3s delay_led();/数码管显示 led_y=1;/黄灯亮 state=0;/ 标志位清0 led_r=0; state=2; MS=500; delay_led(); led_r=1; state=0; led_g=0; state=3; MS=1000; delay_led(); led_g=1; state=0; void seg_display() if(flag=0) /中断标志位为0情况,即未进入中断P1=0x01; /数码管1显示P0=tabMS/900; /数码管1显示内容delay(5); /数码管1显示延时P0=0xff; /数码管1显示消影P1=0x02;P0=tabMS/100+1;delay(5);P0=0xff;else if(flag) /中断标志位为1情况,进入中断P1=0x01;P0=tabINT_MS/900;delay(5);P0=0xff;P1=0x02;P0=tabINT_MS/100+1;delay(5);P0=0xff; void delay(uint ms)uint j;while(ms-)for(j=100;j0;j-) ;void led_int()interrupt 0 flag=1; /进入中断标志位flag为1 if(state=3) / led_g=1; led_r=0; INT_MS=300; delay_led(); led_r=1; led_g=0; else if(state=2) if(MS200);/3s flag=0; /出中后标志位flag为0void init() EX0=1; /外部中断打开 EA=1; /总中断打开 IT0=0; /低电平有效4 交通灯的设计结论4.1 使用说明上电后,数码管显示初始状态即数码管显示00,交通等开始进入运行状态。运行过程中,若按下KEY键则进入中断程序,如果行人按钮时为绿灯状态,则行人通过后继续未显示完的绿灯,若为红灯状态,则亮至行人时间与剩余时间的最大值后转换为红灯。4.2 交通灯运行图交通灯运行仿真图4.3 设计体会这次课程设计持续了两周时间,在第一周的时候,由于管理体系认证课设的未完成,以及管理体系认证和六级的考试在周五和周六,故而把大部分时间花在了这些事情上,在星期天才算是正式开始。一开始,我们四个人进行了分工,我和xx画电路图,他俩男生写程序,由于我们要实现的程序没有涉及到太多的东西,故而电路图的绘制十分简单,我俩只用了半个小时就在PROTEUS上画出了仿真图。然后我们在老师辅导的时间共同探讨了我们程序思路,在王老师给我们详细的解释了我们做的题目后,我们几个都觉得貌似实现起来挺简单的,就十分高兴。我觉得虽然我们进行了分工,每个人都有负责的板块,但我不能完全来依靠别人来完成这个课设,而且就算课设可以蒙混过关,接下来的考试也是有难度的,就想着自己也应该动手写一下程序,而且在写的过程也是对这门课的复习过程和加深理解的过程。有了这些想法之后,我就先进行了目标计划,把这个课题分成几个模块,各个攻破。首先,我先把主程序编了出来,让它能简单的执行黄红绿的循环,紧接着把延时子程序也写了出来,由于中断程序里面有个判断时间的问题,这个我们一直没想明白要怎么解决这个问题,就被这个点给迷茫了好久,因为我们想利用监测按键是哪个点的时间,利用这个点来比较,当时就是想我们不仅要监测R5的时间点,还要监测R6R7的时间点,就算能实现监测他们三个的时间,还得考虑是否会超出字节范围,单是这个计算和判断就是一个很浩大的工程,我们又想着能不能去找别的方法来解决这个问题,老师提的建议是让我们把延时程序改成定时器的,这样就可以简单些。晚上回来后,我又把延时程序拿了出来看,突然想到老师曾经说过延时程序不精确,我突然想到我们的时间也仅仅是精确到0.1秒,加上本来延时程序又不精确,R5才是大循环,控制的时间才比较准确,R6R7的时间点可以被我们忽略掉,这样一下子就把中断程序的问题解决了,第二天,我把写好的程序给他们看,他们也觉得这样行得通,那下一个问题就是解决怎么在数码管上面显示时间的问题了。在教室里老听他们讨论数码管显示的问题,感觉他们讲的挺高深的样子,一下子把我给吓到了,我就对数码管的问题产生了畏惧感,于是想把这一块交给他们解决,我到时间借鉴下就好了,后来,我在网上百度了别人显示数码管的程序,看了几个之后,觉得也没他们说的那么高深,特别是一个直接调用表格的程序,思路特别简单,就想着简单就简单吧,只要能实现程序就好,没必要非得用那么复杂的来写程序,就按着自己的想法去写了。虽然程序大体上是完成了,但是还没在开发板上运行,有些问题是不能被发现的,由于我没有开发板,就让他们帮我运行程序,运行的时候发现这个程序还是有很多出现小错误的地方,改了之后还是发现中断程序不怎么灵敏,有时中断程序进不去,在仿真上面仿得中断程序就没进去过,王老师给我们建议说,让我们改变下触发方式,有可能因为我们选的是下降沿触发,它只能监测到下降延时才进入到中断程序,其他时候就算按键了也进不去,让我们改成低电平触发方式。最后,我们几个的程序,只有xx用C编写的能很好的把题目的每一个步骤实现,我们几个的总是存在这样那样的问题,虽然这次课程设计我没能很好地去把题目里面要求的每一个步骤都很好的实现出来,王老师说,我的程序思路很清晰,实现的方法也很简单,程序本身没什么大问题,能自己独立的把程序编出来,也就意味着对着门课有了很好的理解和认识,也就基本实现了我们这个课

温馨提示

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

评论

0/150

提交评论