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

下载本文档

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

文档简介

单片机课程设计 模拟交通灯 姓名: 学号:200823501805 班级:机081-8班 专业:机械设计制造及自动化 指导老师: 目录摘 要4第一章 绪 论51.1 概述51.2 设计目的51.3 设计任务和内容5第二章 总体设计及核心器件简介62.1总体设计62.2 805162.3 led数码管102.4 蜂鸣器10第三章 单元电路模块及软件设计123.1 复位电路123.2 led数码管显示电路123.3 交通灯状态显示电路123.4 紧急情况中断电路123.5 定时计数电路13第四章 软件编程设计134.1 设计思想134.2 系统工作原理144.3 程序框图144.4程序清单164.5总体设计原理图264.6 proteus软件系统仿真26第五章 设计总结29参考文献30摘 要交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机8051为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。本设计系统由单片机i/o口扩展系统、交通灯状态显示系统、led数码显示系统、紧急情况中断系统、复位电路等几大部分组成。系统除基本的交通灯功能外,还具有倒计时、紧急情况处理等功能,较好的模拟实现了十字路口可能出现的状况。软件上采用c51编程,主要编写了主程序,led数码管显示程序,中断程序延时程序等。经过整机调试,实现了对十字路口交通灯的模拟。关键词: 8051 led 数码管 交通灯 程序第一章 绪 论1.1 概述近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1.2 设计目的(1)加强对单片机和c51语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。(2)用单片机模拟实现具体应用,使个人设计能够真正使用。(3)把理论知识与实践相结合,充分发挥个人能力,并在实践中锻炼。(4)提高利用已学知识分析和解决问题的能力。(5)提高实践动手能力。1.3 设计任务和内容1.3.1设计任务1、主干道绿灯60秒,支干道绿灯30秒;2、要求用定时器实现定时时间;3、要求显示器同步显示主干道时间的倒计时;4、如果有按键按下,表示有紧急车辆通过(救火车等),2路都亮红灯,蜂鸣器响,如果另外一个按键按下则恢复正常。1.3.2设计内容(1)填写设计任务书。(2)进行总体设计,画出原理图。(3)用protel软件画出pcb板。(4)编写并调试仿真程序。第二章 总体设计及核心器件简介2.1总体设计整个设计以at89c51单片机为核心,由i/o口扩展,led数码管显示,紧急情况中断电路,watchdog复位电路组成。硬件模块入图2-1。图21 硬件模块2.2 80512.2.1 mcs-51单片机内部结构 8051是mcs-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(rom)、数据存储器(ram)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:中央处理器:中央处理器(cpu)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,cpu负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(ram)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的ram只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。图2.2.1 8051内部结构图程序存储器(rom):8051共有4096个8位掩膜rom,用于存放用户程序,原始数据或表格。定时/计数器(rom):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(i/o)口:8051共有4组8位i/o口(p0、 p1、p2或p3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路8051内置最高频率达12mhz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(princeton)结构。intel的mcs-51系列单片机采用的是哈佛结构的形式,而后续产品16位的mcs-96系列单片机则采用普林斯顿结构。下图是mcs-51系列单片机的内部结构示意图2.2。图2.2 mcs-51结构框图2.2.2 mcs-51的引脚说明:mcs-51系列单片机中的8031、8051及8751均采用40pin封装的双列直接dip结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个i/o口,中断口线与p3口线复用。现在我们对这些引脚的功能加以说明:如图2.2.2 2.2.2 mcs-51引脚图pin9:reset/vpd复位信号复用脚,当8051通电,时钟电路开始工作,在reset引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器pc指向0000h,p0-p3输出口全部为高电平,堆栈指针写入07h,其它专用寄存器被清“0”。reset由高电平下降为低电平后,系统即从0000h地址开始执行程序。然而,初始复位不改变ram(包括工作寄存器r0-r7)的状态,8051的初始态。 8051的复位方式可以是自动复位,也可以是手动复位,见下图2.2.3。此外,reset/vpd还是一复用脚,vcc掉电其间,此脚可接上备用电源,以保证单片机内部ram的数据不丢失。 图2.2.3 8051的复位方式 pin30:ale/当访问外部程序器时,ale(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ale端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ale会跳过一个脉冲。如果单片机是eprom,在编程其间,将用于输入编程脉冲。pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,pc的16位地址数据将出现在p0和p2口上,外部程序存储器则把指令数据放到p0口上,由cpu读入并执行。pin31:ea/vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kb的程序存储器,当ea为高电平并且程序地址小于4kb时,读取内部程序存储器指令数据,而超过4kb地址则读取外部指令数据。如ea为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,ea端必须接地。在编程时,ea/vpp脚还需加上21v的编程电压。2.3 led数码管由于同一干道上的两个方向灯点亮时间相同,所以同一干道上只需一个数码管显示响应时间即可,本次交通灯采用两位一体的共阴极数码管来显示相应的时间。由p0口输出字型码,p1口的前四位作位选端。位选端的共阴极,故低点位有效。因为单片机/口的驱动电流很小,为了增加驱动能力,每个led上都加上一个上拉电阻,接入+5v电源,本次设计使用的是排阻。2.4 蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.515v直流工作电压),多谐振荡器起振,输出1.52.5khz的音频信号,阻抗匹配器推动压电蜂鸣片发声。下面是电磁式蜂鸣器的外形图片及结构图。电磁式蜂鸣器实物图:电磁式蜂鸣器结构示意图:图 1图 2电磁式蜂鸣器内部构成:1. 防水贴纸2. 线轴3. 线圈4. 磁铁5. 底座6. 引脚7. 外壳8. 铁芯9. 封胶10. 小铁片11. 振动膜12. 电路板电磁式蜂鸣器驱动原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机io引脚输出的电流较小,单片机输出的ttl电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。s51增强型单片机实验板通过一个三极管来放大驱动蜂鸣器。蜂鸣器的正极接到vcc(5v)电源上面,蜂鸣器的负极接到三极管的发射极e,三极管的基级b经过限流电阻r1后由单片机的p3.1引脚控制,当p3.1输出高电平时,三极管t1截止,没有电流流过线圈,蜂鸣器不发声;当p3.1输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制p3.1脚的电平来使蜂鸣器发出声音和关闭。程序中改变单片机p3.1引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变p3.1输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。第三章 单元电路模块及软件设计3.1复位电路8051的复位方式可以是自动复位,也可以是手动复位,见下图2.2.3。此外,reset/vpd还是一复用脚,vcc掉电其间,此脚可接上备用电源,以保证单片机内部ram的数据不丢失。 图2.2.3 8051的复位方式 这里选用手动复位方式。3.2 led数码管显示电路首先设置初始状态主干道绿灯亮,次干道红灯亮,然后通过软件程序来实现主支干道倒计时显示。经程序倒计时60秒后,两路干道切换显示黄灯,也显示倒计时,黄灯显示时间为三秒,然后主干道开始显示红灯,次干道开始显示绿灯,倒计时30秒。可由程序来实现主次干道倒计时,依次循环,等待中断。若紧急情况两路红灯都亮。3.3 交通灯状态显示电路 利用发光二极管的共阳极接法,通过程序来实现倒计时,实现p2口的输出变化来实现对二极管的控制,实现两路红绿灯的转化。如有紧急情况发生,急停键被按下,程序有中断信号,跳转的两路红灯都亮的状态。3.4 紧急情况中断电路 遇到紧急情况,如有救护车通过时,按下急停键,通过硬件和程序来给p2一个控制信号来实现两路红灯亮,与此同时,蜂鸣器报警。紧急情况解除以后按下恢复键,使急停键弹起,通过程序来恢复之前的倒计时及红绿灯状态。3.5 定时计数电路1.每秒钟的设定延时方法可以有两种,一种是利用mcs-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软件延时的方法。2.计数器硬件延时(1) 计数器初值计算 定时器工作时必须给计数器送计数器初值,这个值是送到th和tl中的。它是以加法计数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为0所需的计数值设定为c和计数初值设定为tc可得到如下计算通式:tc=m-c式中,m为计数器模值,该值和计数器工作方式有关。在方式0时m的值为213;在方式1时m的值为216;在方式2和3为28。(2) 计算公式 t=(m-tc)t计数或tc=m-t/t计数t计数是单片机时钟周期tclk的12倍;tc为定时初值。如单片机的主脉冲频率为tclk12mhz,经过12分频方式0 tmax=213x1微秒=8.192毫秒方式1 tmax=216x1微秒=65.536毫秒显然1秒钟已经超过了计数器的最大定时时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题。 (3)1秒的方法我们采用在主程序中设定一个初值为20的软件计数器和使t0定时50毫秒,这样每当t0到50毫秒时cpu就响应它的溢出中断请求,进入它的中断服务子程序。在中断服务子程序中,cpu先使软件计数器减1,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。第四章 软件编程设计4.1 设计思想根据现实生活中交通灯的功能结合理论知识,利用单片机实现交通灯的模拟控制。满足以下要求:1.主干道绿灯亮60秒,次干道绿灯30秒,黄灯都是3秒,每次转换黄灯都亮。2.要求用定时器实现定时时间。3.要求显示器同步显示主次干道红绿灯时间的倒计时,黄灯也显示倒计时。4.如果有按键按下表示有紧急车辆通过,两路亮红灯,蜂鸣器响;如果另一按键按下,则恢复正常。 4.2系统工作原理1、输出交通灯初始时间,通过51单片机p0口接电阻排respack-8接共阴极动态七段显示器。2、由8051单片机的定时器通过p2口接红、绿、黄灯,显示燃亮情况;通过两个七段显示器显示每个灯的燃亮时间。3、8051通过设置各个信息灯的燃亮时间、通过8051设置,绿、红时间分别为60秒、30秒循环由8051的p0口输出。4、设有紧急按钮,按下后主干道与枝干道都为红灯。4.3 系统框图置主道放行标志0-f0主道放行时间送 r1主道亮绿灯,支道亮红灯开始延时1秒主道亮黄灯,支道亮红灯延时3秒置支道放行标志0-f0支道放行时间送r3主道亮红灯,支道亮绿灯延时1秒主道亮红灯,支道亮绿灯延时3秒r11=0r31=0 nn中断服务程序流程图下图所示:主程序主干路支干路红灯亮判断是否有int0中断主程序4.4 程序清单org 0000h ajmp main org 000bh ljmp int10 ; 跳到跳到特种车辆自动服务程序 .数字显示代码. tab: db 3fh,6h,5bh,4fh,66h,6dh,7dh,7h,7fh,6fh主程序 org 0300h main: mov 25h,#60 ; 主干道通行时间初始值,存到25h单元 mov 26h,#30 ; 支干道通行时间初始值,存到26h单元 mov sp,#40h ; 堆栈选址 clr p3.0 ; mov tmod,#66h ; t0、计数方式,工作模式2 mov tl0,#255 ; 计数器0初值 低8位 mov th0,#0 ; 计数器0初值高8位 setb it0 ; 外部中断一边沿触发 mov ie,#8fh ; 开中断 setb tr0 ; t0开始计.主干道绿灯支干道红灯. zgld: clr p3.0 ; mov r1,25h ; 主干道通行时间60秒(25h)=60 zgld1: mov p2,#1eh ; 点亮主干道绿灯支干道红灯 mov 20h,r1 ; 为主干道方向显示时间做准备 mov a,r1 ; add a,#3 ; mov 21h,a ; 为支干道方向显示时间做准备 lcall disp1 ; 显示通行所剩时间,其中有0.5秒延时 lcall disp1 ; 再次显示以便数码管不闪,且再延时0.4秒以便凑够一秒 djnz r1,nbld1 ; 判断30秒是否已完,若未完则从新显示、延时.主干道黄灯闪支干道红灯.shanhd: mov r2,#3 ; 黄灯闪亮3秒 hd: mov p2,#1dh ; 点亮黄灯 mov 22h,r2 ; 为显示时间做准备 lcall disp2 ; 黄灯闪亮剩时显示 其中延时0.5秒 mov p2,#1fh ; 熄灭黄灯 lcall disp2 ; 显时,且再延时0.5秒以便凑够1秒 djnz r2,hd ; 判断3秒是否已完,若未完则从新闪灭、延时和显示.主干道红灯支干道绿灯 . dxld: clr p3.0 ; mov r3,26h ; 支干道通行30秒 (26h)=30, (dxld即支干道绿灯) zgld1: mov p2,#33h ; 点亮主干道红灯支干道绿灯 mov 24h,r3 ; 为支干道方向显示时间做准备 mov a,r3 ; add a,#3 ; mov 23h,a ; 为主干道方向显示时间做准备 lcall disp3 ; 时间显示 ,其中有0.5秒延时 lcall disp3 ; 凑够1秒时间 djnz r3,dxld1 ; 判断30秒是否已完.主干道红灯支干道黄灯闪.shanhd1: mov r2,#3 ; 转入黄灯闪亮3秒 hd1: mov 22h,r2 ; 为显示做准备 mov p2,#2bh ; 点亮主干道红灯支干道黄灯 lcall disp2 ; 显示时间,并延时0.5秒 mov p2,#3bh ; 点亮主干道红灯关闭支干道黄灯 lcall disp2 ; 显时,且再延时0.5秒以便凑够1秒 djnz r2,hd1 ; 判断3秒是否到,若未到继续闪灭支干道黄灯 ajmp nbld.特种车辆通过.tezhong: mov p2,#1bh ; 点亮支干道主干道红灯 setb p3.0 ; mov r4,#15 ; 特殊车辆通过时间15秒 qhd: mov 27h,r4 ; 为显示做准备 lcall disp4 ; 显示时间 djnz r4,qhd ; 判断15秒是否到,若不到继续显示时间 clr p3.0 ; ajmp zgld 主程序到此完 .延时程序. . delay: acall delay1 ; 10ms延时 acall delay1 ret delay1: mov r6,#50 ; 5ms延时 ,(5ms=50*50*2us) de6: mov r0,#50 de7: djnz r0,de7 djnz r6,de6 ret.主干道通行的时间显示子程序.(其中有0.5秒延时). disp1: mov p0,#0 ; 熄灭数码管 mov r7,#25 ; 以下调用四次5毫秒延时程序,故25*4*5毫秒=0.5秒 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 delay1 ; 延时5ms以点亮数码管 mov a,b ; 把个位数移到寄存器a movc a,a+dptr ; 找到个位数显示代码 mov p1,#00001101b ; 选择主干道数码管个位片 mov p0,a ; 送出个位数显示代码 lcall delay1 ; 延时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 delay1 ; 延时5ms以点亮数码管 mov a,b ; 把个位数移到寄存器a movc a,a+dptr ; 找到个位的显示代码 mov p1,#00000111b ; 选择支干道数码管的个位片 mov p0,a ; 送出个位显示码 lcall delay1 djnz r7,rp1 ; 是否已循环25次?(25次才够0.5秒) ret .黄灯的时间显示子程序. disp2: mov p0,#0 ; 熄灭数码管 mov r7,#25 ; 以下调用两次0.01秒延时程序,故25*0.02=0.5秒 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 delay ; 延时10ms以点亮数码管 mov p1,#00000101b ; 选择主干道数码管个位片和支干道数码管个位片 mov a,b ; 把个位数移到寄存器a movc a,a+dptr ; 找到个位数显示代码 mov p0,a ; 送出个位数显示代码 lcall delay ; 延时10ms一点亮数码管 djnz r7,rp2 ret .支干道通行的时间显示子程序. disp3: mov p0,#0 ; 熄灭数码管 mov r7,#25 ; 以下调用4次调用0.005秒延时程序,故250.02=0.5秒 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 delay1 ; 延时5ms以点亮数码管 mov a,b ; 把个位数移到寄存器a movc a,a+dptr ; 找到个位数显示代码 mov p1,#00001101b; 选择主干道道数码管个位片 mov p0,a ; 送出个位数显示代码 lcall delay1 ; 延时5ms一点亮数码管 mov a,24h ; 要支干道方向显示的时间移到寄存器a mov b,#10 div ab ; 要显示的时间与10相除,求出十位和个位 movc a,a+dptr ; 找到十位的显示代码 mov p1,#00001011b ; mov p0,a ; 送出十位显示代码 lcall delay1 ; 延时5ms以点亮数码管 mov a,b movc a,a+dptr mov p1,#00000111b ; 选择支干道数码管个位片 mov p0,a ; 送出个位显示代码 lcall delay1 djnz r7,rp3 ret .特殊车辆通过的时间显示子程序. disp4: mov p0,#0 ; 熄灭数码管 mov r7,#50 ; 以下调用两次0.01秒延时程序,故50*2*0.01=1秒 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 delay ; 延时10ms以点亮数码管 mov a,b ; 把个位数移到寄存器a movc a,a+dptr ; 找到

温馨提示

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

评论

0/150

提交评论