基于51单片机实现的电梯模型设计
基于51单片机的电梯控制器设计

题目:基于单片机控制的电梯控制器目录1引言 (1)2总体设计方案 (1)2.1设计思路 (1)2.2总体设计框图 (2)3电梯控制系统原理分析 (2)3.1单片机最小系统电路的 (2)3.2控制电路的设计 (3)3.2.1电梯内部呼叫电路和电机状态显示电路 (3)3.2.2电梯外部呼叫电路 (3)3.2.3电机控制电路 (4)3.3显示楼层电路 (4)4 程序流程图 (5)4.1 主程序流程图 (5)4.2选择要去的楼层子程序流程图 (6)5总结与体会 (7)参考文献 (8)附录 1 (9)附录 2 (9)附录 (10)电梯控制器课程设计任务书1.设计目的与要求1.1 基本功能(1)显示:本设计要求实现6层控制,实时显示电梯所在楼层位置。
(2)升降控制:采用一台电动机的正反转来实现电梯的升降。
(3)具备不可逆响应的功能:电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向呼叫均无效。
1.2 扩展功能(1)可增加人性化的按键语音服务功能。
(2)可增加遥控或感应操作功能。
2.设计内容(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;3.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。
4.答辩在规定时间内,完成叙述并回答问题。
基于单片机控制的电梯控制器摘要:单片机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。
其中51单片机是各种单片机中最为典型和最有代表性的一种,广泛应用于各个领域.电梯是集机械原理应用、电气控制技术、微处理器技术、系统工程学等多学科和技术分支于一体的机电设备,它是建筑中常用的交通工具。
本设计选择AT89S51为核心控制元件,设计了一个六层电梯系统,使用C语言进行编程,实现运送乘客到任意楼层,并且实时显示电梯的楼层和电梯上下情况。
基于51单片机实现的电梯模型设计

电梯模型设计报告学院:自动化学院队名:xxx队员:xxx日期:2009.11.20一、概述电梯模型以51为核心处理器,步进电机为控制电机,用L298N 搭建驱动电机模块,结合光电传感器实现对电梯的上升,下降,准确平层各种运行方式的控制。
利用矩阵键盘、ISD1760语音芯片,数码管等各种功能模块实现电梯的扩展功能及人机交互功能。
二、方案论证方案一:直流伺服电机+光电传感控制方式。
优点:直流电机速度可以平滑调节,自带编码盘可以记录电梯运行位移,速度调节范围大。
缺点:用编码盘测量位移误差较大,对CPU运算处理要求较高而且直流电机运行时带有一定惯性,对平层带来较大难度。
方案二:步进电机+光电传感控制。
优点:步进电机可以用脉冲方式控制轿厢位移,配合光电传感模块可以准确实现轿厢平层;步进电机为输入脉冲时,电机可以卡死不发生转动,使得电梯在楼层处安全停止,等待相应操作。
缺点:步进电机转速较慢,速度控制要通过该变脉冲频率来调节,控制电路要求较高。
由于本作品为电梯模型,速度要求不高,通过单片机可以方便输出电机所需脉冲,配合L298芯片可以实现对步进电机的完美控制,所以我们选择方案二。
三、详细设计方案1.楼层模型设计电梯模型采用易于加工的木材,选用1.2米长的木板作为模拟楼层,底座用三角架固定,确保电梯运行过程不会出现模型摇动现象。
电梯轨道处拉两根铁丝作为电梯导轨,保障电梯的运动轨迹。
轿厢用纸盒模拟代替,盒子敞开一面,可以放入物品,模拟乘客进出电梯。
2.驱动电路模块控制电机选用四相步进电机,步进角为1.8度。
步进电机可以通过直流斩波改变顺序控制电机正反传,51单片机的定时/计数器可以模拟输出4路直流斩波,通过步进电机驱动电路控制步进电机。
驱动电路以L298N驱动芯片为核心部件,L298N芯片的电平电压与51单片机兼容,驱动电压可达50V完全可以驱动电梯模型所用控制电机。
驱动电路如下图:四个输出端分别接步进电机的四个脉冲输入端,通过定时计数器模拟输出的四路直流斩波控制L298N的输出端口,从而可以方便的控制步进电机。
基于51单片机的智能电梯控制器设计

目录摘要 (1)Abstract (1)引言 (1)1 PLC与51在实现智能电梯控制的差别 (2)1.1 常规用PLC智能电梯控制 (2)1.2 单片机智能电梯控制 (2)2 设计方案体系结构 (2)2.1 各楼层的电梯间电路 (2)2.2 电梯内部电路 (3)2.3 控制台电路 (3)2.4 控制方案 (3)2.5 控制方案选用 (4)3 硬件电路设计 (4)3.1 单片机的内部组成 (5)3.2 单片机的外接震荡电路 (6)3.3 电梯内控制器的仿真电路 (6)3.4 电路板的制作与调试 (8)4 软件编译 (9)4.1 软件抗干扰 (10)4.2 软件防死机 (11)5 智能电梯控制器采用硬件和软件协调的发展前景 (12)结论 (12)参考文献: (12)致谢 (13)基于51单片机的智能电梯控制器摘要:本设计是基于51系列单片机的智能电梯控制器,采用常见的AT89S51单片机作为核心控制芯片,其功耗小,运行稳定,常用的5V的电压供电。
楼层显示选用常见的高亮度七段数码管,具有廉价、内容丰富、美观、使用方便等特点。
采用红绿不同颜色的发光二极管指示电梯运行状态,简单明了,安全可靠。
这种实现方法的优点是简单,性能可靠,实时性好,操作简单,编程容易。
关键词:智能;电梯;七段数码管;AT89S51;二极管The Intelligent Electronic Elevator based 51 MCU Abstract:This design is based on 51 series of the MCU intelligent elevator controller, the common AT89S51 as the main controlling chip, the low power consumption, stable operation, commonly used 5 voltage power supply. Floor number use the common high brightness Seven-Segment LED to display,which is cheap, rich content, beautiful, convenient use, etc. Use red and green color light-emitting diodes instructions elevator status, simple, safe and reliable. The advantage of the approach is simple, reliable performance, good real-time performance, simple operation, easy programming.Key words:Intelligent;Elevator;Seven-segment LED;AT89S51;Leds引言电梯是人们在楼宇中垂直走动最主要的搭乘工具,电梯系统[1]的广泛使用,给人们带来了诸多的便利和效益。
毕业设计(论文)-基于51单片机的电梯智能控制系统设计

摘要在现代电梯智能控制系统大多采用PLC智能控制,PLC具有稳定的多I/O 口输出控制,容易操作与调试,易于远程操作及监控等优点,但PLC造价高,市场上一般16点的PLC造价就至少上百元,而大多进口的西门子,欧姆龙系列就不用说了,故在小系统中,采用PLC控制不太合适。
本系统采用AT89C51进行智能控制,成本超低,但性能亦很稳定,并具有系统崩溃自锁功能,整体性能比利用PLC更优惠。
关键字:AT89C51,电机控制,24c02目录摘要 (1)目录 (2)一系统设计方案 (3)1.单片机控制系统总体框图 (3)2.电机驱动系统设计框图 (3)二元器件简介 (4)1.AT89C51的单片机简介 (4)(1)主要特性 (5)(2)管脚说明 (5)(3)振荡器特性 (8)(4)芯片擦除 (8)2.存储器24c02 (9)三电梯智能控制系统设计 (13)1.硬件电路设计 (13)(1)单片机最小系统 (13)(2)继电器控制电路的设计 (14)(3)红外检测系统 (14)(4)系统供电电源 (15)2.系统软件设计 (15)(1)软件介绍 (15)(2)程序流程图 (15)(3)程序清单 (16)四调试过程 (17)1.检测AT89C51运行否 (17)2.红外检测测试 (17)总结 (18)参考文献 (19)一系统设计方案1.单片机控制系统总体框图2.电机驱动系统设计框图二元器件简介1.AT89C51的单片机简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
基于51单片机的四层电梯控制设计

目录摘要 (I)ABSTRACT (II)第一章绪论 (1)1.1电梯的概述 (1)1.2本文主要研究内容 (2)第二章系统功能介绍及方案论证 (2)2.1电梯的组成 (2)2.2电梯控制系统组成框图及工作原理 (2)2.3总体方案设计与论证 (3)2.4单元电路的设计与论证 (3)2.4.1单片机最小系统 (3)2.4.2 电机驱动电路模块 (4)2.4.3报警模块 (5)2.4.4楼层检测模块 (5)2.4.4.1光电传感器原理 (5)2.4.4.2光电传感器的选择 (5)2.4.5电梯内部电路、电梯间电路及控制台电路模块的设计 (6)2.5本章小结 (6)第三章基于单片机的电梯控制系统单元电路的设计 (7)3.1单片机最小系统 (7)3.2各楼层电梯间电路 (7)3.3电梯内电路 (8)3.4控制台电路 (9)3.5楼层检测 (9)3.6电动机驱动 (10)3.7报警部分 (12)3.8本章小节 (12)第四章软件设计 (12)4.1按键查询部分 (13)4.2楼层选择按键功能程序 (16)4.3电机控制部分 (22)4.4楼层检测及显示部分 (22)4.5报警部分 (23)结论 (24)参考文献 (25)致谢辞 (26)附录一: (27)附录二: (29)开题报告摘要引言:本文介绍了基于单片机的电梯控制系统,硬件部分主要由单片机最小系统模块、电梯间电路模块、电梯内电路模块、楼层检测模块、电动机驱动模块、报警模块等7部分组成。
该系统采用单片机(89C51)作为控制核心,内外招使用按键按下与否而引起的电平的改变,作为用户请求信息发送到单片机,单片机控制电动机转动,单片机根据楼层检测结果控制电机停在目标楼层。
楼层检测使用光电传感器,电动机控制部分采用直流电动机和L298N芯片驱动。
软件部分使用汇编语言,利用中断方式来检测用户请求的按键信息,根据电梯运行到相应楼层时,光电传感器产生电平变化,送到单片机计数来确定楼层数,并送到数码管进行显示。
基于C51单片机的模拟电梯系统设计报告

单片机原理与应用技术课程设计报告基于C51单片机控制的电梯自动控制系统专业班级: _____计算机xx_____姓名: ___xxx__时间: ______2012年6月 __指导教师: ______xxx _____一、设计要求1.基本功能:(1)显示:本设计要求实现5层控制,实时显示电梯所在楼层位置。
(2)升降控制:采用一台步进电机的正反转来实现电梯的升降。
(3)具备不可逆响应的功能:电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向呼叫均无效。
2.设计内容:(1)基于功能进行初步设计;(2)编写代码,实现功能;(3)完成课程设计报告。
二、电梯控制系统原理1.系统总体实现原理:本电梯模拟系统是基于C51单片机、4*4矩阵式键盘、步进电机和LED数码管来实现的。
通过4*4矩阵式键盘输入控制信息,C51单片机程序处理后来直接控制步进电机转动、LED 数码管显示。
电梯运行基本过程是:电梯默认初始停在一楼,LED数码管显示1,当按键按下1~5中的数时,通过程序进行判断是否升降(即步进电机正转反转)、升降几层(转几圈)。
与此同时,LED 数码管显示当前所在楼层(1~5)。
电梯在升降过程中,按其他键无效,即只有在电梯停下后,才可以进行下一轮的升降。
另外,站在电梯外边的人可以通过按上下键(一层只有上键,五层只有下键)来控制电梯到人所在楼层,例如,你站在3层,你按了上键,电梯不论在1~5层的哪一层都会先升降到3层,然后你进电梯,向前面所说的进行控制电梯升降。
图1 设计电路总框图3938373635343332212223242526272829301110图2 单片机最小系统电路2.各组成部分原理: (1)信号输入电路现以呼叫信号的输入为例,来说明信号输入及单片机识别原理。
如图3所示,采用P0口外接上拉电阻的并行输入形式,来输入外呼叫信号,本电路采用4×4矩阵键盘,列扫描法识别键值的原理,具体原理如下:a) 判断键盘中有无键按下:将全部行线P0.0-P0.3置低电平,列线P0.4-P0.7置高电平,然后检测列线的状态。
(完整)基于51单片机的三层电梯系统设计

