《基于stm32的电梯控制器.docx》由会员分享,可在线阅读,更多相关《基于stm32的电梯控制器.docx(37页珍藏版)》请在课桌文档上搜索。
1、毕业设计题 目基于STM32的多层电梯控制器的设计 学 院 信息科学与工程学院 专 业电子信息科学与技术 班 级 学 生 学 号指导教师 摘 要世界上第一台电梯是由美国的奥的斯公司制造的。自从这第一台电梯于1987年问世以来,对生活在城市的楼宇中特别是高楼大厦中的人们的生活和工作带来了巨大的便利。随着社会经济的飞速开展,电梯与人们的生活越来越密不可分。本设计的电梯系统采用的是stm32微处理器。STM32处理器是基于Cortex-M3架构的嵌入式微处理器MCU,其中Cortex-M3架构是ARM公司推出的。STM32处理器具有高速、高集成度、低功耗、高可靠性等优点。正是由于STM32处理器具有
2、这些优点,它正适合运用于电梯控制。本设计中的电梯控制系统主要运用了STM32处理器GPIO口操作和其准确地定时功能。该电梯系统一共分6个局部,它们是 STM32处理器、电源系统、数码管显示器、键盘、LED小灯、直流电机驱动模块。这些局部是直接与STM32的GPIO口连接的,所以它们占用的GPIO口较多。关键词:STM32处理器;Cortex-M3架构;直流电机驱动模块ABSTRACTThe worlds first elevator is manufactured by the United States Otis. Since the first lift inception in 1987
3、, the way of people who live in the buildings in the city especially in the high-rise buildings and work has brought great convenience. With the rapid socioeconomic development, the elevator becomes increasingly inseparable in peoples lives.The designs of the elevator system use the STM32 microproce
4、ssor. The STM32 processor is based on Cortex-M3-based embedded microprocessor MCU, and Cortex-M3 architecture is ARM introduced. STM32 processor has the advantages of high-speed, high integration, low power consumption, high reliability and so on. Because of the STM32 processor has these advantages;
5、 it is suitable used in elevator control. The designs of the elevator control system mainly utilize the STM32 processor GPIO port operation and accurate timing functions. The elevator system is divided into six parts which are STM32 processors, power systems, digital display, keyboard, LED lights an
6、d DC motor driver module. These parts are connected directly with the STM32 GPIO ports that take more part of GPIO port.Keywords: STM32 processor; Cortex-M3 architecture; DC motor drive module32 / 37 目 录摘要IABSTRACTII第1章绪论11.1 课题背景11.1.1 选题背景11.1.2国外现状11.1.3 本课题的意义与研究容2第2章系统设计方案32.1 系统硬件总体组成32.1.1总体框
7、图32.2 系统硬件方案32.2.1 STM32选择方案32STM32的原理图与特性42.2.2 键盘设计方案62.2.3 LED指示灯设计方案62.2.4数码管显示器设计方案62.2.5电机驱动设计方案6第3章系统硬件设计73.1 硬件系统的总体设计73.2 硬件系统的局部设计73.2.1 键盘硬件电路设计73.2.2 LED指示灯硬件电路设计83.2.3 八段数码管硬件电路设计93.2.4电机驱动模块硬件电路10第4章系统软件设计124.1 主程序设计124.2 显示程序设计204.3 LED指示灯程序设计214.3 键盘查询程序设计214.3 门控制程序设计234.3 电机驱动程序设计2
8、8结论31参考文献32致33附录1系统运行样式33第1章 绪论1.1 课题背景1.1.1 选题背景电梯是一种由电动机作为驱动力的竖直升降设备,装有立方体吊舱并设有电梯门,用于多层建筑乘人或载运货物。它的轿厢运行在至少两列平行竖直的或近似平行竖直的刚性轨道之间,一般服务与超过规定高度的楼宇。轿厢尺寸与结构形式便于乘客出入或装卸货物。而自从第一台电梯在美国问世100多年以来,由于社会科学与经济的不断前进以与人们物质生活状况的不断改善,电梯与人们的生活越来越息息相关,已成为人们工作和生活中不可或缺的一项十分重要的垂直交通运输工具。自20世纪以来,全球科学技术获得了飞速的开展,尤其是计算机技术、电子技
9、术自动控制技术、网络技术、等都得到了质的飞跃,并迅速转换为先进的生产力,渗透到了社会的各个领域和各个方面,深刻的影响了人们日常的工作方式与生活方式。电梯行业在科学技术飞速开展过程中也同样获益颇多。电梯的控制方式以与拖动方式均发生了很大的变化。1.1.2国外现状100多年来,中国的电梯行业开展经历了下面几个阶段 :依赖电梯进口阶段(1950年以前),在这一阶段我国的电梯全部来源于进口,仅仅拥有大约1 101台电梯;自主研发生产阶段19501980年,在这个阶段我国可以自主的研发、设计和生产电梯。在这个阶段我国一共生产和安装电梯大约1万台的电梯;建立合资企业,整个行业飞速开展阶段自1980年改革开
10、放至今,这个阶段我国总共制造和安装了多达40万台电梯。现在,我国已成为全球最大的电梯制造国和最庞大的新装电梯市场。2006年,在我国大陆的电梯总产量达到168万台,全国正在用的电梯达到了770314台。在如此庞大的电梯市场需求的推动下电梯行业获得了广阔的开展舞台。20世纪80年代初,日本三菱公司首次在电梯拖动控制系统中变压变频调速(VWF,Variable VoltageVariable Frequency),这导致了电梯的拖动方式的一次重大变革,与之前的交流调压调速驱动、交流双速电机驱动等方式相比,WVF驱动方式具有电机发热量小、高效率、节能、污染小、高性能等优点。而近些年来,交流永磁同步电
11、机的问世,被认为是在变压变频调速技术出现以后,电梯拖动技术的又一项十分重大的技术变革。这是因为交流永磁同步电机具有根本无需维护,结构紧凑,更加安全可靠、节能、传动效率高、更高的性价比的优点,并减少了对环境的污染。同样是在上个世纪80年代,微计算机技术被应用于电梯控制系统中,单片机等微处理器与可编程逻辑控制器的出现把电梯控制技术推进了一个全新高速的开展时期,电梯控制系统的网络化、智能化开始进入了人们的视野,并且成为研究的新热点。1.1.3 本课题的意义与研究容随着社会的开展,利用巩固耐用的金属梁作为建筑支撑物,建筑师和工程师可以建成数百米高、直冲云霄的摩天大楼。在如今各种高楼大厦已经数不胜数,如
12、果没有电梯,这些高楼大厦根本上将无法使用。因此乘坐电梯也必然成为众生活中的一局部,而作为电梯的大脑电梯控制器,它的高效运行和智能化已经成为电梯运行中必不可少的重要器件。本设计的电梯控制器是基于STM32来设计的。随着信息化技术的开展,嵌入式系统已经成为当前IT产业界一个非常热门的话题。因其高效、低本钱、高可靠性、丰富的代码以与应用程序可扩展性、可移植性等一系列优点,越来越多地应用在信息化产品中。本设计以一个实际的应用实例,从开发板、集成开发环境的构建方式和作业方式、嵌入式系统的硬件和软件设计、JTAG调试方法,掌握嵌入式系统开发方法。 本设计通过ARM微控制器模拟实现电梯的控制。1需研究ARM
13、 Cortex-M3微控制器结构,基于ARM Cortex-M3的stm32开发板与相关键盘控制模块、GPIO模块等,keil集成开发环境;2研究单部电梯调度算法,并选择或设计一个适宜的算法;3了解实验开发板上相关硬件电路设计;4用c语言完成系统软件设计,并在实验开发板上调试,完成电梯的上行、下行、停止、开门、关门、等动作,要求每一个动作在规定时间完成。第2章 系统设计方案2.1 系统硬件总体组成2.1.1总体框图该电梯控制系统由stm32开发板、电源系统、键盘、LED指示小灯、4位8段数码管、电机驱动模块等组成。如图2.14位8段数码管 键盘STM32 电机驱动模块LED指示小灯电源系统图2
14、.1 系统硬件结构各功能模块简介:(1) 电源系统:为整个系统提供+5V电源;(2) 键盘:每个键位互不影响用以控制电梯运行状态;(3) LED指示小灯:用以指示小健是否被按下和电梯门开关状态;(4) 4位8段数码管:用于显示电梯部和每层电梯外部电梯所在的层数;(5) 电机驱动模块:用于驱动电机和控制电机正反转与转速;(6) STM32开发板:通过写入程序代码来控制电梯的运行状态。2.2 系统硬件方案2.2.1 STM32选择方案1STM32核STM32是基于ARM Cortex-M3核的32位处理器,具有杰出的功耗控制以与众多的外设,最重要的是其性价比。Cortex-M3是一个32位处理器核
15、。部的数据路劲是32位的,存放器是32位的,存储器借口也是32位的。Cortex-CM3使用了哈弗结构,拥有独立的数据总线和指令总线,可以让访问数据和取指同时进展互不影响。这样一来,访问数据时不会占用指令总线,从而提高了性能。为了实现这一特性,Cortex-CM3部有好几条总线接口,每一条都为自己的应用场合优化过,并且可以并行工作。但是指令总线和数据总线共同享用同一个存储空间3。同时该核还具有高性能、低功耗、先进的中断处理功能。2STM32的原理图与特性图2.2 stm32原理图ALIENTEK MiniSTM32开发板结构如下:CPU:STM32F103RBT6,LQFP64,FLASH:1
16、28K,SRAM:20K;1个标准的JTAG/SWD调试下载口;1个IIC接口的EEPROM芯片,24C02,容量256字节;1个标准的2.4/2.8寸LCD接口,支持触摸屏;1个USB串口,可用于程序下载和代码调试;1个USB SLAVE接口,用于USB通信;1组5V电源供给/接入口;1组3.3V电源供给/接入口1个复位按钮,可用于复位MCU和LCD除晶振所占用的IO口之外,其余所有IO口全部引出,其中GPIOA和GPIOB按顺序引出STM32具有价格低、功能强、使用简单、开发方便等几个很有利的优势, 在应用上,STM32设计的比拟方便的地方有:IO口复用重映射功能。由于一些复用功能能够重映
17、射,使得在STM32的PCB设计的时候,方便很多。所有的引脚都能够用作中断输入。所有的IO口都能够当作中断输入,这个方面和ARM比起来具有很大的优势,一旦需要中断来解决问题时,任何一个GPIO口都可以作为中断输入,无需要连到几个特殊的脚上,这样给设计过程带了极大的方便。支持SWD的调试。STM32可以SWD的调试,只需要2跟IO线,就可以用来下载程序和调试,对引脚不多的型号尤其适用。串口下载程序。串口下载代码很多ARM都具有这个功能,STM32也保存了这一优秀设计,极大的降低了开发本钱。(1)3STM32的GPIO口简介STM32的每个IO端口都有7个存放器来控制。他们分别是:配置模式的2个3
18、2位的端口配置存放器CRL和CRH;2个32位的数据存放器IDR和ODR;1个32位的置位/复位存放器BSRR;一个16位的复位存放器BRR;1个32位的锁存存放器LCKR。其中CRL和CRH控制着每个IO口的模式与输出速率。STM32的IO口位配置表如表2.1所示:配置模式CNF1 CNF0MODE1MODE0PxODR存放器通用输出推挽式Push-Pull 0 0 01 10 11 0或1开漏Open-Drain 1 0或1复用功能输出推挽式Push-Pull 1 0 不使用开漏Open-Drain 1 不使用输入 模拟输入 0 0 00 不使用 浮空输入 1 不使用 下输入拉 1 0 0
19、 上拉输入 1表2.1 STM32的IO口位配置表2.2.2 键盘设计方案键盘由一组独立的按键构成的,由于弹性按键结构简单、价格低廉、使用方便,所以该设计采用了弹性按键。又由于电梯控制系统的按键相互独立互不影响,所以在该设计中我采用了每个按键分别单独与相应的GPIO口相连。虽然这样连接占用了较多的GPIO口,但是无需一些键盘锁存扫描电路,极简化了键盘电路的设计、焊接、和扫描,降低了难度。2.2.3 LED指示灯设计方案由于该设计是一个模拟电梯控制系统电梯的开门关门状态难以直接模拟出来。所以我用两个不同颜色的LED小灯来模拟电梯在运行过程中的开关门状态,使模拟过程更加直观。同时在该设计中,对每一
20、个按键分别用一个小灯来指示按键是否按下,使电梯在运行过程中乘客能清楚的了解按键被按的状态。这极大的减少了乘客按错键或重复按键的情况。因为在该设计中每个LED小灯的明灭状态和按键一样互不影响,所以每个小灯分别与相应的GPIO口相连。这样虽然占用了较多的GPIO口,但是这样做极降低了电路设计的难度和复杂性,也给编程带来了一些方便。2.2.4数码管显示器设计方案数码管功耗虽然比液晶显示器大而且显示09与AF,但其驱动电路简单,使用方法简单并且价格廉价。本设计中电梯只有三层,因而在电梯运行时只需显示电梯所在层数为13。综合考虑选择数码管用来显示层数比拟适合。同上述键盘和小灯一样,在本设计中采用了4位8
21、段数码管的段选段直接和相应的GPIO口相连接。这样连接虽然占用了较多的GPIO口,但是这样做省略了译码锁存电路。极降低了电路设计的难度和复杂性。由于这四位数码管用于显示电梯部和每层电梯外部电梯所在的层数并且显示的层数都一样,所以将它们的为选段接到一块,接上有效电平。2.2.5电机驱动设计方案本设计在电梯驱动过程中使用了电机驱动模块,使用了直流电机。这是因为直流电机价格低廉、控制简单。在使用电机时通过电机驱动模块只需两个GPIO口引脚,并通过PWM脉冲就能很方便的控制直流电机的转动、停止、正转、反转以与转速。第3章 系统硬件设计在上一章中,通过讨论获得了最适宜的设计方案。在这一章中,我们将通过在
22、stm32开发板上实现这一方案。3.1 硬件系统的总体设计使用stm32开发板来完成设计,首先把键盘、LED指示小灯、4位8段数码管、电机驱动模块、电机与stm32开发板上的相应引脚相连接。然后把stm32开发板与+5V电源相连。其连接方式如下:将PB.8PB.15分别与数码管的啊a、b、c、d、e、f、g、dp段相连,将数码管的共阳端接高电平,为选段接地;将PB.0、PB.1、PB.5、PB.6、PC.10PC.13、PA.3、PA.4分别与相应的LED小灯相连;将PC.0PC.8分别与键盘相应的键位将PA.5、PA.6与电机驱动模块连接并将模块的输出端与直流电机连接,将电机驱动模块与高于+
23、5V的电源相连。3.2 硬件系统的局部设计3.2.1 键盘硬件电路设计本设计的键盘有九个独立的弹性小按键构成,所有键盘的公共端接地另一端与分别与相应的GPIO口相连。所有的GPIO口都设置成上拉输入电平触发模式。一旦小健按下相应的引脚与地接通呈低电平,当程序进展按键查询时到该引脚为低电平,表示按键被按下。此时系统点亮相应的指示灯,随后按键弹起该引脚恢复高电平。系统根据小灯的状态立即或等待执行相应的操作。之后系统继续检测其他按键,按键之间互不影响。键盘电路如下列图3.1。按键再按下时由于弹性小按键机械特性,在按键按下和弹起的瞬间会有抖动现象,抖动的时间一般为510ms。这个情况在stm32对按键
24、进展查询时造成误判,严重影响了按键的稳定性和电梯运行时系统判断的准确性。所以在编写程序时要在按键查询程序里加上去抖程序。 图3.1键盘电路 图3.2按键按下时电压变化3.2.2 LED指示灯硬件电路设计LED指示等电路是由11个相互独立的颜色不同的LED小灯构成。它们的正极都通过一个510 接+5V电源,负极与stm32相应的引脚GPIO口连接。所有的GPIO口都设置成上拉的推挽输出模式。其中两个LED灯为系统模拟开门关门状态的指示灯,剩下的九个LED指示灯分别用作键盘的九个独立按键的指示灯来指示按键是否被按过的状态。当系统按键查询程序查询到有按键被按下时,系统立使stm32相应的GPIO口输
25、出为低电平,点亮相应的指示小灯。系统会一直保持该LED指示灯的点亮状态直到系统完成电梯相应的操作,然后熄灭小灯。小灯之间互不影响。LED指示灯的电路原理图如下。图3.2 LED指示灯电路原理图3.2.3 八段数码管硬件电路设计因此三级管基极接地,发射极接+5V电源。八段数码管显示器电路原理图如下列图3.3.不管几位数码管,其显示原理都是一样都是靠点亮部的发光二极管来发光。从图3.4a可看出,一位数码管的引脚10个显示一个8字需要7个小段,另外还有一个小数点,所以其部一共有8个小的发光二极管,最后还有一个公共端生产商为了封装统一单位数码管都封装10个引脚,其中第3个引脚和第8个引脚是连在一起的。
26、而的公共端又可以分为共阳极和共阴极,图3.1.4(b)为共阴极部原理图,图3.1.4c为共阳极部原理图4。共阳极数码管部所有发光的阳极连在一起的接高电平,阴极是互相独立的。它的段选段有a、b、c、d、e、f、g、dp。当想要某一段点亮时就使这一段输入为低电平就行了。例如想要显示数字1,那么给b、c低电平,其他的给高电平就能够显示数字1了。因此我们在用数码管为显示器来显示数字09时,首先要对其进展编码,当要显示某个数字式像数码管送入相应的编码就可以显示该数字了。然而共阴极的数码管正好和共阳极的相反,要想点亮数码管a、b、c、d、e、f、g、dp中的某一段即必须使该端的引脚输出为高电平。图3.3数
27、码管显示器电路原理图a引脚 b共阴极 c共阳极图3.4数码管部原理图3.2.4电机驱动模块硬件电路电机驱动模块硬件电路主要由L298N直流电机驱动芯片和其外围电路构成,其电路原理图如下列图3.5所示。L298N是SGS公司的产品,内部包含4通道逻辑驱动电路,是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其引脚排列如下列图3.6所示。OUT1、OUT2和OUT3、OUT4之间分别接2个电机IN1、IN2、IN3、IN4引脚从单片机接输入控制电平,控制电机的正转反转。图3.5直流电机驱动模块原理图L298N逻
28、辑状态表表3.3如下:左电机右电机左电机右电机IN1IN2IN3IN41010正转正转1001正转反转1011正转停0110反转正转1110停正转0101反转反转表3.3第4章 系统软件设计4.1 主程序设计电梯控制系统程序是在Keil的环境下使用C语音编写的。由于使用的是stm32开发板,在编程时可以进展模块化编程,即把程序分成一个个功能模块进展编写。这样使编程过程更加规化,程序结构更加清晰便于阅读,程序在编译过程中更易查错与修改,也便于在日后编程时遇到需要使用一样或相似的子程序模块时可以直接把以前编写过的模块直接拿来使用或修改后使用,使以后的编程更加方便容易。因此程序可分为楼层算法模块、开
29、门关门控制模块、电机控制模块、按键查询模块、显示模块。该电梯以共有3层。其中电梯的层数判断是通过控制电机转动时间来进展的,即电梯转动5s为电梯运行通过一层的高度。其主程序流程图如下列图4.1所示:图4.1程序流程图在主程序首先要对把各个字程序模块的路径加载进去,然后在主函数中首先要进展系统时钟设置和延时初始化,然后要对LED指示灯、按键、电机驱动模块、数码管等与之连接的硬件接口进展初始化。主程序如下:int main(void)u8 F=1;LED_O=1;LED_C=0;Stm32_Clock_Init(9); /系统时钟设置delay_init(72); /延时初始化 LED_Init()
30、; /初始化与LED连接的硬件接口KEY_Init(); /初始化与按键连接的硬件接口uart_init(72,9600);motor_init();/ 初始化与motor连接的硬件接口disp_init();/ 初始化与disp连接的硬件接口在写主函数时为了保证程序一直循环下去,要在主函数中写一个while1是循环然后在这个死循环中写出电梯控制系统的主程序。电梯系统在开始运行时它的初始状态有3种可能,电梯从第一层开始运行,电梯从第二层开始运行和电梯从第三层开始运行。下面先介绍电梯从第一层开始时的运行情况。系统在初始化时,默认电梯是从第一层开始运行。一但有人要到第二层或第三层,或者第二层第三层
31、有人需要电梯就上行。在这之前,软件系统会通过if语句进展判定,是否与上述情况相对应的按键被按下,即是否存在LED2=0或LED2_U=0或LED2_D=0或LED3=0或LED3_D=0。假设if语句判定条件成立,那么系统控制电梯上行。当到达第二层时,系统会再次通过if语句判定,是否第二层是电梯所要到的层数,假设是那么电梯停止并打开电梯门,假设不是那么电梯继续上行到达第三层。当电梯在第二层停下时系统会再次通过if语句进展判定,不过此时上行优先。如果有上行的要求,即if语句查询到LED3=0|LED3_D=0,那么电梯会先进展上行,满足上行要求。如没有,那么系统会再使用if语句进展判定。假设有下
32、行要求,即if语句查询到LED1=0|LED1_U=0,那么系统执行下行命令。while(1)disp(F); /显示当前楼层KEY_LED();if(F=1) /如果处于第一层LED_O=1; /电梯门正处于关闭状态LED_C=0;disp(F);if(LED1_U=0) /如果第一层电梯外有人按上行键delay_ms(100);LED_O=0; /延时100ms后开门上行键指示灯灭LED_C=1;LED1_U=1;door(F); /电梯轿厢开关门控制子程序调用door(F);if(LED2=0|LED2_U=0|LED2_D=0|LED3=0|LED3_D=0) /如果有人要到第2层或第
33、3层,或者第二层第三层有人需要电梯motor1(F); /调用电机控制子程序上行F+;disp(F); /显示电梯当前所在楼层if(LED2=0|LED2_U=0|LED2_D=0)/如果第二层是电梯所要到的层数LED_C_K=1;LED_C_K=1;IN1=1;IN2=1; /电机停止,电梯停止在第2层LED2=1;LED2_U=1;LED2_D=1; /熄灭第二层相对应的键盘指示灯delay_scan_s(1);LED_O=0;LED_C=1; /电梯开门door(F);if(LED3=0|LED3_D=0) /如果有人要上第三层或第三层有人需要电梯 motor1(F); /电梯上行F+;
34、 disp(F); /到达第三层后显示电梯所在楼层LED1=1;LED2=1;LED3=1;LED3_D=1;LED_C_K=1;LED_C_K=1; /熄灭所有按键指示灯IN1=1;IN2=1; /电梯停止delay_scan_s(1);LED_O=0;LED_C=1; /电梯开门door(F);else if(LED1=0|LED1_U=0) /另外在第二层时如果有人要到第第1层或第一层有人需要电梯motor1(F); /电梯下行F-;disp(F); /电梯到达第一层时显示电梯所在楼层LED1=1;LED2=1;LED3=1;LED1_U=1;LED_C_K=1;LED_C_K=1; /
35、熄灭所有按键指示灯 delay_scan_s(1);LED_O=0;LED_C=1; /开门door(F);else if(LED3=0|LED3_D=0) / /另外在第二层时如果有人要到第第3层或第3层有人需要电梯motor1(F); /电梯上行 F+;disp(F); /电梯到达第3层时显示电梯所在楼层LED1=1;LED2=1;LED3=1;LED3_D=1;LED_C_K=1;LED_C_K=1; /熄灭所有按键指示灯IN1=1;IN2=1;delay_scan_s(1);LED_O=0;LED_C=1; /开门door(F); 如果开始时电梯停在第二层,那么电梯会有两种运行状态,即
36、上行和下行,但此时下行的优先级比上行的高。系统会通过if语句先行判断是否有下行要求,即if是否查询到LED2_U=0|LED2_D=0,假设是那么系统会控制电梯下行。否那么,系统会通过if语句再次行判断是否有下行要求,即if是否查询到LED3=0|LED3_D=0,假设是那么系统会控制电梯上行。else if(F=2)disp(F); /显示电梯所在的层数if(LED2_U=0|LED2_D=0) /如果电梯外有人按上行键或下行键delay_ms(100);LED_O=0;LED_C=1; /电梯开门LED2_U=1;LED2_D=0;door(F);door(F);if(LED3=0|LED
37、3_D=0)/如果有人到第三层或第三层有人需要电梯 motor1(F); /电梯上行F+;disp(F); /显示电梯所到达的层数LED1=1;LED2=1;LED3=1;LED3_D=1;LED_C_K=1;LED_C_K=1; /熄灭所有按键灯delay_scan_s(1);LED_O=0;LED_C=1; /开门door(F);else if(LED1=0|LED1_U=0) /如果有人到第1层或第1层有人需要电梯motor1(F); /电梯下行F-;disp(F); /显示电梯所到达的层数LED1=1;LED2=1;LED3=1;LED1_U=1;LED_C_K=1;LED_C_K=1
38、; /熄灭所有按键灯delay_scan_s(1);LED_O=0;LED_C=1; /开门door(F);如果电梯开始时处于第三层,这时电梯只能下行。软件系统会通过if语句进展判定,是否与上述情况相对应的按键被按下,即是否存在LED2=0或LED2_U=0或LED2_D=0或LED1=0或LED1_U=0。假设if语句判定条件成立,那么系统控制电梯下行。当到达第二层时,系统会再次通过if语句判定,是否第二层是电梯所要到的层数,假设是那么电梯停止并打开电梯门,假设不是那么电梯继续上行到达第三层。当电梯在第二层停下时系统会再次通过if语句进展判定,不过此时下行优先。如果有下行的要求,即if语句查
39、询到LED1=0|LED1_U=0,那么电梯会先进展下行,满足下行要求。如没有,那么系统会再使用if语句进展判定。假设有上行要求,即if语句查询到LED3=0|LED3_D=0,那么系统执行下行命令。else if(F=3) /如果开始时电梯停在第二层disp(F); /显示电梯当前所在层数if(LED3_D=0) /如果第三层有人按下行键delay_ms(100);LED_O=0; /电梯门打开LED_C=1;LED1_U=1;door(F);door(F);if(LED2=0|LED2_D=0|LED2_U=0|LED1=0|LED1_U=0) /如果有人要到第2层或第1层,或者第2层第1
40、层有人需要电梯motor1(F);/电梯下行F-;disp(F); /到达第2层显示层数if(LED2=0|LED2_D=0|LED2_U=0) /如果第二层时所要到达的楼层LED_C_K=1;LED_C_K=1;IN1=1;IN2=1;LED2=1;LED2_U=1;LED2_D=1; /电梯停止延时开门,熄灭相对应的的按键指示灯delay_scan_s(1);LED_O=0;LED_C=1;door(F);if(LED1=0|LED1_U=0) /如果电梯还要到第一层 motor2(); /电梯下行 F-;disp(F); /到达第一层后显示电梯到达第一层LED1=1;LED2=1;LED
41、3=1;LED1_U=1;LED_C_K=1;LED_C_K=1; /熄灭相应的按键指示灯IN1=1;IN2=1; /电梯停止delay_scan_s(1);LED_O=0;LED_C=1; /延时1s后开门door(F);else if(LED3=0|LED3_D=0) /如果电梯的目的层为第3层motor2(); /电梯上行 F+;disp(F); /到达第3层后显示电梯到达第3层LED1=1;LED2=1;LED3=1;LED3_D=1;LED_C_K=1;LED_C_K=1; /熄灭相应的按键指示灯IN1=1;IN2=1; /电梯停止delay_scan_s(1);LED_O=0;LED_C=1; /延时1s后开门door(F);else if(LED1=0|LED1_U=0) 如果电梯还要到第一层motor1(F); /电梯下行 F-;disp(F); /到达第一层后显示电梯到达第一层LED1=1;LED2=1;LED3=1;LED1_U=1;LED_C_K=1;LED_C_K=1; /熄灭相应的按键指示灯IN1=1;IN2=1; /电梯停止delay_scan_s(1);LED_O=0;LED_C=1; /延时1s后开门door(F);4.2 显示程序设计