版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论1.1选题背景、研究目的及意义1.1.1选题背景随着社会整体生活质量的提高,人们居住、办公场所逐渐从低矮楼层演变成高楼大厦,在其之中不可或缺的垂直运输与垂直交通工具即为电梯。电梯的应用场景广泛,涵盖各类商用大楼与住宅大楼、商城、旅游业、医院及交通枢纽中心。目前电梯的控制方式主要有继电器控制、可编程控制器控制、微机控制(单片机控制)这三种控制方式REF_Ref32010\r\h[1]。其中利用单片机设计的电梯控制系统有明显的优点:成本低、结构简单、运行稳定、有高精度的重量检测和更智能的屏幕显示等。采用单片机控制方式设计的控制系统可以随着设备的更新而不断修改、不断完善,相较于其它控制方式更便于实现设备的升级REF_Ref32164\r\h[2]。1.1.2研究目的及意义电梯升降系统广泛应用于城市设施,其安全性、稳定性和运动过程中的低能耗是电梯设计师和制造商更应在意的REF_Ref3265\r\h[3]。同时用户对于直梯的需求从基本运输转变为更安全、更高效、功能性更多样化。智能化的直梯控制系统无疑是直梯系统发展的主流,构建这样的系统,采用单片机控制有很大的优点。由于传统电梯的运行控制系统采用的是继电器控制线路,采用这种方式控制线路存在显著缺点,如易出故障、维护不便、运行寿命较短、占用空间大等REF_Ref3408\r\h[4]。由单片机控制的直梯控制系统功能更完全,在安全方面,系统能实时检测电梯运行状态,比如电梯的停靠楼层、电梯厢内温度、电梯是否超载等,一旦有异常能立即报警并停止运行,这种系统能有效避免事故发生,最大程度的保障乘客生命安全。1.2国内外研究现状分析1.2.1国内研究现状根据目前的调查统计,我国是全球最大的电梯新装市场和电梯生产国家。建筑中电梯作为人们工作和生活中经常使用的用电电器设备之一,截至2020年,我国电梯产量约110万台,在用电梯超过800万台REF_Ref16\r\h[5]。中国电梯行业市场规模庞大,且随着城市化进程加速的到来,电梯市场迎来房地产市场发展迅速导致的电梯新装、老楼新装电梯以及旧电梯更换的需求大等问题,这使得电梯市场的需求持续增长。面对庞大的用户需求,我国的电梯技术也在不断创新,电梯智能化、数字化、安全节能的系统不断被研发。伴随着现代科学技术技术的迅猛发展,电梯自动控制系统已发展成可以使传统数字电路设计根据软件驱动,而非硬件驱动来提升电梯运行全过程以适应乘客的核心需求REF_Ref3444\r\h[6]。我国电梯的功能对于安全管理、数字监控、人脸识别、语音播报、无障碍、智能化宣传等功能的应用已经趋于熟练。节能电梯的研发在我国实现碳达峰、碳中和目标中起着重要作用。电梯虽小,但它是在建筑中的能耗大户,而且越高层的建筑能耗越高。我国现研究有聚焦于光储直柔建筑中电梯的直流化技术REF_Ref5943\r\h[8]。更有针对光伏电梯系统用BLDC电机的曳引机,采用伺服电机的电流、转速、转矩三闭环控制方式来对BLDC电机进行仿真分析REF_Ref6779\r\h[9]。提高电梯运行能效水平、能量回收效益和安全可靠性,对于实现双碳目标具有重要意义。目前,我国的节能电梯技术在某些方面已经达到了国际领先水平,特别是最近几年国家在政策导向上的倾斜,国内很多公司都为节能电梯的研制投入了大量的人力、物力、财力,这为节能电梯的推广、为我国的节能减排事业做出了一定的贡献REF_Ref32291\r\h[7]。在提升运输效率方面,国内有一种基于有轨制导车辆(RGV)的多维度电梯,它不仅克服了传统电梯结构的缺陷、提升了大跨度建筑内乘客的移动效率,在垂直方向实现了电梯的循环运行,同时突破了传统电梯单维度运行的限制,可以实现电梯的水平横向移动REF_Ref9151\r\h[10]。现今,国内电梯领域技术的各类技术发展迅速。有电梯的全数字识别乘客技术,它可以通过用乘客进入电梯前智能识别的面部、瞳孔信息,与录入信息比对,能对外来乘客进行电梯使用限制。更有数字智能型安全控制技术,它通过识别IC、ID卡或智能识别系统,能有效拒绝外来人员进入。另外还有:电梯的快速安装技术,它改变了传统的电梯安装方式,能够快速组装电梯;高速电梯技术,其最高运行速可达12.5m/s,实现了超高速情况下电梯的稳定运行及安全运行;无机房电梯的研究,它不再需要建筑物提供封闭的专门机房,节省了占用空间,具有很大的灵活性和方便性。这些技术与各类研究都为我国直梯领域的发展做出巨大贡献。1.2.2国外研究现状在19世纪前,垂直运输一直是人们生活中一大挑战,长期以来,人们依靠人力及滑轮绳索来完成垂直运输,直到1889年美国奥梯斯升降机公司推出的世界上第1部以电动机为动力的升降机在纽约市马累特大厦安装成功REF_Ref451\r\h[11],自这以后,以美国、瑞士为首的发达国家对于电梯技术的使用及创新便领先于世界。国外电梯技术发展迅速,早在10年前就有对于利用三相电压源转换器减少电梯转换器的功率损失研究REF_Ref5822\r\h[12],有效节约能源,进一步提升了电梯的节能性。随着全球自动化进程的推进、技术革新及多样化发展,如今曳引驱动的电梯、变压变频控制的电梯以及无机房电梯的推出,电梯的性能、节能、安全性和舒适度进一步提升。此外,美国研发出的使用扁平符合钢带取代钢丝绳的GEN2电梯系统、瑞士研发的两个轿厢在同一井道内单独运行的双子电梯系统,以及德国磁悬浮电梯的研究、直线PMSM(永磁同步电机)驱动无绳电梯的研究REF_Ref5779\r\h[13]、齿轮感应电机(IMS)上的无齿轮PMSM(永磁同步电机)电梯的研究REF_Ref6986\r\h[14]等新型研发层出不穷。这些研发成果及研究使得电梯的功能愈发强大,其可靠性、实用性、安全性也进一步提升,在人们的生活中也提供了更多的便利。对于电梯安全,电梯事故是最影响乘客安全的因素,其可能造成的严重伤害和财产损失巨大。如果电梯从高高的建筑物上掉下来并高速撞到地面,则乘客几乎没有生存的机会。现有一类具有分层结构的电梯分形缓冲液,该缓冲液灵感来自壁虎的肉垫系统,使用其缓冲可以最大程度地减少损坏REF_Ref13498\r\h[15]。还有一种用于电梯安全管理的遥控集成模型,利用远程管理实现系统电梯维护、电梯故障分析,是一种用于各种SME电梯产品的更安全管理的电梯的方法REF_Ref12981\r\h[16]。更有保证残障人士乘梯安全的研究:电梯着陆门安全固定器,该研究可以有效防止由于电动轮椅与电梯着陆门的碰撞行为,导致的在电梯的起落门处发生的电动轮椅跌落事故REF_Ref16470\r\h[17]。在电梯运输方面,有一类在特定情况下可以实现不间断将物品输送到目的地的斗式电梯,通过固定运输带上的不定量的承载物传输,这类电梯广泛运用于农业、食品行业、装修行业、制药业及采矿工作中,大量的节省了时间和人工成本、提升了运输效率。现今电梯行业发展已趋于成熟,在全球物联网技术的迅速发展的推动下,未来全球的电梯将向数字化、智能化和低碳环保发展。1.3主要研究内容基于单片机的直梯控制系统利用红外检测模块检测是否有人进出,利用重量检测模块和温度检测模块对电梯内的重量和温度进行监测。通过键盘模块来获取楼层信息,通过电机正反转模拟实现电梯的上下行。若直梯超载或者梯内温度过高,则通过指示灯和蜂鸣器进行不同的声光报警,且不能上下行。同时设置维修模式,此模式下电梯不可使用。通过显示屏可显示实时相关信息。本系统设计由单片机、红外监测模块、重量监测模块、温度监测模块、显示模块等构成。综上所述,本系统设计可实现以下基本功能:1)直梯上下行到不同楼层由不同指示灯显示;2)超载或温度过高有不同的声光报警;3)自动识别有人进出开门防夹,无人进出延迟关门;4)可实时显示相关数据;5)可设置维修模式。第2章总体设计于硬件选型2.1总体设计方案本文设计一个基于单片机的直梯控制系统。该系统由单片机、红外检测模块、输入按键模块、重量检测模块、温度检测模块、显示模块、电机驱动模块等构成。可以判断是否有人进出实现防夹功能;通过指示灯和蜂鸣器判断是否超载或温度过高,实现声光报警;利用按键实现各楼层外部呼叫电梯与电梯内部选择楼层等功能。硬件系统设计框图如图2-1所示:图2-SEQ图\*ARABIC1硬件系统框图2.2硬件选型2.2.1主控芯片选型方案1:采用STC89C52作为主控芯片。STC89C52是一款基于8051内核的单片机,其采用CISC架构,具有结构简单、运行稳定和工作可靠的特点。它的优点在于:采用低功耗设计;搭载高速时钟,最高可达33MHz,具有快速的响应速度和运算能力;支持多种编程方式,编程过程较简便;使用方法简单且成本较低。STC89C52如图2-2所示。图SEQ图\*ARABIC2-2STC89C52方案2:采用STM32F103C8T6作为主控芯片。STM32F103C8T6是基于ARMCortex-M系列的32位处理器核心,其采用RISC架构。它具有更高的时钟频率和更大的内存容量,能够处理更复杂的任务。同时配备有丰富的外设接口,包括GPIO、UART、SPI、I2C等,这些接口可以满足复杂的数据处理和通信需求。其性能与功能相对更强大。STM32F103C8T6如图2-3所示。图2-SEQ图\*ARABIC3STM32最小系统板综上所述,对比STC89C52和STM32F103C8T6,STM32F103C8T6具有高性能、低功耗的特点,同时它的相对内存容量大,具有丰富的外设接口,能实现更复杂的功能,故本次设计采用方案2:采用STM32F103C8T6为主控芯片。2.2.2温度检测模块选型方案1:采用DS18B20测温模块。DS18B20是一种单总线数字温度传感器,它的测温范围为-55℃~125℃。器件内部高速暂存器区有两个字节的温度寄存器,用来存储温度传感器输出的数据。在这之外,高速暂存器区还有一字节的上下温度报警寄存器(TH和TL),和一个字节的配置寄存器。DS18B20测温模块如图2-4所示。图2-SEQ图\*ARABIC\s14DS18B20测温模块方案2:采用MLX90614ESF红外测温传感器模块。它是一种非接触式红外温度传感器,环境温度测量范围为-40℃~85℃。它具备高精度、高分辨率、响应时间快的特点,但是它的成本较高。MLX90614ESF红外测温传感器模块如图2-5所示图2-SEQ图\*ARABIC\s15MLX90614ESF红外测温传感器模块综上所述,对比两个温度检测模块,DS18B20虽精度度较低,但相对价格更低,且可检测温度的范围更大,更符合本次设计的需求,故选用方案1:采用DS18B20测温模块。2.2.3显示模块选型方案1:以LCD1602液晶屏作为显示模块。LCD1602液晶屏能显示的内容丰富,可显示文字、图片等内容,且显示效果好,可以显示32个字符。但是它占用的IO口较多,而且成本较高,对于环境有一定的限制,不够稳定可靠。LCD1602液晶屏如图2-6所示。图2-SEQ图\*ARABIC\s16LCD1602液晶屏方案2:以0.96寸OLED液晶屏作为显示模块。OLED液晶屏的可视角度大,功耗低,同时它还具备自发光、不需要背光源、厚度薄等特点。也可以显示文字、图片等内容,同时尺寸较小。驱动芯片为SSD1315,采用IIC通信,对于IO口的占用少,只要2个IO口就能驱动。0.96寸OLED液晶屏如图2-7所示。图2-SEQ图\*ARABIC\s170.96寸OLED液晶屏综上所述,对比上述两种显示屏,OLED液晶屏同样可以显示文字与图片、且尺寸较小、占用IO口较少,更符合本次设计的需求,故选用方案2:以0.96寸OLED液晶屏为显示模块。2.2.4重量检测模块选型方案1:采用HX711测重模块作为重量检测模块。此模块由应变片和HX711电路组成。HX711具有低功耗、抗干扰能力强、接口简单的特点。同时它还具有高分辨率、高精准、低耗能的特点,能够精确地检测重量变化。HX711测重模块如图2-8所示。图2-SEQ图\*ARABIC\s18HX711测重模块方案2:采用ADXL345模块作为重量检测模块。ADXL345是一种数字三轴重力加速度传感器,它可以用来间接测量重量。其通过检测物体在各个方向上加速度的变化,来估算物体的重量。但间接测重容易存在误差,而且操作复杂。ADXL345模块如图2-9所示。图2-SEQ图\*ARABIC\s19ADXL345模块综上所述,对比上述两种测重模块,HX711测重模块操作简易,可直接精准测量重量,且安装简单。故本次设计选用方案1:采用HX711测重模块。2.2.5红外检测模块选型方案1:采用红外线对射式传感器QT30CM。红外线对射式传感器响应时间短,能够实现快速检测。检测方向单一,具有针对性。它具有很高的灵敏度,且其精度高。红外线对射式传感器如图2-10所示。图2-SEQ图\*ARABIC\s110红外线对射式传感器方案2:采用HC-SR501人体红外感应模块。HC-SR501人体红外感应模块是基于红外线技术的一种自动控制模块。它采用LHI778探头设计,具备灵敏度高、可靠性强等特点。同时具有温度补偿,可以适应各种环境。但检测范围过大,容易产生误差。HC-SR501人体红外感应模块如图2-11所示。图2-SEQ图\*ARABIC\s111HC-SR501人体红外感应模块综上所述,红外线对射式传感器可靠性高、可实现快速检测、具有高灵敏度、检测具有针对性,更符合本次设计的需求,故选用方案1:红外线对射式传感器模块。2.3本章小结综上所述,本设计硬件电路部分各模块选型为:采用STM32F103C8T6为主控芯片;采用DS18B20测温模块为温度检测模块;采用0.96寸OLED液晶屏为显示模块;采用HX711测重模块为重量检测模块;采用红外线对射式传感器模块为红外检测模块。第3章硬件介绍及子电路设计3.1系统主控设计单片机STM32F103C8T6是一款基于ARMCortex-M内核、属于STM32系列的32位微型控制器。它采用LQFP48封装,具备有64KB的程序存储器容量,并且拥有37个GPIO口。它具有更高的时钟频率和更大的内存容量,能够处理复杂的任务。同时集成有丰富的外设接口资源,包括多个通用定时器模块、串行通信接口以及模拟数字转换器等,可以满足复杂的数据处理和通信需求。STM32F103C8T6单片机PB12-PB15连接指示灯,用于超载、超温的声光报警以及显示开门和关门情况。PA8-PA15连接外部呼叫电梯独立键盘,用来获取电梯外部呼叫信息。PB3、PB4连接OLED屏幕作为显示模块,用于显示实时信息。PB5连接蜂鸣器,用于在超重、超温时的声光报警或按下报警按钮时手动报警的发声。PB6连接温度检测模块,用于检测电梯内实时温度。PB7、PB8连接重量检测模块,用于检测实时重量,防止电梯超重。PB9连接红外检测模块,用于检测是否有人进出,实现开门防夹功能。PA0-PA7连接电梯内部操作独立键盘,获取电梯内部操作信息。PB0、PB1、PB10、PB11连接步进电机模块,用于模拟电梯的上下行运行。本设计使用STM32F103C8T6最小系统板,并将引脚额外引出,方便使用未使用的多余引脚,STM32F103C8T6最小系统板引脚图如图3-1所示。图3-SEQ图\*ARABIC\s11STM32F103C8T6最小系统板引脚图STM32F103C8T6引脚丰富,具有PA0-PA5、PB0-PB15、PC13-PC15、PD0-PD2、PE0-PE5、PF0-PF1通用IO引脚,其中PA0-PA5、PB0-PB15可用于输入/输出、外部中断、模拟输入等,PC13-PC15、PD0-PD2、PE0-PE5、PF0-PF1可用于输入/输出、外部中断等。剩下为特殊引脚,通用IO的其他引脚功能及特殊引脚说明如下表3-1。表3-SEQ表\*ARABIC\s11特殊引脚说明引脚引脚说明VBAT备用电源引脚VCC3V3电源输入GND接地线HSE_IN外部高速时钟输入HSE_OUT外部高速时钟输出LSE_IN外部低速时钟输入LSE_OUT外部低速时钟输出NRST复位引脚PA13(JTMS/SWDIO)和PA14(JTCK/SWCLK)JTAG和SWD调试接口PA9/PA10USART1的TX/RX引脚PA2/PA3USART2的TX/RX引脚PB10/PB11I2C2的SCL/SDA引脚PA4/PA7、PB0/PB1ADC模数转换器的模拟输入引脚3.2电源模块设计电源模块在单片机的正常稳定运作起着至关重要的作用,起着整个系统的供电作用。电源模块电路如图3-4所示,其中PWD1为3.5插头,U2为一个自锁按键,插入电源后,按下自锁按键时电源接通VCC,且电流可回到GND接地端形成回路,此时系统供电正常。同时设有电源指示灯电路,由1K电阻和红色LED灯组成,通过LED的灯亮或灯灭来表示电源接通或断开状态,当供电正常且自锁按键被按下时,LED灯就会点亮。图3-4电源电路3.3按键输入模块设计按键输入模块是本系统的重要模块之一,它用于获取主要操作命令,本设计使用独立按键作为输入模块,按键一端与IO口连接,另一端接地,通过控制IO口输出高电平检测按键是否被按下,按下时IO口拉低,松开后回到高电平。按键输入电路分为电梯内部操作独立按键和电梯外部上下呼叫独立按键两部分,如图3-5所示。右侧为电梯内部操作独立按键电路连接单片机的PA0-PA7,设有:1、2、3、4层数选择按钮,可向系统发出楼层指令;开门、关门按钮,向系统发出开门或关门指令;报警按钮,可通过按下此按钮进行声光报警,防止电梯出现故障时有人员不能得到及时救援;维修按钮,维修人员可通过此按钮进入维修模式,为保证维修人员的安全,设置在维修模式下电梯不可使用。左侧为电梯外部上下呼叫独立按键电路连接单片机的PA8-PA15,在每一层设有上行或下行呼叫按键(1层只设有上行呼叫、4层只设有下行呼叫),可以通过呼叫按键呼叫电梯。图3-5按键输入模块电路3.4红外检测模块设计对射式红外传感器可以通过红外发射管向接收管发射红外射线判断是否有遮挡,发射端连接电源、接地和IO口,接收端接地,红外射线有遮挡时输出低电平,无遮挡时输出高电平。单片机作为红外检测模块的控制单元,接受来自对射式红外传感器不同的电信号,并对这些电信号进行分析处理。单片机根据预设的程序,判断是否有遮挡,并根据此控制开关门,开关门通过指示灯观察得到。当红外被遮挡时,保持开门状态,遮挡移除时,单片机控制延时5S关门。红外检测模块连接电路如图3-6所示。发射端输出线接单片机的PB9,在输出和正极之间接1K的上拉电阻。图3-6红外检测模块电路3.5温度检测模块设计DS18B20是一种单总线数字温度传感器,只需一个IO口,抗干扰能力强,由温度传感器、64位ROM、寄存器和温度报警触发器TH和TL组成。温度检测模块内置有上拉电阻,且有通电指示灯。单片机通过接收DS18B20测温模块检测并寄存在内部寄存器的温度,判断是否超过程序预设的温度值,若超过单片机驱动指示灯和蜂鸣器进行声光报警,并在OLED上显示“超温”字样。温度检测模块连接电路如图3-7所示,数据输出口连接单片机的PB6。图3-7温度检测模块电路3.6显示模块设计OLED液晶屏可视角度大,功耗低,可以自发光不需要背光源、厚度薄体积小。单位面积像素点多,可以显示64个字母或32个汉字,文字、图片等多种内容都可以清晰显示。内部驱动芯片为SSD1315。本设计采用的IIC通信的0.96寸OLED液晶屏显示模块的IO口占用少,只要两个IO口就能驱动。显示模块可将由单片机接收到并处理后的各种信息以可视化的方式展现出来。本次设计的显示模块可显示电梯上下行状态、当前楼层的实时信息、当前电梯状态信息以及当前电梯内实时温度。显示模块电路连接图如图3-8所示。SCL连接单片机的PB3,SDA连接单片机的PB4。图3-8显示模块电路3.7重量检测模块设计HX711重量测量模块由应变片称架和HX711电路组成。应变片的测量原理基于电阻应变效应,即当导体或半导体材料在外界力的作用下产生机械变形时,其电阻值会发生变化。应变片通常由敏感栅等构成,可以将机械构件上的应变变化转换为电阻变化。具体来说,应变片式压力传感器通过桥式电路将应变片的电阻变化转换为毫伏级电势输出,从而测量压力REF_Ref26214\r\h[18]。HX711芯片是一种24位的A/D转换器,用于接收并转换传感器发出的信息。本设计重量检测模块用于检测电梯内是否超载,以保证电梯安全运行。重量检测模块连接图如图3-9所示,数据口连接单片机的PB7、PB8。图3-9重量检测模块电路3.8电机驱动模块设计电机驱动模块采用步进电机驱动模拟演示电梯上下行升降,正转为上行,反转为下行,每转一圈表示已上或下一层楼,同时OLED显示模块同步显示当前楼层和上或下行状态。电机驱动模块连接电路如图3-10所示,步进电机驱动口连接单片机的PB0、PB1、PB10、PB11。图3-10步进电机驱动模块电路3.9声光报警模块设计声光报警模块用于在电梯载重和内部温度达到预设的峰值时,以及电梯内部报警按钮被按下时进行声光报警,同时进行基本的灯光指示。此模块由指示灯和蜂鸣器组成,共同进行声光报警。在声光报警的指示灯模块中,每个LED灯都有正负极两个引脚,当正极电压比负极高时,LED灯就会亮。本设计的指示灯模块分报警指示灯和开关门指示灯,如图3-11所示。其中超载指示灯连接单片机的PB12,用于当电梯超载时配合蜂鸣器进行声光报警,超载解除时灯灭;超温指示灯连接单片机的PB13,用于当电梯超温时配合蜂鸣器进行声光报警,超温解除时灯灭;当按下手动报警按钮时,超载指示灯和超温指示灯同时闪烁,时长为5S。开门指示灯连接单片机的PB14,当步进电梯停下时开门指示灯亮,表示电梯开门,若无超载、超温报警或手动报警的情况下延时5S后灯灭,若有则常亮直至报警情况消失后延时5S关闭;关门指示灯连接单片机的PB15,当开门指示灯灭后,延时1S关门指示灯亮,表示电梯门已关闭。图3-11指示灯模块电路在声光报警的蜂鸣器模块电路连接图如图3-12所示,连接单片机的PB5。在电梯载重和内部温度达到预设的峰值时以及电梯内部报警按钮被按下时,单片机向蜂鸣器输出低电平,蜂鸣器发声报警,超载、超温报警发声至超载、超温解除,手动报警发声时长为5S。图3-12蜂鸣器模块电路3.10本章小结本章介绍了系统硬件各个模块的电路连接图设计和作用,首先对于STM32F103C8T6最小系统板的引脚连接及引脚功能进行了介绍,再分别对电源模块、输入按键模块、红外检测模块、温度检测模块、显示模块、重量检测模块、电机驱动、指示灯及报警模块的电路设计及基本作用进行了说明。软件设计4.1软件开发环境KeiluVision5作为一个用于对嵌入式系统中的微控制器进行编程的集成开发环境,在对微控制器设计领域有着非常广泛的应用。它拥有源代码编辑器、宏汇编、连接器、库管理、项目经理、调试器以及微控制器开发、调试和编程等提升广大开发者开发效率和质量的工具。兼容多种编译语言,支持多种内核的微处理器,可以直接进行纯软件仿真,并在软件调试时可以进行跟踪,能生成在线仿真和烧录到芯片所处理器芯片中,而后进行仿真及预调试REF_Ref6468\r\h[19]。这些功能大大提升了开发者的效率,减少了工作量。总的来说,Keil5是一款功能强大、便于开发者使用的嵌入式软件开发环境。它为用户提供了优秀的开发工具和调试功能,无论是学生还是专业开发者都可以使用Keil5构建出完整可靠的嵌入式系统。Keil5软件如图4-1所示。图STYLEREF1\s4-SEQ图\*ARABIC\s11Keil5软件图片4.2系统主程序本系统主要实现电梯的运行功能,主流程图如图4-2所示。使用系统前首先要进行系统初始化,确定系统可以接收到各个子模块的状态。然后判断是否处于维修状态,处于维修状态下系统不可用,判断为“是”时循环判断,直到判断为“否”不处于维修状态。接着判断是否处于报警状态,处于报警状态下有声光报警且开门指示灯常亮,系统无法正常使用,判断为“是”时循环进行两个状态判断,直到判断为“否”不处于维修状态也不处于报警状态。随后进行键盘扫描,判断电梯是否被呼叫,若无则循环扫描判断。随后确认电梯被呼叫时判断是否满足关门条件,即红外无遮挡且开门键未被按下,若不满足则循环判断,若满足则关门灯亮,电机动作,并随之更新显示内容。继续判断电梯系统是否断电,若判断为否则继续循环作业,若判断为是则结束循环。图STYLEREF1\s4-SEQ图\*ARABIC\s12主流程图4.3显示模块子程序本系统显示模块子程序在单片机启动后开始执行,执行过程中需要实时更新显示变化且循环执行程序。本设计采用的是0.96寸OLED显示屏作为显示模块,运行需要程序驱动才能显示。首先执行显示模块初始化,并通过单片机获取各个模块的当前状态信息,获取信息内容包括:升降状态、当前楼层、报警及维修信息和当前温度。然后判断是否处于维修模式,如果是则更新显示内容,若否就继续判断是否处于报警状态,如果处于报警状态则更新显示内容,若否就继续判断电机是否动作,如果电机动作则根据电机正转或反转及圈数更新显示内容,若否就保留原显示。设定单片机通过测温模块实时获取当前温度并显示在OLED显示模块上。图4-3所示为显示模块子程序流程图。图STYLEREF1\s4-SEQ图\*ARABIC\s13显示模块子程序流程图4.4红外模块子程序本设计中的红外检测模块子程序是在单片机启动后开始执行。红外检测模块是用来判断是否有人遮挡,实现关门防夹的。红外检测模块子程序流程图如图4-4所示。首先进行系统初始化,红外检测模块发射红外对射信号,并判断对射信号是否被遮挡,若被遮挡则开门灯常亮且循环检测,若无则延时5S后关门灯亮并结束循环。图STYLEREF1\s4-SEQ图\*ARABIC\s14红外检测模块子程序流程图4.5维修、报警模块子程序4.5.1维修模块子程序维修模式是为了方便检修作业人员而设的模式,在此模式下,系统不可用。首先进行系统初始化,获取按键返回值,然后判断维修键是否被按下,若否循环进行返回值获取,若被按下则进行声光报警且运行系统不可使用并更新显示信息,然后进行判断维修键是否再次被按下,若否则继续循环进行声光报警直至再次被按下退出维修状态,电梯系统恢复正常。OLED实时更新显示,处于报警状态时OLED中的当前状态显示为“维修”,退出后恢复为“正常”,维修模块子程序流程图如图4-5所示。图STYLEREF1\s4-SEQ图\*ARABIC\s15维修模块子程序流程图4.5.2报警模块子程序报警模块由测温模块报警、测重模块报警及手动报警组成。各报警模块的子程序流程图如图4-6所示。超温报警模块首先进行测温系统初始化,并进行实时测温获取当前温度值,然后判断是否超过设定的温度阈值,若超过即为超温就进行声光报警,且更新显示报警状态显示为“超温”,若未超过则进行循环判断。超重报警模块首先进行测重系统初始化,并进行实时测重获取当前重量值,然后判断是否超过设定的重量阈值,若超过即为超重就进行声光报警,且更新显示报警状态显示为“超载”,若未超过则进行循环判断。手动报警模块首先进行系统初始化,并获取按键返回值,然后判断报警键是否被按下,若否循环进行返回值获取,若被按下则进行的声光报警且此时系统不可用,然后判断报警键是否再次被按下,若否则继续循环进行声光报警直至再次被按下退出报警状态,电梯系统恢复正常。OLED实时更新显示,处于报警状态时OLED中的当前状态显示为“报警”,退出后恢复为“正常”。图STYLEREF1\s4-SEQ图\*ARABIC\s16报警模块子程序流程图4.6电机动作模块子程序电机动作模块子程序首先进行系统初始化,并获取当前值,通过获取按键返回值判断返回值是否大于当前值,若大于电机正转当前楼层减按下楼层的绝对值的圈数,否则反转当前楼层减按下楼层所得值的圈数,并实时更新显示屏升降状态及当前楼层。电机正转为上升、反转为下降,每转一圈代表一层楼。流程图如图4-7所示。图STYLEREF1\s4-SEQ图\*ARABIC\s17电机动作模块子程序流程图4.6本章小结本章主要介绍了本设计的软件设计过程。首先介绍了软件开发环境,然后对系统主程序、显示模块子程序、红外模块子程序、维修、报警模块及电机动作模块子程序进行了详细程序流程与作用分析,并完成了各个子模块的程序设计。系统调试5.1系统硬件调试如图5-1为基于单片机的直梯控制系统的实物图。在将程序下载进入单片机、通电启动系统之前,连接各个模块时应根据电路原理图与PCB图进行详细的核对和检查,确保电路及模块的连接准确无误,以保证模块能够正常运行。在确认没有错接、漏接等发生短路的隐患后,将电路板安全地接入电源、按下总开关,并观察确认电源指示灯是否正常点亮。时刻观察各个模块部件是否有发热等异常,同时在运行过程中时刻观察通电指示灯的模块指示灯是否正常点亮,以保证系统处于能够正常工作的状态。图5-1实物图5.2系统软件调试将程序烧录进单片机前,首先根据需求对各个子程序进行模块化设计,在每一个模块设计完成后进行编译并修正其语法错误及逻辑错误,防止后续出现大量编译错误。再在主程序main.c中进行引用、设计,进行编译并修正其语法错误及逻辑错误。使用ST-LINK下载器连接单片机STM32F103C8T6最小系统板引出来的3V3、SWDIO、SWCLK、GND排针。连接好单片机后进行调试,并根据单片机反馈的情况进行程序的调整。软件调试如图5-2所示。图STYLEREF1\s5-2软件调试图5.3功能调试5.3.1电梯初始化显示按下电源总开关后,电源指示灯亮起,OLED屏幕亮起进行初始化显示,OLED初始化显示为升降状态:停止;当前楼层:1;电梯状态:正常;电梯系统实时获取当前温度,并在OLED屏上显示。电梯初始化显示如图5-3所示。图5-3电梯初始化显示5.3.2电梯开门、关门状态及开门防夹当电梯外部升降按钮或电梯内部按钮按下选择楼层并到达楼层时,电梯开门灯亮并延时一段时间后关门灯亮,在电梯运行途中关门灯常亮。当按下电梯内部开、关门按钮时,对应的开门、关门灯亮。红外对射模块发射红外信号,根据遮断情况判断是否有人,在有人时开门灯亮,无人后延时一段时间关门灯亮。开门关门状态在OLED屏幕中同步更新显示。如图5-4、图5-5所示。图STYLEREF1\s5-4电梯开门、关门状态图STYLEREF1\s5-5红外遮挡情况下的开关门状态5.3.3电梯上升、下降状态当电梯外部升降按钮或电梯内部按钮按下选择楼层时,系统根据按键返回值判断该上升还是该下降及升降多少层楼,并进行电机旋转表示,其正转时为上升,反转时为下降。同时升降状态及楼层变化在OLED屏幕实时显示,电梯运作时关门灯常亮。如图5-6所示为电梯升降时的状态。图STYLEREF1\s5-6电梯升降时状态5.3.4电梯超载、超温报警状态当重量检测模块检测返回值不在设定的阈值内时,即承载重量大于设定的200g时,进行超载的声光报警,超载报警灯亮、蜂鸣器响并在OLED屏幕上同步显示电梯状态为:超载。超载报警状态如图5-7所示。图STYLEREF1\s5-7电梯超载报警状态当温度检测模块检测返回值不在设定的阈值内时,即检测到的温度大于的40°或小于0°时,进行超温的声光报警,超温报警灯亮、蜂鸣器响并在OLED屏幕上同步显示电梯状态为:超温。超温报警状态如图5-8所示。图STYLEREF1\s5-8电梯超温报警状态5.3.5电梯人工报警、维修状态在按下报警按键后,所有指示灯闪烁、蜂鸣器响、OLED屏幕上同步显示电梯状态为报警且此时电梯不可用,再次按下报警按键退出报警状态,指示灯恢复正常,系统恢复正常,电梯处于报警状态时如图5-9所示。图STYLEREF1\s5-9电梯报警状态在按下维修按键后,所有指示灯常亮、OLED屏幕上同步显示电梯状态为维修且此时电梯不可用,再次按下后退出维修状态,指示灯恢复正常,系统恢复正常,电梯处于维修状态时如图5-10所示。图STYLEREF1\s5-10电梯维修状态5-4本章小结本章主要介绍了电梯系统的硬件及软件调试过程,及各个功能的展示与调试。在硬件调试方面,应逐步调试并对不足的部件进行优化。在软件调试方面,使用更为方便的模块化编程,并在每个模块完成时进行编译,进行错误更改,再在主程序进行使用,完成系统的功能设计。在功能调试方面,将硬件与软件配合,反复测试功能,将出现的功能错误逐步排查,最终实现完全功能。结论本文以STM32F103C8T6单片机作为核心控制器,结合了OLED屏幕、温度传感器、红外对射传感器、测重模块和电机驱动模块,设计并实现了一套稳定的直梯控制系统。通过理论分析、硬件电路设计、软件程序开发及系统测试,验证了该系统的可行性和实用性。基于单片机的电梯控制系统通过采用模块化设计,实现了楼层和升降状态检测和显示、按键响应、维修模式、电机驱动及超温、超载和开门防夹安全保护等核心功能。与传统PLC或其他复杂控制器相比,本设计采用的单片机方案显著降低了系统成本,有效提高了系统的稳定性。通过搭建实物模型进行功能测试,系统各部分功能均达到预期目标。本设计的目的在于能够保证电梯的正常运行,解决垂直运输的效率问题,同时有效提升搭乘人员的安全,减少事故发生率。采用OLED屏幕便于电梯内人员更及时便捷地了解电梯状态,采用红外对射传感器、测温、测重模块能够有效预防事故发生、保证电梯搭乘人员的安全。在设计过程中,虽然整体已达到预期的功能目标,但依然存在一些不足之处。具体的说,一方面红外模块和测重模块的使用局限性较高,比如红外对射传感器必需保证发送端和接收端在同一直线上以及测重模块必需放置在光滑平面上;另一方面是本设计为针对四层建筑的电梯控制系统,受限于单片机的处理能力,系统不适用于复杂情景;最后值得升级改进的是电梯的智能性,比如使用声控选楼层、APP控制等功能,提高用户的体验。本篇论文对基于单片机的直梯控制系统进行详细介绍及优化。参考文献王荣娟.基于单片机电梯控制系统设计与实现[J].河南科技,2013,32(7X):93-93.金正晋.基于单片机的电梯控制系统开发与实现[J].电子测试2018(22):21-22.VlachouIV,EfstathiouED,KarakatsanisST.Design,AnalysisandApplicationofControlTechniquesforDrivingaPermanentMagnetSynchronousMotorinanElevatorSystem[J].Machines,2024,12(8):560-560.陈勇俊.基于单片机的电梯门故障预警系统的研究及可靠性分析[D].广东:华南理工大学2017.国家市场监督管理总局.《电梯制造与安装安全规范》国家标准解读(上)[N].中国市场监管报,2021-08-24(7).郑建琦,梁鑫旺,张洋.智能技术在电梯控制系统中的运用研究[J].机械与电子控制工程,2022,4(12):46-48.寿庆.浅谈国内电梯节能发展现状[J].中国新技术新产品,2013,(01):172-172.袁金荣,赵志刚,冯云,等.光储直柔建筑电梯直流化研究与应用实践[J].供用电,2025,42(01):64-71.DOI:10.19421/ki.1006-6357.2025.01.007.陈轩,海涛.新型光伏电梯系统BLDC电机的仿真分析[J].科学技术创新,2021(8):169-170杨红娟,周谦,李凯凯,等.基于有轨制导车辆的多维度电梯物理模型建立与控制系统研究[J].中国工程机械学报,2021,19(03):201-206.薛建峰,王景芹.基于单片机的电梯系统模拟与研究[J].电子器件,2020,43(03):705-708.S.E.Cho,S.J.Park.AStudyofPowerLossfor3PhaseVoltageSourceConverterofElevator[J].科技信息,2013,(03):255-257.SoA,ChanW.AstudyoflinearPMSMdrivenropelesselevators[J].BuildingServicesEngineeringResearch&Technology,2019,40(1):93-108.Vlachou,VasileiosI.,Efstathiou,DimitriosE.,Karakatsanis,TheoklitosS..Design,AnalysisandApplicationofControlTechniquesforDrivingaPermanentMagnetSynchronousMotorinanElevatorSystem[J].MACHINES,2024,12(08).DOI:10.3390/machines12080560.Zuo,YuTing,Luo,FuFang,Zeng,ShiLong.GECKO-INSPIREDFRACTALBUFFERFORPASSENGERELEVATOR[J].FACTAUNIVERSITATIS-SERIESMECHANICALENGINEERING,2024,22(04):633-642.DOI:10.22190/FUME240314022Z.Ko,Young-Joon,Cheon,Seong-Bong,Lee,Hwa-Yong.AStudyontheElevatorSafetyManagementMethodUsingRemoteMonitoringSystem[J].InternationalJournalofMechanicalEngineering,2022,7(01):265-270.Ahn,SeungHo,Jung,HyunSeung,Kim,JinSung,etal.Developingelevatorlandingdoorsafetyretainerscapableofwithstanding1,000Jusingnumericalsimulationandexperimentalverification[J].JOURNALOFASIANARCHITECTUREANDBUILDINGENGINEERING,2024,23(02):687-697.DOI:10.1080/13467581.2023.2245010.王桂荣.李宪芝.传感器原理及应用[M].北京:中国电力出版社,2015.5杨学存,刘飞.基于Proteus+Keil5的“由虚入实”理念在嵌入式系统教学中的应用[J].电子测试,2020,31(16):120-122.附录A原理图及PCB图A-SEQ图\*ARABIC\s11原理图图A-SEQ图\*ARABIC\s12PCB附录B元件清单表B-SEQ表\*ARABIC2元件清单名称数量(个)单价(元)STM32最小系统板18.90.96寸OLED屏18.32DS18B20测温模块13.42红外对射模块15.23HX711测重模块114.1步进电机16.61有源蜂鸣器11.99LED指示灯50.0510K电阻50.12按键140.14自锁开关10.25电源母座11.14排母80.3排针20.3附录C程序#include"stm32f10x.h"#include"Delay.h"#include"OLED.h"#include"DS18B20.h"#include"step.h"#include"HX711.h"#defineTemperature_MAX40#defineTemperature_MINI0#defineWeight_MAX200unsignedcharmark_flag=0;unsignedintLEDcnt=0;//报警灯翻转计数标志位unsignedintOpenCloseDoorCnt=0;//超时关门计数标志位unsignedcharTempFloorNum=0;//临时存储电梯内部按键变量unsignedcharTempElevatorOutKey=0;//临时存储电梯外部按键变量unsignedcharUpAndDownFlag=3;//外部上下楼层按键变量当UpAndDownFlag为1表示乘客要上楼,为0表示乘客要下楼unsignedcharInfrareState=0;//红外检测状态标志位unsignedintInfrareStateCnt=0;//红外检测超时计数标志位//定义一个显示OLED内容的结构体类型typedefstruct{ //分别创建4个结构体成员 char*UpDownState;//对应升降状态 unsignedcharfloorState;//对应当前楼层 char*ElevatorState;//对应电梯状态 floatTemperature;//对应当前温度}ShowDat;//ShowDat为结构体类型别名ShowDatOLED_Page;//定义一个ShowDat类型的结构体变量OLED_Page//更新OLED显示内容voidOLED_Page_Updat(){ OLED_ShowChinese(72,0,OLED_Page.UpDownState);//显示第一行的变量 OLED_Printf(72,16,OLED_8X16,"%d",OLED_Page.floorState);//显示第二行的变量 OLED_ShowChinese(72,32,OLED_Page.ElevatorState);//显示第三行的变量 OLED_Printf(72,48,OLED_8X16,"%.2f",OLED_Page.Temperature);//显示第四行的变量 OLED_ShowChinese(112,48,"℃");//显示摄氏度符号 OLED_Update();//更新显示 OLED_ClearArea(72,32,48,16);//第4行最后一个显示汉字的位置默认显示空白}//OLED默认界面函数voidOLEDHomePage(){ OLED_Page.UpDownState="停止"; OLED_Page.floorState=1; OLED_Page.ElevatorState="正常"; OLED_Page.Temperature=0; OLED_ShowChinese(0,0,"升降状态");OLED_Printf(64,0,OLED_8X16,":");OLED_ShowChinese(72,0,OLED_Page.UpDownState); OLED_ShowChinese(0,16,"当前楼层");OLED_Printf(64,16,OLED_8X16,":");OLED_Printf(72,16,OLED_8X16,"%d",OLED_Page.floorState); OLED_ShowChinese(0,32,"电梯状态");OLED_Printf(64,32,OLED_8X16,":");OLED_ShowChinese(72,32,OLED_Page.ElevatorState); OLED_ShowChinese(0,48,"当前温度");OLED_Printf(64,48,OLED_8X16,":");OLED_ShowChinese(112,48,"℃"); OLED_Page_Updat();}//GPIO配置按键函数voidGPIOKey_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//使能GPIOA和GPIOC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置PA2和PA3为上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);}//GPIO配置LED函数voidGPIOLED_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//使能GPIOA和GPIOC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//配置PA2和PA3为上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);}//GPIO配置蜂鸣器函数voidGPIOBEEP_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//使能GPIOA和GPIOC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//配置PA2和PA3为上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_5);}//DS18B20初始化总线voidDS18B20_DQ_Init(){ inti=100; while(i--) { OLED_Page.Temperature=DS18B20_Get_Temp();//获取温度 }}//温度和重量处理函数voidTemperatureWeight(){ OLED_Page.Temperature=DS18B20_Get_Temp();//获取温度 OLED_Printf(72,48,OLED_8X16,"%.2f",OLED_Page.Temperature);//显示获取到的温度 Get_Weight();//获取重量 if(OLED_Page.Temperature<Temperature_MINI||OLED_Page.Temperature>Temperature_MAX)//判断温度是否在正常区间 { OLED_Page.ElevatorState="超温"; GPIO_ResetBits(GPIOB,GPIO_Pin_13); GPIO_ResetBits(GPIOB,GPIO_Pin_5);//蜂鸣器响 } elseif(Weight_Shiwu>Weight_MAX)//判断重量是否在正常区间 { OLED_Page.ElevatorState="超载"; GPIO_ResetBits(GPIOB,GPIO_Pin_12); GPIO_ResetBits(GPIOB,GPIO_Pin_5);//蜂鸣器响 } else//如果都不是 GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_5); OLED_Page_Updat();//更新显示数据 //如果超载或者超温则让CPU卡死在while循环内,直到回到正常的阈值为止 while(OLED_Page.Temperature<Temperature_MINI||OLED_Page.Temperature>Temperature_MAX)OLED_Page.Temperature=DS18B20_Get_Temp(),//如果超温则卡在这个while循环内 OLED_Page_Updat(); while(Weight_Shiwu>Weight_MAX)Get_Weight(),OLED_Page.Temperature=DS18B20_Get_Temp(),//如果超载则卡死在这个while循环内 OLED_Page_Updat();}//开门处理函数voidOpenDoor(){ OLED_Page.ElevatorState="已开门"; OLED_Page_Updat(); GPIO_ResetBits(GPIOB,GPIO_Pin_14);//开门灯亮 GPIO_SetBits(GPIOB,GPIO_Pin_15);//关门灯灭 Delay_ms(4000); OLED_Page.ElevatorState="已关门"; OLED_Page_Updat(); GPIO_ResetBits(GPIOB,GPIO_Pin_15);//关门灯亮 GPIO_SetBits(GPIOB,GPIO_Pin_14);//开门灯灭}//关门处理函数voidCloseDoor(){ OLED_Page.ElevatorState="已关门"; OLED_Page_Updat(); GPIO_ResetBits(GPIOB,GPIO_Pin_15);//关门灯亮 GPIO_SetBits(GPIOB,GPIO_Pin_14);//开门灯灭 Delay_ms(100);}//报警和维修处理函数voidFault(){ //报警 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0) { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0) { OLED_Page.ElevatorState="报警";OLED_Page_Updat(); GPIO_ResetBits(GPIOB,GPIO_Pin_5);//蜂鸣器响 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0); while(1)//进入死循环直到再次按下则退出 { if(++LEDcnt==100000)//这里计数达到一定数值之后使4个LED电平翻转一次,实现LED闪烁 { LEDcnt=0;//清除计数变量 GPIO_Write(GPIOB,(~GPIO_ReadOutputData(GPIOB))&0xf000); } if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0) { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0) { while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0); GPIO_SetBits(GPIOB,GPIO_Pin_5|0xf000); //全部灯灭并且蜂鸣器停 LEDcnt=0;//清除计数变量 OLED_Page.ElevatorState="正常"; OLED_Page_Updat(); break; } } } } } //维修 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) { OLED_Page.ElevatorState="维修";OLED_Page_Updat(); GPIO_ResetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//全部灯亮 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0); while(1)//进入死循环直到再次按下则退出 { if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) { while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0); GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//全部灯灭 OLED_Page.ElevatorState="正常"; OLED_Page_Updat(); break; } } } } }}//返回内部按键的键值unsignedcharReturnFloorNum(){ if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)==0)return1; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)==0)return2; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)==0)return3; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)==0)return4; return0;}//返回外部按键的键值unsignedcharElevatorOutKey(){ if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0)return11;//返回值的十位表示楼层数,个位表示up或者down,1是up,0是down elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==0)return21; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0)return31; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)==0)return20; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==0)return30; elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)==0)return40; return0;}////GPIO配置红外传感器函数voidGPIOInfrared_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//使能GPIOA和GPIOC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//配置PA2和PA3为上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_9);}//红外检测处理函数voidInfraredDetection(unsignedcharsw){ if(sw==1) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0) { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==0) { OpenDoor(); } } elseif(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1) { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1) { CloseDoor(); } } }}//内部下楼按键处理函数voidElevatorDown(){ if(OLED_Page.floorState>ReturnFloorNum()&&ReturnFloorNum()!=0) { TempFloorNum=ReturnFloorNum(); for(unsignedintn=0;n<1000;n++) { Delay_ms(5); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0)break; } CloseDoor(); Delay_ms(500); OLED_Page.ElevatorState="正常"; OLED_Page.UpDownState="下降"; OLED_Page_Updat(); for(unsignedchari=OLED_Page.floorState;i>TempFloorNum;) { motor_circle_fan(64,3);//下一层楼反转一圈 OLED_Printf(72,16,OLED_8X16,"%d",--i);//楼层数改变 OLED_UpdateArea(72,16,8,16); } GPIO_ResetBits(GPIOB,GPIO_Pin_5); Delay_ms(1000); GPIO_SetBits(GPIOB,GPIO_Pin_5); OLED_Page.UpDownState="停止"; OLED_Page.floorState=TempFloorNum;//楼层数改变 OLED_Page_Updat(); OpenDoor(); Delay_ms(500); OLED_Page.ElevatorState="正常"; OLED_Page_Updat(); while(ReturnFloorNum()==0&&ReturnFloorNum()==TempFloorNum)//判断其他楼层有没有被按下 { OpenCloseDoorCnt++; if(OpenCloseDoorCnt==8000000) { OpenCloseDoorCnt=0; CloseDoor(); Delay_ms(500); OLED_Page.ElevatorState="正常"; GPIO_SetBits(GPIOB,GPIO_Pin_15); OLED_Page_Updat(); break; } } }}//电梯开门和关门按键处理函数voidDoorOnOffKey(unsignedcharsw){ if(sw==1) { if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1)//开门按键处理 { Delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==0&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1)//开门按键处理 OpenDoor(); } elseif(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==0&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南永锦能源招聘210人考试备考题库及答案解析
- 2026内蒙古包头铁道职业技术学院赴铁路院校招聘急需专业教师16人考试备考试题及答案解析
- 2026年淮南经济技术开发区公益性岗位征集考试备考题库及答案解析
- 2026广东深圳市眼科医院招聘工作人员招聘11人考试参考试题及答案解析
- 2026天津市津南创腾经济开发有限公司招聘8人考试备考试题及答案解析
- 文库发布:exo介绍教学
- 2026日照银行见习人员招聘10人考试参考题库及答案解析
- 2026安徽亳州市蒙城县商业综合体招聘劳务派遣人员(四次)考试参考题库及答案解析
- 2026年西安市鄠邑区就业见习基地见习招聘(163人)考试参考试题及答案解析
- 2026年合肥幼教集团光明之家幼儿园门卫招聘考试参考题库及答案解析
- 2025年中考数学压轴训练:一次函数综合题 (学生版)
- 操作系统安全基础的课件
- 人教版(2024)八年级上册物理期末复习全册知识点提纲
- 智慧广场移多补少课件
- 2025年建筑工程劳务公司的年终总结大全5篇
- 2025年UOM无人机理论培训合格证题库及答案
- 半导体车间消防安全教育培训
- 质量管理部门介绍
- 分装合同协议书范本
- 江苏省南京市南京师范大学附属中学2025年高二上生物期末联考试题含解析
- 【MOOC】《学校体育学》(上海体育大学)章节作业慕课答案
评论
0/150
提交评论