基于51单片机的三层电梯系统设计专业班级:电子信息科学与技术1班*名:**指导教师:金国华老师信息科学技术学院摘要本文设计了一款基于单片机(AT89C51)的三层电梯的模拟控制系统。
以51单片机为核心,由7段显示数码管来作为电梯楼层和电梯上下行状态的显示部分,数码管显示“p”则说明电梯运行状态向上,显示“d”则说明电梯运行状态向下。
由按键来分别表示电梯内外的各个功能按钮。
本设计主要是利用了单片机:灵活性大、通用性强以及易于实现复杂控制的特点,使系统在达到设计目的的同时显得结构简单,操作方便,容易理解。
文中首先是针对设计的目的选择出比较合适的设计方案,并且对AT89C51单片机和7段显示数码管进行了简要介绍,然后将本次设计的硬件电路分为单片机控制模块、显示模块、按键检测模块三个大的模块.在进行了电路的连接之后,根据电路的连接就各个模块分别编写程序再由主程序统一衔接在一起。
通过调试运行,所设计的三层电梯系统基本满足设计要求。
关键词:AT89C51单片机;电梯控制;数码显示AbstractIn this paper,we designed a three elevator analog control system which is based on a microcontroller(AT89C51).The microcontroller as the core,and 7—segment digital tube display as the elevator floor and the elevator up and down the line status display section.When the elevator running up the d igital display ”p” and when the elevator running down the digital display "d" .Various function buttons inside or outside the elevator are represented by buttons.This design is mainly the use of the characteristics of SCM:flexibility,versatility and easy to implement complex control features。
基于51单片机模拟电梯控制系统

