本科毕业设计(基于单片机的电梯控制模拟系统设计)_第1页
本科毕业设计(基于单片机的电梯控制模拟系统设计)_第2页
本科毕业设计(基于单片机的电梯控制模拟系统设计)_第3页
本科毕业设计(基于单片机的电梯控制模拟系统设计)_第4页
本科毕业设计(基于单片机的电梯控制模拟系统设计)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计〔论文〕本科毕业设计〔论文〕基于单片机的电梯控制模拟系统设计学院名称:专业:班级:学号:姓名:指导教师姓名:指导教师职称:二〇一五年六月基于单片机的电梯控制模拟系统设计摘要:随着我国人口老龄化的进程,目前的低层建筑对电梯的需求会日趋增加,因此本文设计一种基于AT89S52的电梯模拟控制系统,本系统本钱低、通用灵活,可以大面积推广。本控制系统模拟电梯的根本功能,电梯的内外按键使用户可以选择电梯到达的楼层,数码管可以显示电梯的当前所在楼层,电梯的升降通过发光二极管显示,通过电机的正反转模拟电梯的上下行。本系统主要分为硬件局部和软件局部,硬件局部主要有单片机模块、电梯内外按键模块、电梯状态指示灯模块、楼层显示模块、电机驱动控制模块、报警模块等。软件局部使用C语言编程实现,移植性强,便于修改和调用。关键词:单片机;电梯控制;步进电机;AT89S52DesignofElevatorControlSystemBasedonMCUAbstract:Astheprocessofpopulationaginginchina,theelevatorneedsofthelowrisebuildingwillbeincreased.SothisarticleintroducestheelevatorcontrolsystembasedonAT89S52.Thissystemisgeneralpurposeandflexibleaswellaslowcostwhichcanpromotetolargerareas.Thiscontrolsystemsimulatesthebasicfunctionsoftheelevator.Theuserscanusethebuttonsinsideandoutsidetochoosewhichfloortogetto.LEDSegmentdisplayscanshowwhichfloortheelevatorstopsatatpresent.TheLEDsshowtheriseordescendoftheelevatorwhichsimulatedbythemotorrotatinginforwardorbackwarddirection.Thissystemismainlydividedintohardwarepartandsoftwarepart.Thehardwarepartconsistsofsingle-chipmodule,thebuttonsinsideandoutsideofelevatormodule,theLEDdisplaymodule,thefloorindicatormodule,electricmotordrivemoduleandalarmmodule.ThesoftwarepartusesClanguagetoprogramthatcansolveportabilityproblem.ItiseasytomodifyandinvoketheprogramsKeywords:MCU;Elevatorcontrol;Steppermotor;AT89S52目录TOC\o"1-3"\h\u27856前言 118020第1章方案设计 2252911.1设计要求 2180791.2方案的比拟和论证 247921.2.1控制核心选择280931.2.2键盘选择2239491.2.3电动机选择334081.3系统结构框图 315104第2章硬件电路设计与实现 4199592.1单片机控制模块 420912.1.1主控芯片4273212.1.2时钟电路设计541652.1.3复位电路设计5301872.2电源设计 6185022.3单片机端口扩展设计 6298872.4电梯内外按键模块设计 8154622.4.1电梯内按键设计859322.4.2电梯外按键设计8263282.4.3电梯内按键指示灯设计9144122.4.4电梯外按键指示灯设计1085042.5楼层显示模块设计 11129382.5.1当前楼层显示设计11119042.5.2电梯运行状态指示灯设计12118552.6报警模块设计 1324282.6.1报警按键设计1318142.6.2蜂鸣器电路设计13174342.7电机驱动控制模块设计 1451726126第3章系统软件设计方案 15108873.1程序设计思路 15280513.2主程序流程图 16274873.3局部子程序流程图 172203.3.1上下行指示灯子程序17150993.3.2寻找目标楼层子程序1810565第4章系统软硬件调试方案 1989964.1硬件电路的制作与调试 19223394.1.1硬件电路的制作19178844.1.2硬件电路的调试19185934.2软件调试 2018000参考文献 219786致谢 2231435附录A整体电路原理图 2325246附录B源程序 24前言1853年的纽约世界博览会,奥的斯向世人展示了其创造的平安升降梯,自此电梯开始在人类社会中得以广泛的运用并深刻影响着人们的生活。中国最早的一部电梯出现在上海,是由美国奥的斯公司于1901年安装的。1932年由美国奥的斯公司安装在天津利顺德酒店的电梯至今还在平安运转着。随着十一届三中全会后改革开放拉开序幕,我国电梯业进入了高速开展的时期。几乎每个城市,我们都可以看到电梯被广泛运用在各行各业。在酒店、办公大厦、购物商场、娱乐场所、仓库以及居民楼都有电梯在默默的辛苦工作。在现代社会中,电梯已成为我们生活不可缺少的一局部[1]。电梯经过一百六十多年的开展和进步,平安已不再是电梯开展的唯一趋势。目前电梯的开展趋势主要有绿色化、节能化、智能化。绿色理念表达在电梯产品的材料环保性运行的科学性,电梯零部件可回收的利用,从而对环境无污染。节能性主要是控制电梯的能耗,减少电梯系统的惯性和摩擦阻力,合理运用对重和平衡重,而在电梯的运行模式中更注重智能化交通模式,比方如何使电梯运送最大化量的乘客,如何停靠的楼层最少等。智能化是使电梯参加到大厦智能化运行当中,使电梯提供更优质的效劳质量,适应不同时间段大厦内部电梯需求的变化。随着我国人口老龄化的开展,一些建造比拟早的小区建筑以及在建的低于七层的建筑对于电梯的需求日益增加,这样的楼层需要简单廉价的电梯控制,可以大面积的推广。而对于目前电梯控制系统,多数是继电器控制或PLC控制,本钱较高。基于此本次电梯模拟控制以单片机为核心,结合外围的硬件电路,通过C语言编程控制电梯运行。对于目前低层建筑对电梯的需求而言,单片机系统本钱较低、通用灵活、便于控制,能够得以广泛实际的运用。第1章方案设计1.1设计要求〔1〕设置电梯的内部和外部按键,电梯内有一到六层的楼层选择按键,每层楼电梯外都有相应的上下行选择按键。电梯的上下方向按用户的需求顺序进行。如果各楼层同时呼叫,那么坚持先上行,后下行的原那么。〔2〕电梯当前所处楼层由数码管显示,电梯的上升和下降时点亮相应的发光二极管以表示。〔3〕当长时间无人呼叫电梯时,电梯应停在第一层。当电梯到达呼叫楼层开门时,蜂鸣器鸣叫以提醒。电梯内设有紧急故障报警按键。〔4〕电梯实际的上升和下降通过步进电进的正反转模拟。1.2方案的比拟和论证控制核心选择方案一:FPGA。方案二:单片机。本次系统的控制核心主要在FPGA和单片机中选择。FPGA运行速度快,处理能力强,可以实现很多拓展功能,但硬件复杂,本钱较高。单片机设计较简单,C语言编程移植性强,通用灵活,但运行速度相对而言较慢。最终从电梯系统的本钱和功能角度考虑,本次设计选择方案二,单片机作为核心控制器即可满足系统的需要。键盘选择方案一:矩阵键盘。方案二:独立式按键。由于系统要求电梯内外都需要按键实现客人到达不同楼层的需要,所需的按键数量较多,虽然独立式按键比拟简单,但会占用大量的I/O口。而使用矩阵键盘,可以通过8个I/O控制16个按键,节省I/O口,因此考虑到节省端口的效果,本次设计选择矩阵键盘。电动机选择方案一:三相异步电动机。方案二:四相六线制步进电机。本次系统使用电机正反转模拟电梯上下行,步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变成角位移,即给一个脉冲,步进电机就转一个角度,适合通过单片机控制。从本钱控制和实际效果考虑选择方案二满足要求。1.3系统结构框图基于单片机的电梯控制系统如图1-1所示,其中主要包括单片机模块、电梯内外按键模块、电梯状态指示灯模块、楼层显示模块、电机驱动控制模块、报警模块。单片机模块主控芯片为AT89S52,其为系统的核心模块[2-3],控制系统的输入输出及数据的分析处理;电梯内外按键是指电梯内有一到六层的楼层选择按键,每层楼外都有相应的上下行选择按键,满足不同的需求;电梯状态指示模块通过发光二极管显示当前电梯运行状态,每个内外按键配一只发光二极管,作为指示灯,两只发光二极管作为电梯上升和下降的指示灯,另一只发光二极管作为电梯门的状态指示灯,蜂鸣器在电梯开门时鸣响以提醒。楼层显示就是通过数码管显示电梯当前所处的楼层。电机驱动模块是接收单片机的脉冲信号来控制步进电机的正反转,模拟电梯的上下行。报警模块使用独立式按键,在紧急情况下实现电梯一键停止运行,同时蜂鸣器鸣响。控制核心控制核心电梯内外按键模块楼层显示模块电梯内外按键模块楼层显示模块报警模块报警模块电梯状态指示模块电机驱动控制模块电梯状态指示模块电机驱动控制模块图1-1基于单片机的电梯控制模拟系统设计框图硬件电路设计与实现2.1单片机控制模块主控芯片本次电子系统设计采用AT89S52作为主控芯片。AT89S52是一种低功耗、高性能CMOS8位微控制器[4],具有8K系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。AT89S52芯片引脚图如图2-1所示。图2-1AT89S52芯片引脚图AT89S52有1000次擦写周期,三级加密程序存储器,32个可编程I/O口线,三个16位定时器/计数器,8个中断源,全双工UART串行通道,低功耗空闲和掉电模式,掉电后中断可唤醒,有看门狗定时器。单片机中Vcc〔40脚〕、GND(20脚〕为单片机的电源引脚,AT89S52接入+5V电压即可正常工作。XTAL1〔19脚〕、XTAL2〔18脚〕[5,6]为外接时钟引脚,XTAL1为片内振荡电路的输入端,XTAL2 为片内振荡电路的输出端。RST(9脚〕为单片机的复位引脚。EA/Vpp〔31脚〕,当EA接高电平时,单片机读取内部程序存储器[3];当EA接低电平时,单片机直接读取外部〔ROM)。时钟电路设计时钟电路主要由一个12MHz的晶振和两个22pF电容组成,如图2-2所示,时钟电路一端和单片机的18端口和19端口连接,另一端接地。这种使用晶振配合产生时钟信号的方法称为外部时钟方式。图2-2时钟电路复位电路设计单片机的第9管脚是复位端,当向RST端输入一个短暂的高电平单片机就会复位(维持在2个机器周期以上)[7],复位后单片机就从头开始执行程序。如果单片机执行程序的过程中触发复位,那么单片机立即放弃当前操作而被强行从头开始执行程序。AT89S52的复位是由外部的复位电路来实现的。复位电路如图2-3所示,当时钟频率选用12MHz时,C1取10uF,R1取1KΩ,R2取10KΩ,电容C1充放电时间τ=R1*C1=0.1s>2us〔2个机器周期〕。图2-3复位电路2.2电源设计本设计通过DC电源接口提供+5V电压给各模块使用,如图2-4所示,通过USB接口线插入DC电源接口供电。图2-4电源模块2.3单片机端口扩展设计电梯系统中电梯内外都需要按键,相应的指示灯也必不可少,因此需要占用大量的I/O端口,而单片机本身的端口数量是有限的,不能满足本系统的需求。这就需要对单片机的端口进行扩展满足需求,本设计中使用8255A实现I/O接口扩展[8,9]。8255A是Intel公司生产的通用可编程并行I/O接口芯片,主要为Intel8080/8085而设计,也可用于MCS-51。MCS-51和8255A相连可为外部设备提供三个8位I/O端口,允许采用同步、异步和中断方式传送I/O数据。其使用通用性强,提供扩展端口满足本系统需求,应选择8255A作为扩展芯片,如图2-5是8255A芯片接口引脚图。图2-58255A芯片引脚图如图2-6所示为8255A扩展单片机端口原理图,单片机的P0.0到P0.7管脚与74LS373的D0到D7管脚以及8255A的D0到D7管脚对应连接,单片机的ALE〔30脚〕连接到74LS373的LE〔11脚〕。单片机的WR(16脚〕连接8255A的RD(5脚〕,单片机的RD(17脚〕连接8255A的WR(36脚〕。74LS373的Q0(2脚〕、Q1〔5脚〕、Q2〔6脚〕分别命名为A0、A1、CS,与8255A的A0〔9脚〕、A1〔8脚〕、CS〔6脚〕对应连接。图2-6单片机端口扩展74LS373是带三态缓冲输出的8D触发器,在单片机系统中扩展时,因为51单片机的P0口的地址数据复用,为了实现地址与数据的别离,将74LS373作为地址锁存器使用。其中将输入端D0~D7接至单片机的P0口,输出端提供的是低8位地址,单片机的ALE信号可以直接与74LS373的LE连接。输出允许端OE接地,表示输出三态门一直翻开。OE为低电平时,此时锁存使能端LE为高电平时,输出端Q0~Q7状态与输入端D0~D7状态相同。本系统中,74LS373的输出端连接8255A的地址线A0、A1和片选信号CS。通过A0、A1的4种不同组合〔00~11〕选择8255的3个并行的IO口和控制存放器。2.4电梯内外按键模块设计电梯内按键设计电梯内按键模块如图2-7所示,将单片机的P1.0、P1.1、P1.4、P1.5、P1.6、P1.7分别命名为R1、R2、C1、C2、C3、C4,电梯内一到六楼的按键按标识命名与单片机端口连接。图2-7电梯内按键电梯外按键设计电梯外部按键如图2-9所示,将单片机的P1.1、P1.2、P1.3、P1.4、P1.5、P1.6、P1.7分别命名为r2、r3、r4、c1、c2、c3、c4,电梯外部一楼上行按键、六楼下行按键和二楼到五楼的上下行按键按标识和单片机端口对应连接。图2-8电梯外按键本系统使用矩阵键盘以减少I/O口的占用,在矩阵键盘中每条水平线和垂直线在交叉处不直接相连,而是通过一个按键相连接,这样4条水平线和4条垂直线最多就可以有16个按键。通过行扫描法判断被按下按键所代表的含义,行线中〔P1.0~P1.3〕依次输出低电平,即其某行线为低电平时,其他线输出高电平。确定某根行线为低电平后,再逐行检测各列线〔P1.4~P1.7〕的上下电平状态[10,11]。如果检测到某列为低电平时,那么其与为低电平的行线交叉处的按键为被按下的按键。电梯内按键指示灯设计电梯内一楼到六楼的按键都搭配其相应发光二极管作为指示灯,如图2-9所示,指示灯选择红色led,选择470Ω电阻起到限流作用。LED工作电流5mA~15mA,本系统提供的电压为5V,那么限流电阻范围为330Ω~1kΩ,取470Ω满足要求。按键指示灯一端接电源,另一端从一楼到六楼的按键指示灯分别接到8255A的PA0到PA5端口。端口输出低电平点亮相应的指示灯。图2-9电梯内按键指示灯电梯外按键指示灯设计电梯内一楼上行键、六楼下行键和二楼到五楼上下行键都搭配发光二极管作为指示灯,如图2-10所示,指示灯选择红色LED,选择470Ω电阻起到限流作用。按键指示灯一端接电源,另一端从一楼到六楼的按键指示灯分别接到8255A的PA6、PA7和PB0到PB7端口。端口输出低电平点亮相应的指示灯。图2-10电梯外按键指示灯2.5楼层显示模块设计当前楼层显示设计楼层显示模块主要有CD4511、七段共阴极数码管、1kΩ电阻组成。其中CD4511是一片七段译码器,具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流[12,13],可直接驱动共阴LED数码管,满足本系统的要求。如图2-11所示为CD4511芯片管教引脚图。图2-11CD4511芯片管教引脚图A0〔7脚〕、A1〔1脚〕、A2〔2脚〕、A3〔6脚〕为4511芯片的8421BCD码的输入端,VDD接电源正极,VSS接电源负极,Ya〔13脚〕、Yb〔12脚〕、Yc〔11脚〕、Yd〔10脚〕、Ye〔9脚〕、Yf〔15脚〕、Yg〔14脚〕为4511芯片的数据输出端,输出高电平有效。BI〔4脚〕是消隐输入控制端,当BI=0时,不管其它输入端状态如何,七段数码管均处于熄灭〔消隐〕状态,不显示数字。LT〔3脚〕是测试输入端,当BI=1,LT=0时,译码输出全为1,不管输入A0~A4状态如何,七段均发光显示8,主要用来检测数码管的好坏。当前楼层显示模块原理图如图2-12所示,8255A的PC4到PC7脚和CD4511的A到D脚对应连接。CD4511的QA到QG脚接1kΩ电阻后与数码管的A到G脚对应连接。CD4511的LT〔3脚〕、BI〔4脚〕接电源,LE/STB(5脚〕接地。数码管的段驱动正常工作电流在3~10mA,本系统使用的数码管在其被点亮时压降为1.7V,外接电压为5V,那么限流电阻的范围是330Ω~1.1KΩ,取1KΩ电阻满足本系统要求,数码管不会因电流过大而损坏。图2-12楼层显示数码管电梯运行状态指示灯设计电梯的运行状态指示局部由绿色LED、红色LED、470Ω电阻组成,如图2-13所示,LED正极接电源、负极连限流电阻接8255A。上升指示灯接PC0〔14脚〕、下降指示灯接PC1(15脚〕、开门指示灯接PC2(16脚〕。图2-13楼层显示上下行指示灯2.6报警模块设计报警按键设计一键报警如图2-14所示,help按键一端接地,一端接单片机P3.5〔15脚〕。R6取10kΩ起到上拉电阻作用,按键按下时,单片机15脚接收到低电平后调用报警子程序。图2-14一键报警设计蜂鸣器电路设计蜂鸣器电路由9012三极管、200Ω电阻、蜂鸣器组成,其电路如图2-15所示。单片机P3.4〔14脚〕与三极管基极相连。本系统使用的9012三极管为PNP型[14],起到开关电路作用,当P3.4为低电平时三极管饱和导通,蜂鸣器响以提醒;而P3.4为高电平时三极管处于关闭状态。R5起到分压作用。图2-15蜂鸣器电路设计2.7电机驱动控制模块设计本次电梯控制系统使用步进电梯模拟日常生活中电梯的运行,步进电机是将电脉冲信号转变成角位移,是一种数字控制电动机,给其一个脉冲,步进电机就转动一个角度,适合单片机的控制[15]。同时,步进电机无累计误差,精度高,控制和机械结构简单,适合本系统的要求。图2-16是本次使用的四相六线制步进电机原理图。图2-16四相六线制步进电机原理图本次步进电机的型号为28BYJ-48,其电压为DC5V-DC12V。电机驱动模块如图2-17所示,由于单片机端口信号偏弱,需要通过ULN2003放大来驱动电机[16]。步进电机蓝色线、粉色线、黄色线、橙色线分别接到2003A的COM〔9脚〕、1C(16脚〕、2C(15脚〕、3C(14脚〕对应的管脚。2003A的1B到4B管教脚分别接到单片机对应的P3.0到P3.3管脚上。图2-17电机驱动第3章系统软件设计方案3.1程序设计思路首先,不同楼层的按键都有可能被同时按下,比方电梯上升的过程中,较低楼层的用户呼叫电梯,这需要电梯的程序中及时反映当前每个按键所处的状态,哪层楼有客户的需求,并且要考虑当前呼叫电梯的楼层和目前电梯运行的方向是否一致。电梯及时规划好合理的运行方式,坚持先上升后下降的理念。其次,应该考虑电梯在每个楼层之间运行都需要一定的时间,根据上升或下降及时点亮相应的指示灯。当电梯停在有用户呼叫的楼层时,开门和关门都需要时间,要在程序中预留相应的停等时间,同时要求开门指示灯点亮和蜂鸣器鸣叫。电梯上下行时,单片机输出信号驱动相应电机的正反转。最后,当电梯完成运送任务后长时间无人呼叫时,各楼层的按键没有被按下时,程序中应帮助其判定当前无人乘坐或等待,电梯应默认回到第一层。3.2主程序流程图图3-1主程序流程图如图3-1所示,系统进行初始化,设置8255A工作方式,对定时器和中断有关的存放器初始化。当程序中上升的标志变量为1有效时,调用电机顺时针转动子程序,当程序中下降的标准变量为1有效时,调用电机逆时针转动子程序。然后调用子程序判断有无报警需求,当电梯当前运行且指示灯亮时,开始调用扫描楼层子程序和电梯上下行指示灯子程序。当电梯停止时,启动定时器0,等待电梯停留到达5s后关闭定时器0和电梯门指示灯,电梯开始运行。3.3局部子程序流程图上下行指示灯子程序图3-2上下行指示灯流程图上下行指示灯子程序流程图如图3-2所示,当目前所处楼层和目标楼层不一致时,如果用户所在楼层比当前楼层高,那么显示上行小灯,电机正转标志变量赋值1有效;如果用户所在楼层比当前楼层低,那么显示下行小灯,电机反转标志变量赋值1有效。开启楼层定时器,间隔楼层间电梯所需时间定为2.5s。寻找目标楼层子程序图3-3寻找目标楼层流程图寻找下一个楼层子程序流程图如图3-3所示,当目前电梯处于六层时,调整电梯方向为向下。当目前电梯在一楼时,调整电梯方向为向上,并且从上往下检测楼上是否有下楼的请求。当方向标志位变量为零时,处理向下运行的情况,如当前楼层有请求时,先去除当前请求,然后从当前楼依次向下搜索。当某一楼层外有呼叫或电梯内有需求时,目标标志位移到下一位,否那么没有向下的请求时,那么调整方向为向上。当某一楼层外有呼叫或电梯内有需求时,目标标志位移到下一位。当向上也没有请求时,电梯准备回到一楼。处理向上运行的情况,如当前楼层有请求时,先去除当前请求,然后从当前楼依次向上搜索。当某一楼层外有呼叫或电梯内有需求时,目标标志位移到下一位,扫描到第六层后,电梯方向改为向下。第4章系统软硬件调试方案4.1硬件电路的制作与调试硬件电路的制作根据仿真好的硬件图按步骤进行硬件电路的焊接〔1〕焊接单片机控制模块及其时钟电路和复位电路。〔2〕焊接单片机端口扩展模块。〔3〕焊接电梯内外按键模块。〔4〕焊接楼层显示模块。〔5〕焊接报警模块。〔6〕焊接电机驱动控制模块。硬件电路的调试首先检查电路板焊接是否有误,对照电路原理图检查元器件安装是否完整,有无漏焊、错焊的出现,使用万用表检查电路中是否出现虚焊、短路,以免上电后损伤元器件。用万用表检测单片机的18与19脚的电压,如果在2~3V间说明单片机可以正常工作,我检测的结果为2.3V,满足其要求。编写简单的数码管驱动程序,以检查8255A与数码管显示电路是否能正常工作。编写一个按键控制led灯点亮的小程序,以检测电梯内外按键模块、电梯运行指示灯模块、报警按键是否能正常工作。编写控制电机转动的程序,以检测电机驱动控制模块是否焊接正常。4.2软件调试软件编程之前需要明确系统的整个工作流程,首先要画一个主程序流程图,方便自己编程的时候整体构思。程序相对较大的情况下,我们常常会编写子程序然后调用。我们需要根据具体功能分模块编写子程序,最后与主程序构成完整程序。本次电梯模拟系统中,电梯所处的状态是整个程序成功运行的核心保证。在电梯每经过一个楼层时,就会自动调用相应的子程序,能够高效率、短时间、人性化对电梯的下一步运行作出规划,是否停靠本楼层,相应的指示灯如何显示,下一步是上升还是下降。程序中将实际情况分为四种情况来判断:电梯上升且是送人〔即电梯此时位于底层,而高层有人呼叫要上楼〕、电梯上升且是去接人〔即电梯此时位于底层,而高层有人呼叫要下楼〕、电梯下降且是去送人〔即电梯此时位于高层,而低层有人呼叫要下楼〕、电梯下将且是去接人〔即电梯此时位于高层,而低层有人呼叫要上楼〕。以上四种情况会是电梯面临的大局部实际情况。而首先,我们要了解电梯是如何得知此时它是上面四种的哪一种情况的呢?这可以分为两个步骤:第一判断电梯是上行还是下行;第二,判断是去接人还是去送人。然后对电梯下一步作出判断,是否有人在目前规划好的路线上有上下行的需求。最终,给电梯一条合理的运行路线。参考文献[1]马超.基于单片机控制的电梯控制器[J].科技信息,2011,(29).[2]李文方,乐丽琴.四层楼电梯模拟控制系统设计[J].机械工程与自动化,2011,(01):155-157.[3]宾峰,唐立军,周健.基于单片机控制的模拟电梯设计与实现[J].现代电子技术,2014,(02):56-59,63.[4]李广弟,朱月秀,冷祖祁.单片机根底〔第3版〕[M].北京航空航天大学出版,2007.[5]TunDongLiu,Y.Han,H.Su,YingWang.DesignandTestofExpressElevatorControlSystem[J].MaterialsScienceForum,2009,Vol.626-727:521-546.[6]金沙.模拟电梯运行的控制系统[J].渤海大学学报〔自然科学版〕,2004,〔20):174-175.[7]徐正坤.基于AT89C52单片机的电梯控制系统设计[J].电子制作,2014,(18):64-65.[8]施勇.基于单片机的电梯的控制器的设计[D].[硕士学位论文].沈阳:沈阳建筑大学,2011.[9]潘江虎.电梯呼梯控制器的设计[D].[硕士学位论文].厦门:厦门大学,2009.[10]吴贻文.基于单片机的电梯控制模型实验教学系统设计[J].武汉职业技术学院学报,2005,(4):58-60.[11]邓佃毅.基于单片机的电梯控制器设计[J].机电信息,2010,(36):142-143.[12]申虎.电梯门机控制系统的研制[D].[硕士学位论文].西安:西北工业大学,2001.[13]李怡诚.浅析单片机在电梯系统中的应用[J].商情,2014,(17):312-312.[14]曹荣敏,张凤池.单片机对电梯运行系统模拟的研究[J].微处理机,1998,(3):49-51.[15]唐介.电机与拖动〔第二版〕[M].高等教育出版社,2009.````````````````[16]ZhangXiaoqing,FengLishuang.DesignofPWMdriverofthree-phasesteppingmotor[J].JournalofBeijingInformationScience&Technology,2001(01).致谢大学四年的学习生活即将结束,毕业设计是我在校期间最后一项任务。如今,论文如期完成,心中倍感喜悦的同时更是充满了一种感谢之情。首先感谢学校为我们提供一个这样的时机,让我们有时机对大学四年来所学的专业知识进行复习实践。在毕业设计当中,特别感谢我的指导老师戴老师在这段时间对我的关心和指导。当我在设计当中遇到困难时,戴老师总是会细心的帮助我,启发我对问题全新的思考,教会了我很多解决问题的方法。戴老师身上所表达的责任感更是教会了我以后对待工作要有严谨踏实的作风。我也希望借此感谢大学四年所有在学习和生活上给予我帮助的老师,感谢他们让我更加体会了学高为师,身正为范的含义。最后,感谢四年来朝夕相处的同学们,谢谢你们平日的关心和帮助,也教会了我团队集体的重要性。附录A整体电路原理图附录B源程序#include<at89x51.h>#include<intrins.h>#include<absacc.h>#include"data.h"#defineKEY_READP1#definePAXBYTE[0x00]/*A口地址*/#definePBXBYTE[0x01]/*B口地址*/#definePCXBYTE[0x02]/*C口地址*/#defineCOMANDXBYTE[0x03]/*控制字地址*/#defineMOTOR0P3_0#defineMOTOR1P3_1#defineMOTOR2P3_2#defineMOTOR3P3_3#defineBUZZP3_4#defineHELPP3_5unsignedcharup_flag=0,down_flag=0;unsignedcharalarm_flag=0;/*按键值*/unsignedkey_value;/*一共6层*/Floorfloor[7];/*电梯内部数据结构*/Innerinner;/*电梯状态数据结构*/Statestate;/*按键状态*/Scan_Statekey_state,help_state;bitdir=1,stop=0;unsignedcharnf=1,cf=1;unsignedcharflag=0;unsignedchartimer1,timer2;unsignedcharup_floor[7]={0};unsignedchardown_floor[7]={0};staticstep_index=0;unsignedintmotor_flag=0;unsignedcharphasecw[4]={0x08,0x04,0x02,0x01};//正转电机导通相序D-C-B-Aunsignedcharphaseccw[4]={0x01,0x02,0x04,0x08};//反转电机导通相序A-B-C-DvoidDelay_xms(unsignedintx){ unsignedinti,j; for(i=0;i<x;i++) { for(j=0;j<112;j++); }}/*顺时针转动*/voidMotorCW(void){ MOTOR0=0; MOTOR1=0; MOTOR2=0; MOTOR3=1; Delay_xms(3);//转速调节 MOTOR0=0; MOTOR1=0; MOTOR2=1; MOTOR3=0; Delay_xms(3);//转速调节 MOTOR0=0; MOTOR1=1; MOTOR2=0; MOTOR3=0; Delay_xms(3);//转速调节 MOTOR0=1; MOTOR1=0; MOTOR2=0; MOTOR3=0; Delay_xms(3);//转速调节}/*逆时针转动*/voidMotorCCW(void){ MOTOR0=1; MOTOR1=0; MOTOR2=0; MOTOR3=0; Delay_xms(3);//转速调节 MOTOR0=0; MOTOR1=1; MOTOR2=0; MOTOR3=0; Delay_xms(3);//转速调节 MOTOR0=0; MOTOR1=0; MOTOR2=1; MOTOR3=0; Delay_xms(3);//转速调节 MOTOR0=0; MOTOR1=0; MOTOR2=0; MOTOR3=1; Delay_xms(3);//转速调节}voidMotorStop(void){ MOTOR0=0; MOTOR1=0; MOTOR2=0; MOTOR3=0;}/*处理按键*/voidDeal_Key(){ switch(key_value) { /*1-6代表电梯内部按键*/ case1:/*6楼*/ { if(nf!=6) { up_floor[6]=1; inner.floor_led[6]=1;/*标志6楼的小灯为亮*/ } else { up_floor[6]=0; inner.floor_led[6]=0;/*标志6楼的小灯为亮*/ } stop=0; break; } case2:/*5楼*/ { if(nf!=5) { inner.floor_led[5]=1;/*标志5楼的小灯为亮*/ } else { inner.floor_led[5]=0; } if(nf==6) { down_floor[5]=1; } elseif(nf>=1&&nf<=4) { up_floor[5]=1; } stop=0; break; } case3: { if(nf!=4) { inner.floor_led[4]=1;/*标志4楼的小灯为亮*/ } else { inner.floor_led[4]=0; } if(nf>=5&&nf<=6) { down_floor[4]=1; } elseif(nf>=1&&nf<=3) { up_floor[4]=1; } stop=0; break; } case4: { if(nf!=3) { inner.floor_led[3]=1;/*标志3楼的小灯为亮*/ } else { inner.floor_led[3]=0; } if(nf>=4&&nf<=6) { down_floor[3]=1; } elseif(nf>=1&&nf<=2) { up_floor[3]=1; } stop=0; break; } case5: { if(nf!=2) { inner.floor_led[2]=1;/*标志2楼的小灯为亮*/ } else { inner.floor_led[2]=0; } if(nf>=3&&nf<=6) { down_floor[2]=1; } elseif(nf==1) { up_floor[2]=1; } stop=0; break; } case6: { if(nf!=1) { down_floor[1]=1; inner.floor_led[1]=1;/*标志1楼的小灯为亮*/ } else { down_floor[1]=0; inner.floor_led[1]=0; } stop=0; break; } /*7为1楼的请求*/ case7: { if(nf!=1) { floor[1].led_up=1; up_floor[1]=1;/*1楼有向上的请求*/ } break; } case8: { if(nf!=6) { floor[6].led_down=1; down_floor[6]=1;/*6楼有向下的请求*/ } break; } /*9、10为2楼的请求*/ case9: { if(nf!=2||dir==0) { floor[2].led_up=1; up_floor[2]=1; } break; } case10: { if(nf!=2||dir==1) { floor[2].led_down=1; down_floor[2]=1;/*2楼有向下的请求*/ } break; } /*11、12为3楼的请求*/ case11: { if(nf!=3||dir==0) { floor[3].led_up=1; up_floor[3]=1;/*3楼有向上的请求*/ } break; } case12: { if(nf!=3||dir==1) { floor[3].led_down=1; down_floor[3]=1;/*3楼有向下的请求*/ } break; } /*13、14为4楼的请求*/ case13: { if(nf!=4||dir==0) { floor[4].led_up=1; up_floor[4]=1;/*4楼有向上的请求*/ } break; } case14: { if(nf!=4||dir==1) { floor[4].led_down=1; down_floor[4]=1;/*4楼有向下的请求*/ } break; } /*15、16为5楼的请求*/ case15: { if(nf!=5||dir==0) { floor[5].led_up=1; up_floor[5]=1;/*5楼有向上的请求*/ } break; } case16: { if(nf!=5||dir==1) { floor[5].led_down=1; down_floor[5]=1;/*5楼有向下的请求*/ } break; } }}/*显示按键对应的小灯*/voidDisp_LED(){ state.reqA=0; state.reqA|=inner.floor_led[1]<<0|inner.floor_led[2]<<1; state.reqA|=inner.floor_led[3]<<2|inner.floor_led[4]<<3; state.reqA|=inner.floor_led[5]<<4|inner.floor_led[6]<<5; state.reqA|=floor[1].led_up<<6|floor[6].led_down<<7; PA=~state.reqA; state.reqB=0; state.reqB|=floor[2].led_up<<0|floor[2].led_down<<1; state.reqB|=floor[3].led_up<<2|floor[3].led_down<<3; state.reqB|=floor[4].led_up<<4|floor[4].led_down<<5; state.reqB|=floor[5].led_up<<6|floor[5].led_down<<7; PB=~state.reqB;}/*寻找下一个要去的楼层*/voidselect_next(){ unsignedchari; /*当前电梯在6楼*/ if(nf==6) { dir=0;/*调整电梯方向为向下*/ } elseif(nf==1)/*当前电梯在1楼*/ { dir=1;/*电梯方向为向上*/ /*停在一楼的时候,从上往下检测楼上是否有下楼的请求*/ for(i=6;i>=2;i--) { if(down_floor[i]==1) { up_floor[i]=down_floor[i]; down_floor[i]=0; break; } } } /*处理向下运行的情况*/ if(dir==0) { /*当前楼层有请求*/ if(down_floor[nf]==1) { /*去除请求*/ down_floor[nf]=0; stop=1; return; } /*从当前楼依次往下搜索*/ for(i=nf-1;i>=1;i--) { /*某一楼层外面有呼叫请求或者内部有需求*/ if(down_floor[i]) { cf=i; /*标志下一个楼层*/ return; } } /*否那么没有向下的请求,那么调整为向上*/ dir=1; /*向上搜索*/ for(i=nf;i<=6;i++) { /*外面或者内部有请求*/ if(up_floor[i]) { cf=i; return; } } /*向上没有任何请求*/ dir=0; cf=1; } /*向上搜索*/ /*当前楼层有请求*/ if(up_floor[nf]==1) { /*去除请求*/ up_floor[nf]=0; stop=1; return; } /*从上一楼向上搜索*/ for(i=nf+1;i<=6;i++) { /*外面或者内部有请求*/ if(up_floor[i]) { cf=i; return; } } if(i==7) { dir=0; }}voidstep(bitdir){ if(cf==nf) { return; } elseif(!flag) { flag=1; /*电梯向上运行*/ if(dir==1) { /*显示向上小灯*/ PC=PC&0xFE; up_flag=1; down_flag=0; } else { PC=PC&0xFD; up_flag=0; down_flag=1; } timer1=0; TR0=1;/*开启定时器*/ }}voidDelay(inti){ unsignedchark; for(;i>0;i--) { for(k=100;k>0;k--); }}voidBuzz(void){ unsignedcharcnt; for(cnt=0;cnt<200;cnt++) { BUZZ=~BUZZ; Delay(5); }}voidAlarm(){ if(alarm_flag==1) { /*电机停止运行*/ MotorStop(); /*所有小灯点亮*/ PA=0x00; PB=0x00; /*关闭中断*/ EA=0; while(1) { Buzz(); Delay(800); } }}voidtimer0int()interrupt1{ timer1++; timer2++; if(flag) { if(timer1==50)/*电梯运行时间到*/ { timer1=0; up_flag=0; down_flag=0; /*当前方向为向上*/ if(dir) {nf++; up_floor[nf]=0; motor_flag=1; } else {nf--; down_floor[nf]=0; motor_flag=2; } flag=0; TR0=0; /*显示当前楼层*/ PC=nf<<4|(PC&0x0F); /*当前楼层即为要去的楼层*/ if(cf==nf) { TR0=0; /*关闭上下行小灯*/ PC|=0x03; /*开启电梯门的灯*/ PC&=~(1<<2); MotorStop(); Buzz();/*蜂鸣器响*/ BUZZ=1;/*关闭蜂鸣器*/ /*电机停止*/ motor_flag=0; stop=1;/*电梯停止运行*/ /*关闭电梯内的楼层小灯*/ inner.floor_led[nf]=0; /*关闭外面的小灯*/ floor[nf].led_up=0; floor[nf].led_down=0; Disp_LED(); return; } } } TH0=0x3C; TL0=0xB0;}voidtimer1int()interrupt3{ unsignedcharscode,k,col;KEY_READ=0xF0;switch(help_state) { casestate_0: { if(HELP==0)/*求助键被按下*/ { help_state=state_1; } else { help_state=state_0; } break; } casestate_1: { if(HELP==0)/*确定是按键被按下了*/ { alarm_flag=1; help_state=state_2; } else { help_state=state_0; } break; } casestate_2: { if(HELP==1) { help_state=state_0; } else { help_state=state_2; } break; } } switch(key_state) { c

温馨提示

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

评论

0/150

提交评论