本科毕业设计(基于单片机的电梯控制模拟系统设计).doc
精选优质文档-倾情为你奉上本科毕业设计(论文)基于单片机的电梯控制模拟系统设计 学院名称: 专 业: 班 级: 学 号: 姓 名: 指导教师姓名: 指导教师职称: 二一五年 六 月专心-专注-专业基于单片机的电梯控制模拟系统设计摘 要:随着我国人口老龄化的进程,目前的低层建筑对电梯的需求会日趋增加,因此本文设计一种基于AT89S52的电梯模拟控制系统,本系统成本低、通用灵活,可以大面积推广。本控制系统模拟电梯的基本功能,电梯的内外按键使用户可以选择电梯到达的楼层,数码管可以显示电梯的当前所在楼层,电梯的升降通过发光二极管显示,通过电机的正反转模拟电梯的上下行。本系统主要分为硬件部分和软件部分,硬件部分主要有单片机模块、电梯内外按键模块、电梯状态指示灯模块、楼层显示模块、电机驱动控制模块、报警模块等。软件部分使用C语言编程实现,移植性强,便于修改和调用。关键词:单片机;电梯控制;步进电机;AT89S52Design of Elevator Control System Based on MCUAbstract: As the process of population aging in china, the elevator needs of the low rise building will be increased. So this article introduces the elevator control system based on AT89S52. This system is general purpose and flexible as well as low cost which can promote to larger areas. This control system simulates the basic functions of the elevator. The users can use the buttons inside and outside to choose which floor to get to. LED Segment displays can show which floor the elevator stops at at present. The LEDs show the rise or descend of the elevator which simulated by the motor rotating in forward or backward direction. This system is mainly divided into hardware part and software part. The hardware part consists of single-chip module, the buttons inside and outside of elevator module, the LED display module, the floor indicator module, electric motor drive module and alarm module. The software part uses C language to program that can solve portability problem. It is easy to modify and invoke the programsKey words: MCU;Elevator control;Stepper motor;AT89S52目 录前言1853年的纽约世界博览会,奥的斯向世人展示了其发明的安全升降梯,自此电梯开始在人类社会中得以广泛的运用并深刻影响着人们的生活。中国最早的一部电梯出现在上海,是由美国奥的斯公司于1901年安装的。1932年由美国奥的斯公司安装在天津利顺德酒店的电梯至今还在安全运转着。随着十一届三中全会后改革开放拉开序幕,我国电梯业进入了高速发展的时期。几乎每个城市,我们都可以看到电梯被广泛运用在各行各业。在酒店、办公大厦、购物商场、娱乐场所、仓库以及居民楼都有电梯在默默的辛苦工作。在现代社会中,电梯已成为我们生活不可缺少的一部分1。电梯经过一百六十多年的发展和进步,安全已不再是电梯发展的唯一趋势。目前电梯的发展趋势主要有绿色化、节能化、智能化。绿色理念体现在电梯产品的材料环保性运行的科学性,电梯零部件可回收的利用,从而对环境无污染。节能性主要是控制电梯的能耗,减少电梯系统的惯性和摩擦阻力,合理运用对重和平衡重,而在电梯的运行模式中更注重智能化交通模式,比如如何使电梯运送最大化量的乘客,如何停靠的楼层最少等。智能化是使电梯加入到大厦智能化运行当中,使电梯提供更优质的服务质量,适应不同时间段大厦内部电梯需求的变化。随着我国人口老龄化的发展,一些建造比较早的小区建筑以及在建的低于七层的建筑对于电梯的需求日益增加,这样的楼层需要简单便宜的电梯控制,可以大面积的推广。而对于目前电梯控制系统,多数是继电器控制或PLC控制,成本较高。基于此本次电梯模拟控制以单片机为核心,结合外围的硬件电路,通过C语言编程控制电梯运行。对于目前低层建筑对电梯的需求而言,单片机系统成本较低、通用灵活、便于控制,能够得以广泛实际的运用。第1章 方案设计1.1 设计要求(1)设置电梯的内部和外部按键,电梯内有一到六层的楼层选择按键,每层楼电梯外都有相应的上下行选择按键。电梯的上下方向按用户的需求顺序进行。如果各楼层同时呼叫,则坚持先上行,后下行的原则。(2)电梯当前所处楼层由数码管显示,电梯的上升和下降时点亮相应的发光二极管以表示。(3)当长时间无人呼叫电梯时,电梯应停在第一层。当电梯到达呼叫楼层开门时,蜂鸣器鸣叫以提醒。电梯内设有紧急故障报警按键。(4)电梯实际的上升和下降通过步进电进的正反转模拟。1.2 方案的比较和论证1.2.1 控制核心选择方案一:FPGA。方案二:单片机。本次系统的控制核心主要在FPGA和单片机中选择。FPGA运行速度快,处理能力强,可以实现很多拓展功能,但硬件复杂,成本较高。单片机设计较简单,C语言编程移植性强,通用灵活,但运行速度相对而言较慢。最终从电梯系统的成本和功能角度考虑,本次设计选择方案二,单片机作为核心控制器即可满足系统的需要。1.2.2 键盘选择方案一:矩阵键盘。方案二:独立式按键。由于系统要求电梯内外都需要按键实现客人达到不同楼层的需要,所需的按键数量较多,虽然独立式按键比较简单,但会占用大量的I/O口。而使用矩阵键盘,可以通过8个I/O控制16个按键,节省I/O口,因此考虑到节省端口的效果,本次设计选择矩阵键盘。1.2.3电动机选择方案一:三相异步电动机。方案二:四相六线制步进电机。本次系统使用电机正反转模拟电梯上下行,步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变成角位移,即给一个脉冲,步进电机就转一个角度,适合通过单片机控制。从成本控制和实际效果考虑选择方案二满足要求。1.3 系统结构框图基于单片机的电梯控制系统如图1-1所示,其中主要包括单片机模块、电梯内外按键模块、电梯状态指示灯模块、楼层显示模块、电机驱动控制模块、报警模块。单片机模块主控芯片为AT89S52,其为系统的核心模块2-3,控制系统的输入输出及数据的分析处理;电梯内外按键是指电梯内有一到六层的楼层选择按键,每层楼外都有相应的上下行选择按键,满足不同的需求;电梯状态指示模块通过发光二极管显示当前电梯运行状态,每个内外按键配一只发光二极管,作为指示灯,两只发光二极管作为电梯上升和下降的指示灯,另一只发光二极管作为电梯门的状态指示灯,蜂鸣器在电梯开门时鸣响以提醒。楼层显示就是通过数码管显示电梯当前所处的楼层。电机驱动模块是接收单片机的脉冲信号来控制步进电机的正反转,模拟电梯的上下行。报警模块使用独立式按键,在紧急情况下实现电梯一键停止运行,同时蜂鸣器鸣响。控制核心电梯内外按键模块楼层显示模块报警模块电梯状态指示模块电机驱动控制模块图1-1 基于单片机的电梯控制模拟系统设计框图第2章 硬件电路设计与实现2.1 单片机控制模块2.1.1主控芯片本次电子系统设计采用AT89S52作为主控芯片。AT89S52是一种低功耗、高性能8位微控制器4,具有8K系统可编程Flash。使用Atmel公司高密度非技术制造,与工业80C51 产品指令和引脚完全兼容。AT89S52芯片引脚图如图2-1所示。图2-1 AT89S52芯片引脚图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)。2.1.2时钟电路设计 时钟电路主要由一个12MHz的晶振和两个22pF电容组成,如图2-2所示,时钟电路一端和单片机的18端口和19端口连接,另一端接地。这种使用晶振配合产生时钟信号的方法称为外部时钟方式。图2-2 时钟电路2.1.3复位电路设计单片机的第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接口芯片,主要为Intel 8080/8085而设计,也可用于MCS-51。MCS-51和8255A相连可为外部设备提供三个8位I/O端口,允许采用同步、异步和中断方式传送I/O数据。其使用通用性强,提供扩展端口满足本系统需求,故选择8255A作为扩展芯片,如图2-5是8255A芯片接口引脚图。图2-5 8255A芯片引脚图如图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作为地址锁存器使用。其中将输入端D0D7接至单片机的P0口,输出端提供的是低8位地址,单片机的ALE信号可以直接与74LS373的LE连接。输出允许端OE接地,表示输出三态门一直打开。OE为低电平时,此时锁存使能端LE为高电平时,输出端Q0Q7状态与输入端D0D7状态相同。本系统中,74LS373的输出端连接8255A的地址线A0、A1和片选信号CS。通过A0、A1的4种不同组合(0011)选择8255的3个并行的IO口和控制寄存器。2.4电梯内外按键模块设计2.4.1电梯内按键设计电梯内按键模块如图2-7所示,将单片机的P1.0、P1.1、P1.4、P1.5、P1.6、P1.7分别命名为R1、R2、C1、C2、C3、C4,电梯内一到六楼的按键按标识命名与单片机端口连接。图2-7电梯内按键2.4.2电梯外按键设计电梯外部按键如图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.0P1.3)依次输出低电平,即其某行线为低电平时,其他线输出高电平。确定某根行线为低电平后,再逐行检测各列线(P1.4P1.7)的高低电平状态10,11。如果检测到某列为低电平时,则其与为低电平的行线交叉处的按键为被按下的按键。2.4.3电梯内按键指示灯设计电梯内一楼到六楼的按键都搭配其相应发光二极管作为指示灯,如图2-9所示,指示灯选择红色led,选择470电阻起到限流作用。LED工作电流5mA15mA,本系统提供的电压为5V,则限流电阻范围为3301k,取470满足要求。按键指示灯一端接电源,另一端从一楼到六楼的按键指示灯分别接到8255A的PA0到PA5端口。端口输出低电平点亮相应的指示灯。图2-9 电梯内按键指示灯2.4.4电梯外按键指示灯设计电梯内一楼上行键、六楼下行键和二楼到五楼上下行键都搭配发光二极管作为指示灯,如图2-10所示,指示灯选择红色LED,选择470电阻起到限流作用。按键指示灯一端接电源,另一端从一楼到六楼的按键指示灯分别接到8255A的PA6、PA7和PB0到PB7端口。端口输出低电平点亮相应的指示灯。图2-10电梯外按键指示灯2.5楼层显示模块设计2.5.1当前楼层显示设计楼层显示模块主要有CD4511、七段共阴极数码管、1k电阻组成。其中CD4511是一片七段译码器,具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流12,13,可直接驱动共阴LED数码管,满足本系统的要求。如图2-11所示为CD4511芯片管教引脚图。图2-11 CD4511芯片管教引脚图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,不管输入A0A4状态如何,七段均发光显示8,主要用来检测数码管的好坏。当前楼层显示模块原理图如图2-12所示,8255A的PC4到PC7脚和CD4511的A到D脚对应连接。CD4511的QA到QG脚接1k电阻后与数码管的A到G脚对应连接。CD4511的LT(3脚)、BI(4脚)接电源,LE/STB(5脚)接地。数码管的段驱动正常工作电流在310mA,本系统使用的数码管在其被点亮时压降为1.7V,外接电压为5V,则限流电阻的范围是3301.1K,取1K电阻满足本系统要求,数码管不会因电流过大而损坏。图2-12楼层显示数码管2.5.2电梯运行状态指示灯设计电梯的运行状态指示部分由绿色LED、红色LED、470电阻组成,如图2-13所示,LED正极接电源、负极连限流电阻接8255A。上升指示灯接PC0(14脚)、下降指示灯接PC1(15脚)、开门指示灯接PC2(16脚)。图2-13 楼层显示上下行指示灯2.6 报警模块设计2.6.1报警按键设计一键报警如图2-14所示,help按键一端接地,一端接单片机P3.5(15脚)。R6取10k起到上拉电阻作用,按键按下时,单片机15脚接收到低电平后调用报警子程序。图2-14 一键报警设计2.6.2蜂鸣器电路设计蜂鸣器电路由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.3.1上下行指示灯子程序图3-2 上下行指示灯流程图上下行指示灯子程序流程图如图3-2所示,当目前所处楼层和目标楼层不一致时,如果用户所在楼层比当前楼层高,则显示上行小灯,电机正转标志变量赋值1有效;如果用户所在楼层比当前楼层低,则显示下行小灯,电机反转标志变量赋值1有效。开启楼层定时器,间隔楼层间电梯所需时间定为2.5s。3.3.2寻找目标楼层子程序图3-3 寻找目标楼层流程图寻找下一个楼层子程序流程图如图3-3所示,当目前电梯处于六层时,调整电梯方向为向下。当目前电梯在一楼时,调整电梯方向为向上,并且从上往下检测楼上是否有下楼的请求。当方向标志位变量为零时,处理向下运行的情况,如当前楼层有请求时,先清除当前请求,然后从当前楼依次向下搜索。当某一楼层外有呼叫或电梯内有需求时,目标标志位移到下一位,否则没有向下的请求时,则调整方向为向上。当某一楼层外有呼叫或电梯内有需求时,目标标志位移到下一位。当向上也没有请求时,电梯准备回到一楼。处理向上运行的情况,如当前楼层有请求时,先清除当前请求,然后从当前楼依次向上搜索。当某一楼层外有呼叫或电梯内有需求时,目标标志位移到下一位,扫描到第六层后,电梯方向改为向下。第4章 系统软硬件调试方案4.1硬件电路的制作与调试4.1.1硬件电路的制作根据仿真好的硬件图按步骤进行硬件电路的焊接(1)焊接单片机控制模块及其时钟电路和复位电路。(2)焊接单片机端口扩展模块。(3)焊接电梯内外按键模块。(4)焊接楼层显示模块。(5)焊接报警模块。(6)焊接电机驱动控制模块。4.1.2硬件电路的调试首先检查电路板焊接是否有误,对照电路原理图检查元器件安装是否完整,有无漏焊、错焊的出现,使用万用表检查电路中是否出现虚焊、短路,以免上电后损伤元器件。用万用表检测单片机的18与19脚的电压,如果在23V间说明单片机可以正常工作,我检测的结果为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.5Tun Dong Liu,Y. Han,H. Su,Ying Wang.Design and Test of Express Elevator Control SystemJ.Materials Science Forum,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 Zhang Xiao qing,Feng Li shuang.Design of PWM driver of three-phase stepping motorJ.Journal of Beijing Information Science & Technology,2001(01).致 谢大学四年的学习生活即将结束,毕业设计是我在校期间最后一项任务。如今,论文如期完成,心中倍感喜悦的同时更是充满了一种感激之情。首先感谢学校为我们提供一个这样的机会,让我们有机会对大学四年来所学的专业知识进行复习实践。在毕业设计当中,特别感谢我的指导老师戴老师在这段时间对我的关怀和指导。当我在设计当中遇到困难时,戴老师总是会细心的帮助我,启发我对问题全新的思考,教会了我很多解决问题的方法。戴老师身上所体现的责任感更是教会了我以后对待工作要有严谨踏实的作风。我也希望借此感谢大学四年所有在学习和生活上给予我帮助的老师,感谢他们让我更加体会了学高为师,身正为范的含义。最后,感谢四年来朝夕相处的同学们,谢谢你们平日的关心和帮助,也教会了我团队集体的重要性。附录A 整体电路原理图附录B源程序#include <at89x51.h>#include <intrins.h>#include <absacc.h>#include "data.h"#define KEY_READ P1#define PA XBYTE0x00 /* A 口地址 */#define PB XBYTE0x01 /* B 口地址 */#define PC XBYTE0x02 /* C 口地址 */#define COMAND XBYTE0x03 /* 控制字地址 */#define MOTOR0 P3_0#define MOTOR1 P3_1#define MOTOR2 P3_2#define MOTOR3 P3_3#define BUZZ P3_4#define HELP P3_5unsigned char up_flag = 0, down_flag = 0;unsigned char alarm_flag = 0;/* 按键值 */unsigned key_value;/* 一共 6 层 */Floor floor7;/* 电梯内部数据结构 */Inner inner;/* 电梯状态数据结构 */State state;/* 按键状态 */Scan_State key_state, help_state;bit dir = 1, stop = 0;unsigned char nf = 1, cf = 1;unsigned char flag = 0;unsigned char timer1, timer2;unsigned char up_floor7 = 0;unsigned char down_floor7 = 0;static step_index = 0;unsigned int motor_flag = 0;unsigned char phasecw4 = 0x08, 0x04, 0x02, 0x01;/正转 电机导通相序 D-C-B-Aunsigned char phaseccw4 = 0x01, 0x02, 0x04, 0x08;/反转 电机导通相序 A-B-C-Dvoid Delay_xms(unsigned int x) unsigned int i,j; for ( i = 0; i < x; i+ ) for ( j = 0; j < 112; j+ ); /* 顺时针转动 */void MotorCW(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); /转速调节/* 逆时针转动 */void MotorCCW(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); /转速调节void MotorStop(void) MOTOR0 = 0; MOTOR1 = 0; MOTOR2 = 0; MOTOR3 = 0;/* 处理按键 */void Deal_Key()switch (key_value) /* 1 - 6 代表电梯内部按键 */case 1 : /* 6 楼 */if ( nf != 6 )up_floor6 = 1;inner.floor_led6 = 1; /* 标志 6 楼的小灯为亮 */elseup_floor6 = 0;inner.floor_led6 = 0; /* 标志 6 楼的小灯为亮 */stop = 0;break;case 2 : /* 5 楼 */if ( nf != 5 )inner.floor_led5 = 1; /* 标志 5 楼的小灯为亮 */elseinner.floor_led5 = 0; if ( nf = 6 )down_floor5 = 1;else if ( nf >= 1 && nf <= 4 )up_floor5 = 1;stop = 0;break;case 3 :if ( nf != 4 )inner.floor_led4 = 1; /* 标志 4 楼的小灯为亮 */elseinner.floor_led4 = 0;if ( nf >= 5 && nf <= 6 )down_floor4 = 1;else if ( nf >= 1 && nf <= 3 )up_floor4 = 1;stop = 0;break;case 4 :if ( nf !