基于51单片机模拟电梯控制系统简介本文档介绍了基于51单片机的模拟电梯控制系统。
电梯是现代建筑中不可或缺的交通工具,其安全性和运行效率直接影响到建筑的使用体验。
本文档将详细描述电梯控制系统的设计和实现过程,以及关键的技术细节。
系统架构硬件设计基于51单片机的模拟电梯控制系统的硬件设计主要包括以下几个模块:1.电梯控制板:该板包含了51单片机、电梯按钮、电梯状态显示器等组件,用于控制电梯的运行和状态显示。
2.电梯驱动器:该模块负责控制电梯的电机和门的开关,通过与电梯控制板的通信来实现电梯的运行控制。
3.按键模块:该模块用于接收用户输入的目标楼层,并将数据传输给电梯控制板。
4.故障检测模块:该模块用于检测电梯运行时的故障情况,并通过与电梯控制板的通信来报告故障信息。
软件设计电梯控制系统的软件设计主要包括以下几个部分:1.电梯控制算法:该算法用于根据用户输入的目标楼层和电梯当前的状态,确定电梯的运行方向和下一个停靠楼层。
2.状态机设计:该设计用于实现电梯的状态转换和运行控制。
通过状态机设计,可以实现电梯的顺序运行、停靠和开关门等功能。
3.中断处理程序:该程序用于处理硬件中断,包括接收用户输入的目标楼层和监测电梯的故障情况。
功能实现电梯运行控制通过电梯控制算法和状态机设计,可以实现电梯的运行控制。
电梯可以根据用户输入的目标楼层确定运行方向,并在到达目标楼层时停靠。
电梯状态显示电梯状态显示器可以显示电梯当前的楼层和运行状态,如上行、下行、停靠等。
通过电梯状态显示器,用户可以清楚地了解电梯的运行情况。
故障检测与报告电梯控制系统可以监测电梯的故障情况,如电机故障、门开关故障等。
一旦检测到故障,系统会通过显示器或其他方式向维护人员报告故障信息,以便及时修复。
基于51单片机的模拟电梯控制系统通过硬件设计和软件设计实现了电梯的运行控制、状态显示和故障检测等功能。
该系统可以提供安全、高效的电梯运行体验,为建筑的使用者提供便利。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电梯模型设计报告学院:自动化学院队名:xxx队员:xxx日期:2009.11.20一、概述电梯模型以51为核心处理器,步进电机为控制电机,用L298N 搭建驱动电机模块,结合光电传感器实现对电梯的上升,下降,准确平层各种运行方式的控制。
利用矩阵键盘、ISD1760语音芯片,数码管等各种功能模块实现电梯的扩展功能及人机交互功能。
二、方案论证方案一:直流伺服电机+光电传感控制方式。
优点:直流电机速度可以平滑调节,自带编码盘可以记录电梯运行位移,速度调节范围大。
缺点:用编码盘测量位移误差较大,对CPU运算处理要求较高而且直流电机运行时带有一定惯性,对平层带来较大难度。
方案二:步进电机+光电传感控制。
优点:步进电机可以用脉冲方式控制轿厢位移,配合光电传感模块可以准确实现轿厢平层;步进电机为输入脉冲时,电机可以卡死不发生转动,使得电梯在楼层处安全停止,等待相应操作。
缺点:步进电机转速较慢,速度控制要通过该变脉冲频率来调节,控制电路要求较高。
由于本作品为电梯模型,速度要求不高,通过单片机可以方便输出电机所需脉冲,配合L298芯片可以实现对步进电机的完美控制,所以我们选择方案二。
三、详细设计方案1.楼层模型设计电梯模型采用易于加工的木材,选用1.2米长的木板作为模拟楼层,底座用三角架固定,确保电梯运行过程不会出现模型摇动现象。
电梯轨道处拉两根铁丝作为电梯导轨,保障电梯的运动轨迹。
轿厢用纸盒模拟代替,盒子敞开一面,可以放入物品,模拟乘客进出电梯。
2.驱动电路模块控制电机选用四相步进电机,步进角为1.8度。
步进电机可以通过直流斩波改变顺序控制电机正反传,51单片机的定时/计数器可以模拟输出4路直流斩波,通过步进电机驱动电路控制步进电机。
驱动电路以L298N驱动芯片为核心部件,L298N芯片的电平电压与51单片机兼容,驱动电压可达50V完全可以驱动电梯模型所用控制电机。
驱动电路如下图:四个输出端分别接步进电机的四个脉冲输入端,通过定时计数器模拟输出的四路直流斩波控制L298N的输出端口,从而可以方便的控制步进电机。
电机的运转速度可以通过调节直流斩波的频率来控制。
同时,通过对脉冲个数的控制,也可以粗略了解轿厢运行的位移,配合光电模块,将使电梯平层更加便捷、准确。
3.光电传感模块为了确保准确平层,每层楼都安装红外对管,用于检测轿厢是否运行至楼层,若检测到轿厢运行至目标楼层,则像CPU发出中断请求,执行电梯停止运行操作。
红外对管原理:红外对管由发射和接受两部分组成,发射的红外线京轿厢反射后被接受管接受后,引起电平跳变CPU根据此信号做出相应命令。
电路原理图如下:4.楼层按键设计为了模拟乘客在轿厢内对电梯的控制,我们扩展了一个4*4的键盘,用于乘客选择楼层及轿厢内的一些控制按钮,考虑到实验的原因,控制键盘并未装在轿厢内部,而是引到模型外面,便于演示。
本模型用到两个4*4矩阵键盘,一个用于楼层级轿厢控制,另一个用于密码和其他设置,接口原理相同。
5.语音播放模块本模型加入了语音播放功能,及时播放轿厢运行状况,所有录音内容均为小组设计,是本模型人机交互人性化设计一个重要部分。
语音播放模块以ISD1760语音芯片为核心, ISD1700系列芯片是华邦公司新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示。
语音芯片提前录入“欢迎乘坐长颈鹿电梯”、报告层数的语音数据,电梯平层后,CPU会输出脉冲控制芯片,喇叭发出欢迎语音和层数提示。
ISD电特性及应用电路如下:ISD1700电特性:.工作电压:2.4V-5.5V,,最高不能超过6V.静态电流:0.5 - 1 μA.工作电流:20mA电路图如下:语音变化信号由15脚输出,采用简单的三极管电流放大电路,接入小喇叭,实现语音输出。
小喇叭参数:8欧,0.5W。
6.电源切换部分考虑到紧急停电情况,用电池作为备用电源,停电时用继电器切换至备用电源,在备用电源供电情况下,控制轿厢运行到附近楼层,若检测到不是短时停电,则控制电梯在备用电源供电下运行。
电路原理图如下:7.负载控制部分本模型采用光电方式控制额定负载,输出电压信号经AD转换为0-255之间的数字信号输入CPU。
单片机将输入值的大小与设定额定值比较,若超过额定值,则发出报警音,同时像电机控制CPU发送超载信号,电机控制CPU停止运行。
若要改变额定负载值,可以用相应按键设置,改变程序中存储的额定负载值即可。
8.中央处理器部分本作品使用3片51单片机配合使用来控制整个系统,单片机之间通过通信达到信息传递。
单片机接口原理图(主要功能CPU)如下:主控CPU;电机控制CPU:功能扩展CPU:四、调试过程各个模块均可以独立正常运行,通过单片机系统总线将各个模块连接起来,实现了预期结果。
五、程序流程图电机控制CPU:功能扩展CPU:六、程序清单主控制CPU:#include<reg52.h>sbit P0_0=P0^0;sbit P0_1=P0^1;sbit P1_2=P1^2;sbit P1_3=P1^3;sbit P1_4=P1^4;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;sbit P3_0=P3^0;sbit P3_1=P3^1;sbit P3_4=P3^4;sbit P3_5=P3^5;/*******函数声明********/void init();//初始化?void keyscan();//键盘扫描void delay1ms(unsigned int count);//延时程序void runto(unsigned int lou);//电梯运行程序void show();//code unsigned char LedTab[]=//{// 0xc0, 0xf9, 0xa4, 0xb0,// 0x99, 0x92, 0x82, 0xf8,// 0x80, 0x90, 0x88, 0x83,// 0xc6, 0xa1 ,0x86 ,0x8e, 0xff//};/*数码管十六进制编码表*/code unsigned char LedTab[]={0xff, 0x7e, 0xbe, 0xde, 0xee,0xed, 0x77, 0x7b, 0x7d,0xbd, 0xdd, 0xbb, 0xdb,0xeb, 0xb7 ,0xd7 ,0xe7};/*数码管十六进制编码表**/******变量声明********/static int fangxiang=1,weizhi=0,mudi,shijian=3000;//电梯的状态,位置static unsigned int shang[6]={0,0,0,0,0,0},xia[6]={0,0,0,0,0,0},led[17];//各层的信息,“1”表示有人按键int m,n,k,temp;unsigned char text;void main(){init();P1=0x0f;while(1){while(P0_1==0){EA=0;}while(P0_0==0){EA=0;}while((P0_0==1)&&(P0_1==1)){EA=1;show();if(fangxiang==1)//从当前位置向上检测,当检测到最近呼叫层时向CPU3发出目标信号{for(m=weizhi;m<6;m++)if(shang[m]==1){temp=1;mudi=m;SBUF=mudi;//shang[m]=0;goto A;}fangxiang=-1;//当向上没有检测到呼叫时,从6楼往下检测for(m=5;m>=0;m--)if(xia[m]==1){temp=0;mudi=m;SBUF=mudi;//xia[m]=0;goto A;}fangxiang=1;//当向上没有检测到呼叫时从1楼网上检测for(m=0;m<weizhi;m++)if(shang[m]==1){temp=1;mudi=m;SBUF=mudi;//shang[m]=0;goto A;}}else if(fangxiang==-1)//从当前位置向上检测,当检测到最近呼叫层时向CPU3发出目标信{for(m=weizhi;m>=0;m--)if(xia[m]==1){temp=0;mudi=m;SBUF=mudi;//xia[m]=0;goto A;}fangxiang=1;for(m=0;m<6;m++)if(shang[m]==1){temp=1;mudi=m;SBUF=mudi;//shang[m]=0;goto A;}fangxiang=-1;for(m=5;m>weizhi;m--)if(xia[m]==1){temp=0;mudi=m;SBUF=mudi;//xia[m]=0;goto A;}}A: show();if(weizhi==mudi)//当到达目的层时注销呼叫标记{if(temp==1){shang[mudi]=0;led[mudi+6]=0;led[mudi+11]=0;}else if(temp==0){xia[mudi]=0;led[mudi+1]=0;led[mudi+11]=0;}delay1ms(shijian) ;}}}}/****程序初始化*****/void init(){EA=1;//开总中断EX0=1;//开处部中断0TH0=(65535-20000)/256;TL0=(65535-20000)%256;ET0=1;//开计时器0TR0=1;//开机计时TMOD=0x21;//设置定时器1为工作方式2 TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;ES=1;}/*外部中断0 */void into0() interrupt 0 using 0{shijian+=2000;if(shijian>=8000)shijian=3000;}/*计时器0*/void timer0() interrupt 1 using 1{TH0=(65535-20000)/256;TL0=(65535-20000)%256;show();keyscan();}/*计时器1*/void timer1() interrupt 3 using 3 {}void ser() interrupt 4{if(RI==1){RI=0;text=SBUF;weizhi=text;}if(TI==1){TI=0;}}void show(){unsigned int r;for(r=0;r<=16;r++){if(led[r]==1)P1=LedTab[r];}}/*延时程序*/void delay1ms(unsigned int count) {unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}/*键盘扫描*/void keyscan(){int temp;show();P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xee:shang[0]=1;led[6]=1;break;case 0xde:{if(fangxiang==1)shang[3]=1;else xia[3]=1;led[14]=1;}break;case 0xbe:{if(fangxiang==1)shang[4]=1;else xia[4]=1;led[15]=1;}break;case 0x7e:{if(fangxiang==1)shang[5]=1;else xia[5]=1;led[16]=1;}break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xed:{if(fangxiang==1)shang[0]=1;else xia[0]=1;led[11]=1;}break;case 0xdd:{if(fangxiang==1)shang[1]=1;else xia[1]=1;led[12]=1;}break;case 0xbd:{if(fangxiang==1)shang[2]=1;else xia[2]=1;led[13]=1;}break;case 0x7d:xia[5]=1;led[5]=1;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xeb:shang[1]=1;led[7]=1;break;case 0xdb:shang[2]=1;led[8]=1;break;case 0xbb:shang[3]=1;led[9]=1;break;case 0x7b:shang[4]=1;led[10]=1;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xe7:xia[1]=1;led[1]=1;break;case 0xd7:xia[2]=1;led[2]=1;break;case 0xb7:xia[3]=1;led[3]=1;break;case 0x77:xia[4]=1;led[4]=1;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}}电机控制CPU:#include<reg52.h>sbit P0_0=P0^0;sbit P0_1=P0^1;sbit P0_2=P0^2;sbit P0_3=P0^3;sbit P0_4=P0^4;sbit P0_5=P0^5;sbit P0_6=P0^6;sbit P0_7=P0^7;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;sbit P2_0=P2^0;sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_5=P2^5;sbit P2_6=P2^6;sbit P2_4=P2^4;sbit P2_7=P2^7;sbit P3_0=P3^0;sbit P3_1=P3^1;sbit P3_2=P3^2;sbit P3_5=P3^5;sbit P3_6=P3^6;sbit P3_7=P3^7;static int step_n,fangxiang=1,k=1,mudi=3,weizhi=0;//K=1时电机运行unsigned char text,temp;//中间变量,存放通信口收到的信息void init();void step();//电机运行程序void play(int count);void delay1ms(unsigned int count);//延时程序void check();//红外扫描int shudu=5,yuyin;code unsigned char m_ucLedTab[]={0x7e,0xc4,0x54,0x72,0x51,0x41};/*数码管十六进制编码表*/void main(){init();delay1ms(100);play(1);delay1ms(300);while(1){while(k==3)//停电时的乘序{if((P0_0==1)&&(P0_1==1))k=0;temp=P0;temp=temp&0xfc;while(temp==0xfc){temp=P0;temp=temp&0xfc;step();delay1ms(8);}P1=m_ucLedTab[weizhi];check();mudi=weizhi;}while(k!=3)//正常模式下电梯的运作{if(k==1)step();//电机单步运行if(P0_0==0)//断电信号k=3;while(P0_1==0);//超载信号delay1ms(5);if(k!=3){check();P1=m_ucLedTab[weizhi];if(weizhi<mudi){k=1;fangxiang=1;yuyin=0;}else if(weizhi>mudi){k=1;fangxiang=-1;yuyin=0;}else if(weizhi==mudi){k=0;if(yuyin==0)play(weizhi+2);delay1ms(50);yuyin++;}P1=m_ucLedTab[weizhi];}}}}void play(int count)//语音播放程序{int b;P3_5=0;delay1ms(40);P3_5=1;for(b=0;b<=count;b++){ P3_6=0;delay1ms(200);P3_6=1;delay1ms(200);}P3_7=0;delay1ms(50);P3_7=1;}void into() interrupt 0{}void time1() interrupt 1{{TH0=(65535-5500)/256;TL0=(65535-5500)%256;}}void ser() interrupt 4{if(RI==1){RI=0;text=SBUF;if((text<6)&&(text>=0))mudi=text;}if(TI==1){TI=0;}}void init(){TMOD=0X20;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;TH1=0xfd;//设置波特率TL1=0xfd;TR1=1;REN=1;//允许接收SM0=0;SM1=1;//设置通信方式1ES=1;//开通信中断//ET0=1;//EX0=1;//开外部中断0//EX1=1;//IT0=1;//跳边缘触发//IT1=1;//TR0=0;}/****红外传感器的扫描***/ void check(){P0=0xff;if(P0_2==0){weizhi=0;SBUF=0;}if(P0_3==0){weizhi=1;SBUF=1;}if(P0_4==0){weizhi=2;SBUF=2;}if(P0_5==0){weizhi=3;SBUF=3;}if(P0_6==0){weizhi=4;SBUF=4;}if(P0_7==0){weizhi=5;SBUF=5;}{}}/*****电机运行程序*****/ void step(){switch(step_n){case 0:{P2=0x8f;}break;case 1:{P2=0x1f;}break;case 2:{P2=0x4f;}break;case 3:{P2=0x2f;}break;}if(fangxiang==1){step_n++;if(step_n>3)step_n=0;}else if(fangxiang==-1){step_n--;if(step_n<0)step_n=3;}}void delay1ms(unsigned int count) {unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<130;j++);}扩展功能CPU:#include<reg52.h>#include<EEPROM.H>#define LED7_STATUS P0/*数码管状态引脚(0为有效,1为无效)*/sbit LED7A_STATUS= P1^3;/*数码管第一位控制引脚(0为有效,1为无效)*/ sbit LED7B_STATUS = P1^4;/*数码管第二位控制引脚(0为有效,1为无效)*/ sbit LED7C_STATUS = P1^5;/*数码管第三位控制引脚(0为有效,1为无效)*/ sbit LED7D_STATUS = P1^2;/*数码管第四位控制引脚(0为有效,1为无效)*/ sbit P3_0=P3^0;sbit P3_1=P3^1;sbit SPK = P3^7;sbit AD_CLK = P1^0;/*AD转换时钟端*/sbit AD_SDA = P1^2;/*AD转换数据端*/unsigned char frq;/*******函数声明*******/void init();//程序初始化void keyscan();//键盘扫描void delay1ms(unsigned int count);//延时程序void Led7Scan();//数码管显示程序unsigned char AD_Read();/*******变量声明******/code unsigned char m_ucLedTab[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff};/*数码管十六进制编码表*/unsigned char temp;//中间变量static unsigned int cod[4],k=0,mima=0,a=1;//密码int num[16]={16,16,16,16};//数码管显示缓冲数int n,m,mode=0;//中间变量unsigned char AD_Buf;/*AD转换存储*/int huanjing=160,zhongliang[5]={999,30,80};int caozai=19999;/*****函数内容****/void main(){init();for(n=0;n<4;n++)num[n]=cod[n];while(1){Led7Scan();while(mode==0)//超载模式{unsigned char AD_Buf;AD_Buf=AD_Read();//读取AD传来的数据delay1ms(500);while((huanjing-AD_Buf)>caozai){P1=0xc3;P0=((P0>>1)|(P0<<7));keyscan();for(n=0;n<60;n++){frq++;delay1ms(1);a=0;}P3_1=0;}keyscan();}while(mode==1){Led7Scan();{while(k<4){keyscan();//输入4个数}if(mima==0){if(k==4){for(n=0;n<4;n++){if(cod[n]!=num[n])//判断密码是否正确a=0;}if(a==0)//输入的密码错误{for(n=0;n<4;n++)num[n]=16;TR0=0;P0=0xfe;while(a==0){P1=0xc3;P0=((P0>>1)|(P0<<7));keyscan();for(n=0;n<60;n++){frq++;delay1ms(1);}}}else{mima=1;//密码正确P3_0=0;for(m=0;m<4;m++){for(n=0;n<4;n++){num[n]=cod[n];}delay1ms(150);for(n=0;n<4;n++){num[n]=16;}delay1ms(150);}num[3]=AT24C02ReadByte(5);num[3]++;AT24C02WriteByte(5,num[3]);}}}else if(mima==1){for(n=0;n<4;n++){cod[n]=num[n];AT24C02WriteByte(n,cod[n]);delay1ms(5);}}}mode=0;}}}void init(){unsigned int i;for(i=0;i<4;i++){cod[i]=AT24C02ReadByte(i);delay1ms(5);}EA=1;EA=1;//开总中断EX0=1;//开处部中断0TH0=(65535-20000)/256;TL0=(65535-20000)%256;ET0=1;//开计时器0TR0=1;//开机计时TMOD=0x11;//设置定时器1为工作方式2TH1=0xfd;TL1=0xfd;ET1=1;TR1=1;}void timer0() interrupt 1{{ Led7Scan();TH0=0xec;/*重新设置T0定时值*/TL0=0x78;//Led7Scan();}}void timer1() interrupt 3{if(a==0){ TH1 = 0xfe;TL1 = frq;SPK = ~SPK;}}/**************************************************************************** 名称: Led7Scan()说明: 数码管动态扫描处理程序参数: 无返回: 无*****************************************************************************/ void Led7Scan(){static unsigned char a=0;switch(a)/*判断数码管动态扫描值*/{case 0:/*处理数码管第一位*/LED7D_STATUS=1;/*设置数码管第四位为无效*/LED7A_STATUS=0;/*设置数码管第一位位有效*/break;case 1:/*处理数码管第二位*/LED7A_STATUS=1;/*设置数码管第一位为无效*/LED7B_STATUS=0;/*设置数码管第二位位有效*/break;case 2:/*处理数码管第三位*/LED7B_STATUS=1;/*设置数码管第二位为无效*/LED7C_STATUS=0;/*设置数码管第三位位有效*/break;case 3:/*处理数码管第四位*/LED7C_STATUS=1;/*设置数码管第三位为无效*/LED7D_STATUS=0;/*设置数码管第四位位有效*/break;}LED7_STATUS=m_ucLedTab[num[a]];/*将显示码送数码管状态引脚*/a++;/*数码管动态扫描值加1,若该值4则置为0*/if(a>3)a=0;}unsigned char AD_Read(){unsigned char i,ADC;AD_CLK=0;AD_SDA=1;ADC=0;for(i=0;i<8;i++){AD_CLK=1;AD_CLK=1;ADC<<=1;if(AD_SDA==1){ADC|=0x01;}else{ADC&=0xfe;}AD_CLK=0;AD_CLK=0;}AD_CLK=0;AD_SDA=0;return(ADC);}/****延时程序*****/void delay1ms(unsigned int count) {unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}/*******键盘扫描********/void keyscan(){P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xee:num[0]=10;{mode=1;a=1;k=0;TR0=1;SPK=1;for(n=0;n<4;n++)num[n]=16;num[0]=10;}break;case 0xde:{mode=0;for(n=0;n<4;n++)num[n]=16;}num[0]=11;//huanjing=AD_Read();break;case 0xbe:num[0]=12;mode=3;break;case 0x7e:num[0]=13;mode=4;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;Led7Scan();}}}P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xed:{if(mode==1){ num[k]=1;k++;}if(mode==0){num[3]=1;caozai=zhongliang[0];}}break;case 0xdd:{if(mode==1){ num[k]=4;k++;}}break;case 0xbd:{if(mode==1){ num[k]=7;k++;}}break;case 0x7d:{for(n=0;n<4;n++)num[n]=16;}break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;Led7Scan();}}}P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xeb:{if(mode==1){ num[k]=2;k++;}if(mode==0){num[3]=2;caozai=zhongliang[1];}}break;case 0xdb:{if(mode==1){ num[k]=5;k++;}}break;case 0xbb:{if(mode==1){ num[k]=8;k++;}}break;case 0x7b:{if(mode==1){ num[k]=0;k++;}}break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;Led7Scan();}}}P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xe7:{if(mode==1){ num[k]=3;k++;}if(mode==0){num[3]=3;caozai=zhongliang[2];}}break;case 0xd7:{if(mode==1){ num[k]=6;k++;}}break;case 0xb7:{if(mode==1){ num[k]=9;k++;}}break;case 0x77:num[k]=16;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;Led7Scan();}}}}七、总结经过调试安装,本模型在实现基本功能的基础上,实现简单数控设置负载,语音播放提示,密码控制,紧急停电时电源切换、楼层停止时间设置,不同楼层间不同速度运行等多项扩展功能。