stm控制的四层电梯设计原理与程序代码
- 格式:docx
- 大小:107.09 KB
- 文档页数:15
简易4层电梯控制电路摘要:本设计基于单片机来控制电器中各部分的使用,采用led 来显示楼层的位置及方向,采用固态继电器控制接触器线圈以控制三相电机的正反转,采用精确的红外对管来准确校验电梯的位置。
关键词:at89s51;设计;单片机中图分类号:tp29文献标识码:a文章编号:1007-9599 (2013) 05-0000-021设计思路本设计主要以单片机 at89s51为主,配以适当接口作为输入输出通道。
采用精密红外发光对管作为检测电路对电梯的轿厢位置进行准确定位校验,以确保能够精确的平层定位。
采用独立式键盘电路作为外呼内选呼叫控制。
利用交流接触器控制电动机正反转从而控制电梯的上升和下降,为了实现无触点控制和实现光电隔离,采用固态继电器对交流电机进行控制。
采用8位led灯显示电路用来实时显示楼层,并用74ls164作为显示电路的驱动部分。
当电梯到达要求的楼层时,电梯停止运行并进行服务。
2总体设计框图本控制系统由六个部分组成,其中以at89s51单片机作为核心,配以适当接口作为输入输出通道。
采用独立式键盘电路作为外呼内选呼叫控制。
利用电动机正反转控制电梯的上升和下降,led显示了电梯所在楼层,用74ls164作为驱动部分,其结构方框图如图1所示。
图1总结构框图3设计电路的组成及原理分析3.1楼层到位校验电路该电路是由六个红外发光对管组成的,电路有较好的抗干扰能力,单反应速度较慢,电路较复杂。
把他们的六个接口在单片机的p2口,有单片机的输出信号来控制光电传感器,传感器来辨别楼层显示电路显示是否正确。
实际应用中把红外发射管安装在厢体内,在每层放置一个红外接收头,在厢体上下运动过程中,红外发射管不断发射红外线,当厢体运行到特定位置时,有红外接收头接收到红外线,使其输出发生变化。
通过单片机过程控制,使电梯做出相应响应,停止或响应显示楼层。
其原理图如图2所示:r11+5va2r22图2红外发光对管原理图3.2电梯正反转控制电路电梯的升降运行采用固态继电器对交流电机的正反转进行控制,它可实现无触点控制和实现光电隔离,以避免电机与控制电路之间的相互干扰,具有开关速度快,工作频率高,无机械噪声等优点。
如图4.1所示,厅外召唤指令具有登记指示,到层取消。
以网络3三楼下呼为例,当外召唤下呼I1.4信号输入,且电梯不在三层(即M4.2不动作)时,Q1.4形成自己锁,保持并显示外信号登记状态,而当电梯到达到三层时,M4.2的触点动作,并且当电机在反转下行时(电梯上行经三层不消除下行信号)Q0.2和Q1.4都将断开,消除信号。
图4.1 外召唤信号的登记及消除程序段4.4.2内指令信号的等级及消除如图4.2所示,电动内呼按钮以内呼一楼为例,形成I0.4输入信号自锁并登记显示。
当轿厢到达一楼,一层平层信号I0.0将断Q0.4使内呼信号取消。
如此就达到了内呼信号登记显示,以及电梯平层后内呼信号取消。
另外,本系统设一楼为基站,两分钟内无任何操作,电梯自动返回一楼。
如图4.2中网络11所示,当电机无正反转120秒即2分钟网络7中T40触点闭合,自动内呼一楼,随即电梯返回一楼。
图4.2 内指令信号登记及消除程序段4.4.3电梯的平层处理信号如图4.3所示,当电梯平层时,由辅助继电器来给辅助例如停车信号,登记消除,开始接收上、下行信号记忆等平层需要处理的动作。
图4.3 电梯的平层信号处理程序段4.4.4选层定向及忽略反向截梯如图4.4所示,电梯的上行主程序和下行主程序类似,以上行来说,上行要进行确定电梯上行目标层程序的调用,在上行状态接通,但电梯同时不处于下行状态,保证电梯处于上行状态时电梯才执行这一段程序段,在PLC 的每一个扫描周期其上行程序都要调用确定上行最近目标层的程序,以便更改电梯的目标层[20]。
轿厢上行如图4.4a所示,网络16-19共同组成电梯内、外呼所接收的上行信号。
而网络21所示,上行记忆信号即电机在正转,上行形成自锁记忆,当电机反转或轿厢到达四层时断开。
上行记忆信号是辅助电梯进行反向不能截梯动作的信号,我们可以看到网络20中,有上行信号M2.0和上行记忆信号Q0.0电梯就会上行,无视反向信号截梯。
设计内容:设计一个四层电梯控制系统,电梯控制逻辑关系如下:1、行车方向由内选信号决定,顺向优先执行;2、行车途中如遇呼梯信号时,顺向截车,反向不截车;3、内选信号、外呼信号具有记忆功能,执行后解除;4、到层时自动开门;延时关门;停层时,可手动开门或关门;5、行车时不能手动开门,门开时电梯不允许运行;6、电梯有效运行时间应小于8s,否则发出超时报警并停车;7、若没有内外呼梯信号,电梯自动返回第一层待命;8、开始运行时,若轿箱不在第一层,会自动返回。
设计要求:1、根据系统的要求,列出I/O分配表,画出I/O接线图。
2、利用STEP 7软件编制出相应的梯形图程序。
3、实验室中连接硬件线路,模拟运行,完成程序的调试。
4、写出设计报告。
摘要随着科学技术的发展、近年来,我国的电梯生产技术得到了迅速发展.一些电梯厂也在不断改进设计、修改工艺。
我的课设就是电梯系统,在实验中,我要实现电梯的所有逻辑,同时还要完成报警系统、门系统的控制。
这个实验在软件方面的难点就在与逻辑的分析和实现,还有截车过程的完善。
由于实验用的是已经连好的实验桌,所以在硬件方面就比较方便,只需将分配好的I/O表做相应的连接。
关键词:PLC;可编程控制器;电梯目录1、绪论 (1)1.1PLC的简介 (1)1.2PLC的分类 (1)1.3PLC的特点 (1)1.4PLC控制的优越性: (2)2、总体设计方案 (2)2.1电梯的结构及其工作原理 (2)2.1.1电梯的结构 (2)2.1.2电梯的工作原理 (3)2.1.3电梯的整体设计方案 (4)3、硬件设计 (6)3.1变频器的参数设置原则 (6)3.2 PLC控制系统设计 (6)3.3电梯控制系统实现的功能 (6)3.4硬件的选择 (7)4、软件部分的设计 (10)5、程序的调试 (25)6、结论 (25)参考文献 (26)1、绪论1.1PLC的简介在市场经济的推动下,人们要求产品品种齐全且质优价廉。
目录第一部分设计任务与调研…………………………………………………………第二部分设计说明………………………………………………………………………第三部分设计成果……………………………………………………第四部分结束语…………………………………………………………………………第五部分致谢…………………………………………………………………………第六部分参考文献…………………………………………………………………第一部分设计任务1.1系统设计任务此次设计的任务是用单片机模拟电梯的运行状态,用电机模拟现实中电梯运行时带动电梯的上升与下降,用发光二极管来模拟电梯中的开关门和上下行,用数码管显示并模拟电梯所在位置。
电源模块中的9V电压与5V电压分别模拟驱动大功率电机和小功率芯片。
抛开一些复杂的概念,单片机在我们的生活中触手可及,尤其是在智能仪表、实时控制、机电一体化、办公机械、家用电器等方面拥有广泛的应用领域。
毕业设计注重于对单片机的理解与应用,明白单片机的工作原理,以便以后单片机领域的开发和研制打下基础,提高自己的设计能力,培养创新能力,丰富自己的知识理论,做到理论和实际相结合。
能进一步了解单片机的工作原理,内部结构和工作状态。
理解单片机的接口技术,中断技术,存储方式,时钟方式和控制方式,这样才能更好的利用单片机来做有效的设计,提高自己的综合能力。
电梯,是现代社会的一种必不可少的垂直运输交通工具。
它能自动登记厢内的选层指令和厢外的召唤指令,关门起动运行,同向逐一应答。
当无指令时,关门返回基层,当某一层有召唤指令时再起动应答。
毕业设计是五年大专教学计划中最后一个教学环节,是各个教学环节的继续、深化和扩展,是锻炼我们分析问题、解决问题,提高综合能力的重要阶段,为我们今后从事实际的工作打好基础。
毕业设计分为两个部分,硬件部分和软件部分。
硬件部分介绍:四层楼电梯硬件电路的设计,单片机AT89C51的功能和其在各电路中的作用。
3.5 软件设计3.5.1 四层电梯的程序分析这次设计最为重要的就是如何控制四层电梯面对各种情况下的动作。
首先明确的是电梯分上升和下降两个情况。
下面是对于编程的分析:图3-3图3-3所示段程序为1层到4层数码管显示的命令,程序的意思是将数字1,2,3,4分别输入数码管,当哪层得到命令时,则对应该层的数码管显示。
最后一句的目的就是启动数码管。
1. 较为简单的单层呼叫(详见图3-4程序段)1)停在1层时,2层,3层,4层分别呼叫,电梯下降,因为是1层,所以电梯只是上升。
2)停在4层时,1层,2层,3层分别呼叫,由于是在4层,所以电梯只是下降。
3)停在2层时,当1层呼叫时,电梯下降,而当3层和4层分别呼叫时,电梯就上升。
4)停在3层时,4层呼叫,电梯上升,而当1层,2层分别呼叫时,电梯则下降。
图3-42. 接下来是2层同时呼叫的情况(详见图3-5程序段)1)停在1层时,当2层和3层同时呼叫时,则看2层和3层哪一层率先呼叫,如果2层先呼叫,则先上升到2层,再上升到3层,若3层先呼叫,则先上升到3层,随后再下降到2层。
当2层和4层以及3层和4层同时呼叫时,情况和上面2层和3层同时呼叫时的情况相同。
2)当电梯停在4层时,当2层和3层同时呼叫时,则也是先看哪层率先呼叫,2层先则先下降到2层再上升3层,若3层先呼叫则先下降到3层再下降到2层,停在4层时的情况也是这样。
3)停在2层时,也是看哪一层率先呼叫,率先呼叫的层先运动。
4)停在3层时,同样也是看哪一层先呼叫,先呼叫的层先运动。
图3-5如程序段3-6所示,是电梯在四层时的两层同时呼叫的情况,电梯停在其余层时的情况和停在四层的情况是一样的,(电梯停在1层时不可能),比如说1层与2层同时呼叫时,则按上面所说的看哪层率先呼叫,假设第2层先呼叫,则程序段3中最后1段里的M7接通,(虽然上面的M6也接通,但是由于是2层先呼叫,所以当到2层时,只有最后1段里的接通,接通的同时,时间继电器T2也得电,延时之后,程序段3中最上面1段里的T2接通了,这时本来由于断开而断开的线路又由T2这路接通了,电梯则开始下降到1层再停止,这里要说明的是Y11是下降的线圈。
基于PLC控制的四层电梯课程设计___PLC课程设计引言本课程设计基于西门子PLC的电梯控制系统设计及调试系(部)信息工程系。
旨在通过实际操作,使学生掌握PLC的工作特点和工作方式,以及硬件电路设计和描述。
本文将详细介绍课程设计的任务、要求和总体设计方案。
任务及要求本课程设计的任务是设计一个电梯控制系统,要求实现电梯的上行和下行控制、门的开关控制、超载保护等功能。
同时,还需要进行调试和测试,确保系统的稳定性和可靠性。
设计要求在设计电梯控制系统时,需要考虑以下要求:1.系统的稳定性和可靠性。
2.系统的安全性,包括超载保护和门的安全控制。
3.系统的实用性,能够满足电梯运行的基本需求。
设计条件在设计电梯控制系统时,需要考虑以下条件:1.系统需要使用西门子PLC进行控制。
2.系统需要使用适当的传感器和执行器进行控制。
3.系统需要符合国家相关法规和标准。
总体设计方案PLC的工作特点PLC是一种可编程逻辑控制器,具有以下特点:1.可编程性:PLC可以根据需要进行编程,实现不同的控制功能。
2.可靠性:PLC具有高度的稳定性和可靠性,可以长期稳定地运行。
3.灵活性:PLC可以根据需要进行修改和调整,适应不同的控制需求。
PLC的工作方式PLC的工作方式包括扫描工作方式和程序执行过程。
PLC的扫描工作方式PLC的扫描工作方式是指PLC周期性地扫描程序,并执行相应的控制操作。
具体来说,PLC会按照程序的先后顺序执行各个指令,直到程序结束。
PLC的程序执行过程PLC的程序执行过程包括输入、输出、中间处理和输出等四个步骤。
具体来说,PLC会先读取输入信号,然后进行中间处理,最后输出相应的控制信号。
硬件电路设计及描述电梯运行控制要求电梯运行控制要求包括上行和下行控制、门的开关控制、超载保护等功能。
为了实现这些功能,需要使用适当的传感器和执行器进行控制。
电气控制系统主回路电气原理图电气控制系统主回路电气原理图如下所示:此处应该插入图片)单元电路设计单元电路设计包括输入单元、输出单元和中间处理单元。
数字电子技术课程设计(四层电梯控制) 目录proteus简介 ................................................ 1 1 方案选择.................................................. 3 2 硬件电路设计 . (3)2.1 脉冲电路设计 ..................................................................... .. (3)2.2 开关电路设计 ..................................................................... .. (4)2.3 显示译码电路设计 ..................................................................... (5)2.4 电梯升降电路设计 ..................................................................... (6)2.5 主控制电路设计 ..................................................................... .................................. 8 3 软件程序设计 (8)3.1 设计流程图 ..................................................................... (8)3.2 程序代码 ..................................................................... ............................................ 10 4 仿真结果及分析 ........................................... 13 5 电路焊接与调试 ........................................... 15 附:元件清单 ............................................... 16 6 心得体会................................................. 17 7 参考文献................................................. 18 本科生课程设计成绩评定表 .. (19)《数字电子技术基础》课程设计任务书proteus简介Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
电梯控制程序源代码(带流程图-功能分解、源代码)《综合电子创新训练》研究报告研究题目:CTS1600-1控制技术综合试验院系名称:专业名称:学生姓名:指导教师:xxxx年 xx月 xx日xxxxxxxxxx目录第一章绪论 (1)1.1课题背景与目的 (1)1.2课题研究方法 (1)第二章电梯模型硬件设备 (2)2.1 实验单片机模型与接口定义 (2)2.1.1 实验用单片机 (2)2.1.2 单片机接口定义 (3)2.1.3 I/O接口DATA控制命令表 (4)2.2 电梯控制命令说明 (6)2.3 实验用电梯模型 (8)第三章与电梯模型相关的实验程序 (10)3.1数码管连续显示 (10)3.1.1 程序流程图 (10)3.1.2 功能简介 (10)3.1.3 功能实现过程 (11)3.1.4 问题的解决及收获 (11)3.2 外部按键灯连续闪烁 (12)3.2.1 程序流程图 (12)3.2.2 功能简介 (12)3.2.3 功能实现过程 (12)3.2.4 问题的解决及收获 (13)3.3 键、灯、数码管 (14)3.3.2 功能简介 (14)3.3.3 功能实现过程 (14)3.3.4 问题的解决及收获 (15)3.4 外部按键上下行 (16)3.4.1 程序流程图 (16)3.4.2 功能简介 (16)3.4.3 功能实现过程 (17)3.4.4 问题的解决及收获 (18)3.5 计算器 (19)3.5.1 程序流程图 (19)3.5.2 功能简介 (21)3.5.3 功能实现过程 (21)3.5.4 问题的解决及收获 (22)3.6 密码锁 (23)3.6.1程序流程图 (23)3.6.2功能简介 (23)3.6.3实现功能过程 (24)3.6.4问题的解决及收获 (24)3.7逐层停自动开关门循环 (25)3.7.1程序流程图 (25)3.7.2功能简介 (27)3.7.3实现功能过程 (27)3.7.4问题的解决及收获 (27)3.8 可记录顺序逐层停自动开关门 (28) 3.8.2功能简介 (28)3.8.3实现功能过程 (29)3.8.4问题的解决及收获 (29)3.9 外部按键电梯 (30)3.9.1 主程序 (30)3.9.2 开关门模块 (31)3.9.3 上下行模块 (32)3.9.4 LED模块 (34)第四章电梯模型完整控制程序 (36)4.1 完整控制程序(main函数) (36)4.1.1 功能说明 (36)4.1.2 功能实现过程 (37)4.1.3 问题的解决及收获 (37)4.2 按键扫描模块(getto函数) (37)4.2.1功能简介 (38)4.2.2 问题的解决及收获 (38)4.3 当前层判断模块(getat函数) (38)4.3.1 功能简介 (38)4.3.2 问题的解决及收获 (38)4.4 电梯门的选通、禁止模块(DoorEnable函数) (38) 4.4.1 功能简介 (38)4.4.2 问题的解决及收获 (38)4.5 电梯开关门模块(openandclose函数) (39)4.5.2 功能实现过程 (39)4.5.3 问题的解决及收获 (39)第五章总结与致谢 (41)5.1 总结 (41)5.2 致谢 (41)附录控制电梯模型相关程序 (42)附录一数码管连续显示 (42)附录二外部按键灯连续闪烁 (43)附录三外部按键逐个亮灭 (45)附录四键、灯、数码管 (47)附录五外部按键上下行 (49)附录六计算器 (51)附录七密码锁 (56)附录八逐层停开关门循环 (59)附录九可记录顺序逐层停自动开关门 (64)附录十外部按键电梯 (70)附录十一完整电梯程序 (77)图目录Figure 1 凌阳单片机 (2)Figure 2 凌阳单片机接口定义 (3)Figure 3 实验用电梯模型 (9)Figure 4 数码管连续显示流程图 (10)Figure 5 外部按键灯连续闪烁流程图 (12)Figure 6 LED1to7流程图 (13)Figure 7 键、灯、数码管流程图 (14)Figure 8 外部按键上下行流程图 (16)Figure 9 计算器数字扫描函数流程图 (19)Figure 10 计算器主函数流程图 (20)Figure 11 密码锁流程图 (23)Figure 12 逐层停自动开关门循环main函数 (25)Figure 13 逐层停自动开关门循环AtAndTo函数 (26) Figure 14 逐层停自动开关门循环OpenAndClose函数 (26) Figure 15 可记录顺序逐层停自动开关门 (28)Figure 16 外部按键电梯主函数流程图 (30)Figure 17 外部按键电梯开关门函数流程图 (31)Figure 18 外部按键电梯上下行函数流程图 (32)Figure 19 外部按键电梯LED函数流程图 (34)Figure 20 外部按键电梯btLED函数流程图 (35)Figure 21 电梯完整程序主函数 (36)Figure 22 电梯完整程序openandclose函数流程图 (39)第一章绪论1.1课题背景与目的现代社会中,电梯已经成为不可缺少的运输设备。
stm控制的四层电梯设计原理与程序代码————————————————————————————————作者:————————————————————————————————日期:列出这个设计中要用到的S T M32的各个引脚及实际用途如表(1)所示,硬件电路图如图(2)所示。
控制要求1总体控制要求:电梯由安装在各楼层电梯口的上升下降呼叫按钮(U1、U2、U3、D2、D3、D4),电梯轿厢内楼层选择按钮(S1、S2、S3、S4),上升下降指示(U P、D O W N),各楼层到位行程开关(S Q1、S Q2、S Q3、S Q4)组成。
电梯自动执行呼叫。
2电梯在上升的过程中只响应向上的呼叫,在下降的过程中只响应向下的呼叫,电梯向上或向下的呼叫执行完成后再执行反向呼叫。
3电梯停止运行等待呼叫时,同时有不同呼叫时,谁先呼叫执行谁。
4具有呼叫记忆、内选呼叫指示功能。
5具有楼层显示、方向指示、到站声音提示功能。
设计中用到的各引脚分布:输入B11->B14一层到四层的内选按钮输入B8->B10二层到四层的下呼按钮输入B5->B7一层到三层的上呼按钮输入B1->B4行程控制输出C12->C15当前楼层指示输出C11桥箱下降指示输出C10桥箱上升指示输出C6->C9一层到四层的内选指示灯输出C3->C5二层到四层的下呼指示灯输出C0->C2一层到三层的上呼指示灯输出D12八音盒,到站声输出D8->D11数码管的控制端子表(1)硬件电路图如下图所示:图(2)程序的流程图如图(3):fnow1 fnow2 fnow3fnow4uping down4downi nginslt 4 inslt 3 inslt 2 inslt 1 up1 up2 up3 down2 down3 c0c1c2c3c4c5c6c7c8c9c10c11c12c13c14c15c12c13c14c15reachfB ELLgo1g o2 g o3inslt1go4up1up2 u p3down4down3down2inslt2 i nslt3i nslt4b1b2b3b4b5b6b7b8b9b10b11b12b13b14d8d9d10d11b11b12b13b14b5b6b7b8b9b10b1b2b3b4c6c7c8c9c10c11c0c1c2c3c4c520k1053.3vn r e s tnres t3.3vC 0 C 1 C 2 C 3 C 4 C 5 C 6 C 7 C 8 C 9 C 10 C 11 C 12 C 13 C 14 C 15 VSS A VDDA B 1B 2 B 3B 4 B 5 B 6 B 7 B 8 B 9 B 10 B 11 B 12 B 13 B 14 D12 D8 D9 D10 D11 D0/OS C1N D1/OS COUTnRS T VDD VSSst m32st m32A 7B 1C 2D 6LT 3B I/R BO 4R BI 5a 13b 12c 11d 10e 9f 15g1474LS 48a bf cg d e DPY [LEDgn]1234567abc d e fgDS3 a bf cg d e DPY [LEDgn]1234567abc d e fg DS2a bf cg d e DPY [LEDgn]1234567abc d e fg DS1a bf cg d e DPY [LEDgn]1234567abc d e fg DS4a b c d e f ga b c d e f g a b c d e f g a b c d e f gVCCVCCVCC图(3)开始程序的初始化有无需要电梯的楼层电梯的当 前方向当前层是不是欲至层或 上呼层当前层是不是欲至层或 下呼层上面层有无需要电梯的楼层下面层有无需要电梯的楼层上移一层并显示下移一层 并显示开门延时 并显示 开门延时 并显示反向反向NYYYNN上下NNYY判断电梯当前的楼层并显示程序代码如下:#include "stm32f10x_lib.h"#include "stdio.h"void RCC_Configuration(void); //时钟配置函数void GPIO_Configuration(void); //通用I/O口配置函数void ask_Scan(void);void delay(vu32 Count); // 延时unsigned char inslt[4]={0},dnask[3]={0},upask[3]={0},fnow[4]={0}; signed char nnum=0,dnnum=0,upnum=0,innum=0,i=0;//inslt[4]四层内选,dnask下呼请求,upask[3]上呼请求,fnow当前楼层; u8 updnFlag=0; //上呼与下呼标main (void){#ifdef DEBUGdebug();#endifRCC_Configuration();GPIO_Configuration();GPIO_ResetBits(GPIOC, GPIO_Pin_0);GPIO_ResetBits(GPIOC, GPIO_Pin_1);GPIO_ResetBits(GPIOC, GPIO_Pin_2); //各层的上呼请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_3);GPIO_ResetBits(GPIOC, GPIO_Pin_4);GPIO_ResetBits(GPIOC, GPIO_Pin_5); //各层的下呼请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_6);GPIO_ResetBits(GPIOC, GPIO_Pin_7);GPIO_ResetBits(GPIOC, GPIO_Pin_8);GPIO_ResetBits(GPIOC, GPIO_Pin_9); //各层的内选请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_10); //桥箱上升请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_11); // 桥箱下降请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_12);GPIO_ResetBits(GPIOC, GPIO_Pin_13);GPIO_ResetBits(GPIOC, GPIO_Pin_14);GPIO_ResetBits(GPIOC, GPIO_Pin_15); //当前楼层指示清零GPIO_ResetBits(GPIOD, GPIO_Pin_8);GPIO_ResetBits(GPIOD, GPIO_Pin_9);GPIO_ResetBits(GPIOD, GPIO_Pin_10);GPIO_ResetBits(GPIOD, GPIO_Pin_11); //当前楼层显示清零GPIO_ResetBits(GPIOD, GPIO_Pin_12); //到站声清零while(1){void wait_display_scan(void) // 等待状态扫描{ void nowfloor_scan(void) //扫描当前电梯所在的楼层{ if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==1){fnow[0]=1; nnum=1;} if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_2)==1){fnow[1]=1; nnum=2;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_3)==1){fnow[2]=1; nnum=3;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_4)==1){fnow[3]=1; nnum=4;} }void nowfloor_display(void){ switch(nnum){case 1:GPIO_SetBits(GPIOC, GPIO_Pin_6); //第一层指示灯亮GPIO_Write(GPIOD,0x01<<8); // 显示第一层break;case 2:GPIO_SetBits(GPIOC, GPIO_Pin_7); //第2层指示灯亮GPIO_Write(GPIOD,0x02<<8); // 显示第2层break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_8); //第3层指示灯亮GPIO_Write(GPIOD,0x03<<8); // 显示第3层break;case 4:GPIO_SetBits(GPIOC, GPIO_Pin_9); //第4层指示灯亮GPIO_Write(GPIOD,0x04<<8); // 显示第4层break;}}void ask_scan(void) //判断有没有上呼、下呼、内选请求{if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1){upask[0]=1;upnum=1;updnFlag==0; } if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==1){upask[1]=1;upnum=2;updnFlag==0;} if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==1){upask[1]=1;upnum=3;updnFlag==0;} if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==1){dnask[0]=1;upnum=2;updnFlag==1;} if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1){dnask[1]=1;upnum=3;updnFlag==1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1){dnask[2]=1;upnum=4;updnFlag==1;} if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==1){inslt[0]=1;innum=1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1){inslt[1]=1;innum=2;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1){inslt[2]=1;innum=3;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==1){inslt[3]=1;innum=4;}}void ask_display(void){ switch(upnum){case 1:GPIO_SetBits(GPIOC, GPIO_Pin_0); //第1层上呼指示灯亮break;case 2GPIO_SetBits(GPIOC, GPIO_Pin_1); //第2层上呼指示灯亮break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_2); //第3层上呼指示灯亮break;}switch(dnnum){case 2:GPIO_SetBits(GPIOC, GPIO_Pin_3); //第2层下呼指示灯亮break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_4); //第3层下呼指示灯亮break;case 4:GPIO_SetBits(GPIOC, GPIO_Pin_5); //第4层下呼指示灯亮break;}switch(innum){case 1:GPIO_SetBits(GPIOC, GPIO_Pin_6); //第1层内选指示灯亮break;case 2:GPIO_SetBits(GPIOC, GPIO_Pin_7); //第2层内选指示灯亮break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_8); //第3层内选指示灯亮break;case 4:GPIO_SetBits(GPIOC, GPIO_Pin_9); //第3层内选指示灯亮break;}}if(upnum==0|dnnum==0|innum==0) //如果没有呼叫请求void wait_display_scan(void); //等待并显示当前楼层elseswitch(updnFlag){ case(0){void upask_dispose(void){if(nnun==upnum|nnum==innum){GPIO_setBits(GPIOD, GPIO_Pin_12); //开门、警报到站void nowfloor_display(void) ;void delay(vu32 Count); //开门延时}else{for (i=nnum+1;i<=4;i++){if(upnum[i]==1|dnnum[i]==1|inslt[i]==1) //当前层的上面有请求,上移一层,在看是否是{ nnum++; //想要去的层或呼叫层void nowfloor_display(void) ;void ask_display(void);void upask_dispose(void);}else{updnFlag==1void wait_display_scan(void); //若下面没有请求了,反向GPIO_SetBits(GPIOC, GPIO_Pin_11); //桥箱下降指示灯亮}}}}break;}case(1){void dnask_dispose(void){if(nnun==dnnum|nnum==innum){GPIO_setBits(GPIOD, GPIO_Pin_12); //开门、警报到站void nowfloor_scan(void) ;void delay(vu32 Count); //开门延时}else{for (i=nnum-1;i>=1;i--){if(upnum[i]==1|dnnum[i]==1|inslt[i]==1) //当前层的下面有请求,下移一层,在看是否是{ nnum--; //想要去的层或呼叫层void ask_display(void);void nowfloor_display(void) ;void dnask_dispose(void);}else{updnFlag==0void wait_display_scan(void); //若下面没有请求了,反向GPIO_SetBits(GPIOC, GPIO_Pin_10); //桥箱上升指示灯亮}}}}break;}}}}}void RCC_Configuration(void) //时钟配置函数{ErrorStatus HSEStartUpStatus;u8 SYSCLKSourceValue;RCC_DeInit(); //对RCC复位RCC_HSEConfig(RCC_HSE_ON); //使能HSE时钟HSEStartUpStatus=RCC_WaitForHSEStartUp(); //取HSE是否准备好标志if(HSEStartUpStatus==SUCCESS) //判断HSE是否准备好{/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB时钟为系统时钟RCC_PCLK1Config(RCC_HCLK_Div2); //配置低速APB1时钟为系统时钟的一半RCC_PCLK2Config(RCC_HCLK_Div2); //配置高速APB2时钟为系统时钟的一半RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //对HSE进行倍频,倍频因子为9,倍频后时钟频率为72MHZRCC_PLLCmd(ENABLE); //使能倍频后的时钟while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)//等待PLL时钟启用成功{}RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将倍频后的时钟设置为系统时钟SYSCLKSourceValue=RCC_GetSYSCLKSource(); //取时钟频率值while(SYSCLKSourceValue != 0x08) //判断系统时钟是否为倍频后的时钟{ //- 0x00: HSI used as system clock} //- 0x04: HSE used as system clock//- 0x08: PLL used as system clock }RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //使能APB2的外设GPIOA和GPIOC的时钟}void GPIO_Configuration(void) //通用I/O端口配置函数{GPIO_InitTypeDef GPIO_InitStructure;/* Configure GPIOC pin0, pin1, pin2 and pin3 as Output push-pull */GPIO_InitStructure.GPIO_Pin = 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_13|GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);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_9GPIO_Pin_10||GPIO_Pin_11|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(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD, &GPIO_InitStructure);}void delay(vu32 Count){ for(Count;Count!=0;Count--);}。