收藏 分销(赏)

电梯控制程序源代码带流程图功能分解源代码样本.doc

上传人:精*** 文档编号:4753214 上传时间:2024-10-12 格式:DOC 页数:148 大小:1.12MB
下载 相关 举报
电梯控制程序源代码带流程图功能分解源代码样本.doc_第1页
第1页 / 共148页
电梯控制程序源代码带流程图功能分解源代码样本.doc_第2页
第2页 / 共148页
电梯控制程序源代码带流程图功能分解源代码样本.doc_第3页
第3页 / 共148页
电梯控制程序源代码带流程图功能分解源代码样本.doc_第4页
第4页 / 共148页
电梯控制程序源代码带流程图功能分解源代码样本.doc_第5页
第5页 / 共148页
点击查看更多>>
资源描述

1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 综合电子创新训练研究报告研究题目: CTS1600-1控制技术综合试验院系名称: 专业名称: 学生姓名: 指导教师: xxxx年 xx月 xx日xxxxxxxxxx目录第一章绪论11.1课题背景与目的11.2课题研究方法1第二章电梯模型硬件设备22.1 实验单片机模型与接口定义22.1.1 实验用单片机22.1.2 单片机接口定义32.1.3 I/O接口DATA控制命令表42.2 电梯控制命令说明62.3 实验用电梯模型9第三章 与电梯模型相关的实验程序103.1数码管连续显示103.1.1 程序流程图103.1.2 功能简介113.

2、1.3 功能实现过程113.1.4 问题的解决及收获113.2 外部按键灯连续闪烁123.2.1 程序流程图123.2.2 功能简介123.2.3 功能实现过程123.2.4 问题的解决及收获133.3 键、灯、数码管143.3.1 程序流程图143.3.2 功能简介143.3.3 功能实现过程143.3.4 问题的解决及收获153.4 外部按键上下行163.4.1 程序流程图163.4.2 功能简介173.4.3 功能实现过程173.4.4 问题的解决及收获183.5 计算器193.5.1 程序流程图193.5.2 功能简介213.5.3 功能实现过程213.5.4 问题的解决及收获223.

3、6 密码锁233.6.1程序流程图233.6.2功能简介243.6.3实现功能过程243.6.4问题的解决及收获243.7逐层停自动开关门循环253.7.1程序流程图253.7.2功能简介273.7.3实现功能过程273.7.4问题的解决及收获273.8 可记录顺序逐层停自动开关门283.8.1程序流程图283.8.2功能简介293.8.3实现功能过程293.8.4问题的解决及收获293.9 外部按键电梯303.9.1 主程序303.9.2 开关门模块313.9.3 上下行模块323.9.4 LED模块34第四章 电梯模型完整控制程序364.1 完整控制程序(main函数)364.1.1 功能

4、说明364.1.2 功能实现过程374.1.3 问题的解决及收获374.2 按键扫描模块(getto函数)384.2.1功能简介384.2.2 问题的解决及收获384.3 当前层判断模块(getat函数)384.3.1 功能简介384.3.2 问题的解决及收获384.4 电梯门的选通、禁止模块(DoorEnable函数)384.4.1 功能简介384.4.2 问题的解决及收获394.5 电梯开关门模块(openandclose函数)394.5.1 功能简介394.5.2 功能实现过程394.5.3 问题的解决及收获39第五章 总结与致谢415.1 总结415.2 致谢41附录 控制电梯模型相关

5、程序42附录一 数码管连续显示42附录二 外部按键灯连续闪烁43附录三 外部按键逐个亮灭45附录四 键、灯、数码管47附录五 外部按键上下行49附录六 计算器51附录七 密码锁56附录八 逐层停开关门循环59附录九 可记录顺序逐层停自动开关门64附录十 外部按键电梯70附录十一 完整电梯程序77图目录Figure 1 凌阳单片机2Figure 2 凌阳单片机接口定义3Figure 3 实验用电梯模型9Figure 4 数码管连续显示流程图10Figure 5 外部按键灯连续闪烁流程图12Figure 6 LED1to7流程图13Figure 7 键、 灯、 数码管流程图14Figure 8 外

6、部按键上下行流程图16Figure 9 计算器数字扫描函数流程图19Figure 10 计算器主函数流程图20Figure 11 密码锁流程图23Figure 12 逐层停自动开关门循环main函数25Figure 13 逐层停自动开关门循环AtAndTo函数26Figure 14 逐层停自动开关门循环OpenAndClose函数26Figure 15 可记录顺序逐层停自动开关门28Figure 16 外部按键电梯主函数流程图30Figure 17 外部按键电梯开关门函数流程图31Figure 18 外部按键电梯上下行函数流程图32Figure 19 外部按键电梯LED函数流程图34Figur

7、e 20 外部按键电梯btLED函数流程图35Figure 21 电梯完整程序主函数36Figure 22 电梯完整程序openandclose函数流程图39第一章 绪论1.1 课题背景与目的现代社会中, 电梯已经成为不可缺少的运输设备。电梯的存在使得每幢高层建筑的交通更为便利。电梯控制技术的发展主要经历了三个阶段: 继电器控制阶段, 微机控制阶段, 现场总线控制阶段。随着经济的高速发展, 微电子技术、 计算机技术和自动控制技术也得到了迅速发展, 交流变频调速技术已经进入一个崭新的时代, 其应用越来越广。电梯是现代高层建筑的垂直交通工具, 其设计要求稳定性、 安全性及高。随着人们生活水平的不断

8、提高,对电梯的要求的也相应提高, 电梯得到了快速发展。电梯模型将机械和电气两方面有机地结合起来, 充分体现了机电结合的特点, 同时微机控制即单片机控制的电梯在成本上较低, 同时还有着较高的精度, 非常适合在学生机电实验方面得到广泛的应用, 能够提高大家的编程能力, 加深对单片机的理解和应用, 同时增强创新精神和团队合作精神。1.2 课题研究方法参照凌阳SPCE061A开发的相关资料, 加深对控制电梯模型的单片机的了解, 进行61板的相关实验, 掌握单片机实现基本功能的技术。对单片机编写程序, 以达到控制电梯模型的目的。第二章 电梯模型硬件设备2.1 实验单片机模型与接口定义2.1.1 实验用单

9、片机实验用单片机为凌阳SPCE061A微控制器( 简称61板) , 是以凌阳16位单片机SPCE061A为核心的精简开发-仿真-电路板。61板除了具备单片机最小系统电路外, 还包括有电源电路、 音频电路、 复位电路等, 采用电池供电, 方便携带。SPCE061A 是继unSP系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。跟市面上常见的avr、 51等单片机相比, 这款单片机具有一个绝招:语言功能。与SPCE500A不同的是, 在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能, SPCE061A里只内嵌32K字的闪存( FLASH) 。较高的处理速度使u

10、nSP能够非常容易地、 快速地处理复杂的数字信号。SPCE061A主要包括输入/输出端口、 定时/计数器、 数/模转换、 模/数转换、 串行设备输入/输出、 通用异步串行接口、 低电压检测和复位等部分, 且内置在线仿真电路ICE接口, 较高的处理速度使其能够快速地处理复杂的数字信号。本电梯模型就是采用此单片机进行程序编写和实现电梯的运行控制。Figure 1 凌阳单片机2.1.2 单片机接口定义A0 A8A1 A9A2 A10A3 A11A4 A12A5 A13A6 A14A7 A15 B0 B8B1 B9B2 B10B3 B11B4 B12B5 B13B6 B14B7 B15 实验用单片机接

11、口定义如图, 其中A口为输入, B口为输出。各楼层按键+电梯内按键去一层三层下 去二层四层下去三层一层到达去四层二层到达各楼层按键一层上三层到达电梯内按键二层上四层到达3010二层下开门实验单片机接口 三层上关门 +各楼层按键灯 +电梯上下运行( 1上0下) 三层下灯电梯运行选通( 1行0停) 四层下灯开关门运行( 1开0关) 开门到位开关门选通( 1行0禁) 关门到位各楼层按键灯一层上灯二层上灯4020二层下灯三层上灯Figure 2 凌阳单片机接口定义2.1.3 I/O接口DATA控制命令表单片机A口DATA控制命令表A口( 信号输入) *P_IOA_Data接口编号电梯动作0x0001A

12、0去一层( 内部按键) 0x0002A1去二层( 内部按键) 0x0004A2去三层( 内部按键) 0x0008A3去四层( 内部按键) 0x0010A4一层上( 外部按键) 0x0020A5二层上( 外部按键) 0x0040A6二层下( 外部按键) 0x0080A7三层上( 外部按键) 0x0100A8三层下( 外部按键) 0x0200A9四层下( 外部按键) 0x0400A10一层到达( 外部按键) 0x0800A11二层到达( 外部按键) 0x1000A12三层到达( 外部按键) 0x A13四层到达( 外部按键) 0x4000A14开门( 内部按键) 0x8000A15关门( 内部按键

13、) 单片机A口DATA控制命令表A口( 信号输入) *P_IOB_Data接口编号电梯动作0x0001B0电梯上下运行( 1上0下) 0x0002B1电梯运行选通( 1行0停) 0x0004B2开关门运行( 1开0关) 0x0008B3开关门选通( 1行0禁) 0x0010B4一层上灯0x0020B5二层上灯0x0040B6二层下灯0x0080B7三层上灯0x0100B8三层下灯0x0200B9四层下灯0x0400B10开门到位0x0800B11关门到位0x1000B12数码管0x B13数码管0x4000B14数码管0x8000B15单片机接口属性设置: *P_IOA_Dir=0*P_IOA

14、_Attrib=0*P_IOA_Data=0 (设A0-A15口为输入)*P_IOB_Dir=0xf3ff*P_IOB_Attrib=0xf3ff ( 设B0-B9口为输出, B10、 B11口为输入) *P_IOB_Data=0;2.2 电梯控制命令说明1. 一层上按钮按下, *P_IOA_Data输入值为0x0010; 使一层上按键灯亮起的命令为: *P_IOB_Data=0x0010, 同时其它层按键灯熄灭; 如果要使其它层按键灯不受此按键灯影响, 保持原来的状态, 则输入的命令应为: *P_IOB_Data=0x0010| P_IOB_Data; 2. 二层上按钮按下, *P_IOA_

15、Data输入值为0x0020使二层上按键灯亮起的命令为: *P_IOB_Data=0x0020同时其它层按键灯熄灭; 如果要使其它层按键灯不受此按键灯影响, 保持原来的状态, 则输入的命令应为: *P_IOB_Data=0x0020|P_IOB_Data; 3. 二层下按钮按下, *P_IOA_Data输入值为0x0040使二层下按键灯亮起的命令为: *P_IOB_Data=0x0040时其它层按键灯熄灭; 如果要使其它层按键灯不受此按键灯影响, 保持原来的状态, 则输入的命令应为: *P_IOB_Data=0x0040|P_IOB_Data; 4. 三层上按钮按下, *P_IOA_Data输

16、入值为0x0080使三层上按键灯亮起的命令为: *P_IOB_Data=0x0080; 同时其它层按键灯熄灭; 如果要使其它层按键灯不受此按键灯影响, 保持原来的状态, 则输入的命令应为: *P_IOB_Data=0x0080| P_IOB_Data; 5. 三层下按钮按下, *P_IOA_Data输入值为0x0100, 使三层下按键灯亮起的命令为: *P_IOB_Data=0x0100, 同时其它层按键灯熄灭; 如果要使其它层按键灯不受此按键灯影响, 保持原来的状态, 则输入的命令应为: *P_IOB_Data=0x0100| P_IOB_Data; 6. 四层下按钮按下, *P_IOA_D

17、ata输入值为0x0200, 使四层上按键灯亮起的命令为: *P_IOB_Data=0x0200, 同时其它层按键灯熄灭; 如果要使其它层按键灯不受此按键灯影响, 保持原来的状态, 则输入的命令应为: *P_IOB_Data=0x0200| P_IOB_Data; 7. 电梯内部开门按钮按下, *P_IOA_Data输入值为0x4000, 使电梯开门的命令为: *P_IOB_Data=0x000c; 8. 电梯内部关门按钮按下, *P_IOA_Data输入值为0x8000; 使电梯关门的命令为: *P_IOB_Data=0x0008。我们为了能够简化我们的程序, 我们在头文件define.h中

18、定义了直观易懂的单词来表示数字指令, 这样使得编程过程更加容易直观, 而且使得程序的可读性更强, 可是这种方法是在之前不断地尝试的基础上才逐渐摸索出来的, 因而在后来编写的程序中普遍用到了这种方法, 而在开始训练阶段编写的程序还往往是使用数字型的指令, 具体的定义如下: #ifndef_DEFINE_h_#define_DEFINE_h_#define IOA *P_IOA_Data#define IOB *P_IOB_Data#define uint unsigned int#define uchar unsigned char#define ulong unsigned long#defi

19、ne stop 0x0000#define down 0x0002#define up 0x0003#define bt1up 0x0010#define bt2up 0x0020#define bt2down 0x0040#define bt3up 0x0080#define bt3down 0x0100#define bt4down 0x0200#define btin1 0x0001#define btin2 0x0002#define btin3 0x0004#define btin4 0x0008#define btopen 0x4000#define btclose 0x8000#

20、define openok 0x0400#define closeok 0x0800#define down 0x0002#define up 0x0003#define close 0x0008#define open 0x000c#define L1 0x1000#define L2 0x #define L3 0x3000#define L4 0x4000#define L1up 0x0010#define L2up 0x0020#define L2down 0x0040#define L3up 0x0080#define L3down 0x0100#define L4down 0x02

21、00#define at1 0x0400#define at2 0x0800#define at3 0x1000#define at4 0x #endif同时由于看门狗在程序中频繁出现, 故定义看门狗函数dog方便使用: #include spce061A.h#include dingyi.hvoid dog()*P_Watchdog_Clear=0x0001;2.3 实验用电梯模型Figure 3 实验用电梯模型第三章 与电梯模型相关的实验程序3.1数码管连续显示3.1.1 程序流程图Figure 4 数码管连续显示流程图3.1.2 功能简介程序初始化完成后, 数码管从0连续变化到7, 再从

22、7连续变化到1。3.1.3 功能实现过程经过定义一个指示当前数码管显示数值的变量, 以该变量为循环条件, 每次循环结束后变量自动加1, 即指示下一个数码管显示数值, 而且经过延时函数使得输出持续一段时间一边观察现象。( 代码详见附录一) 3.1.4 问题的解决及收获该程序较为简单, 可是经过该程序我们对软件的运行、 调试有了初步的认识, 对采集输入数据、 设置输出命令的基本方法的认识更加清晰直观, 同时对控制命令部分有了更加深刻的了解。3.2 外部按键灯连续闪烁3.2.1 程序流程图Figure 5 外部按键灯连续闪烁流程图3.2.2 功能简介程序初始化完成后, 外部按键灯连续闪烁, 即从一层

23、上灯到四层下等逐个亮, 并不断循环。3.2.3 功能实现过程定义一个整形变量, 经过该变量对6( 外部按键一共有6个灯, 可按顺序定义六个灯分别为0,1,2,3,4,5) 取余的结构判断应该哪一个灯亮, 同时经过延时函数使得输出得到持续。( 代码详见附录二) 3.2.4 问题的解决及收获这个程序的思路非常好, 可是在逻辑上需要经过取余这种方法实现, 有些复杂, 能够将代码直接描述为外部按键逐个灯亮这样也能够实现, 我们用这种思路写了一个让外部按键的灯逐个亮且保持, 直到所有的灯都亮了之后, 再逐个灯灭的程序, 代码见附录三, 程序流程图如下: Figure 6 LED1to7流程图3.3 键、

24、 灯、 数码管3.3.1 程序流程图Figure 7 键、 灯、 数码管流程图3.3.2 功能简介程序运行后, 按下电梯外部按键之后该层外部按键的灯亮, 同时数码管显示按下的层数, 等待下一次输入。3.3.3 功能实现过程程序初始化完成后, 开始扫描是否有按键按下, 若接收到外部某一按键按下信号后, 那么该层按键的灯亮, 而且数码管显示对应的层数。( 代码见附录四) 现以一层上按键被按下举例: if(t&0x0010)=0x0010) /如果一层上按键被按下*P_IOB_Data=0x1011; /输出为一层上按键灯亮且数码管显示1*P_Watchdog_Clear=0x0001;3.3.4

25、问题的解决及收获经过该程序, 我们对多个部件的共同控制方法有了非常清晰的认识, 在61中只需要将需要共同控制的部分的数字指令相加即可形成共同协调控制。3.4 外部按键上下行3.4.1 程序流程图Figure 8 外部按键上下行流程图3.4.2 功能简介程序运行后, 当按下电梯外部按键后, 电梯从当前层运行至目标层后停止, 等待下一次输入。3.4.3 功能实现过程首先程序定义了一个指示当前所在层的变量at, 以及一个指示目标层的变量to, 程序初始化完成后, 给变量at赋上对应的层数值, 如若当前所在层为2层: if(t&0x0800)=0x0800) /判断当前所在层数, 若当前所在层数为2层

26、at=2; /给变量at赋当前层数值2*P_Watchdog_Clear=0x0001;扫描外部按键是否按下, 若按下, 则对变量to赋上对应层数值, 如若三层上或三层下按键被按下: if(t&0x0080)=0x0080)|(t&0x0100)=0x0100) /若三层上、 三层下按键被按/下to=3; /给变量to赋目标层数为3*P_Watchdog_Clear=0x0001;进行目标层与当前层的比较判断, 若目标层大于当前层, 即toat, 那么电梯应向上运行, 直到获取的当前值at=to之后, 电梯停止运行: if(toat)*P_IOB_Data=up;*P_Watchdog_Cle

27、ar=0x0001;若目标层等于当前层, 即to=at, 那么电梯停止运行: if(to=at)*P_IOB_Data=stop;*P_Watchdog_Clear=0x0001;若目标层小于当前层, 即toat, 那么电梯应向下运行, 直到获取的当前值at=to之后, 电梯停止运行: if(toat, 那么电梯应向上运行, 直到获取的当前值at=to之后, 电梯停止运行: if(toat)*P_IOB_Data=up;*P_Watchdog_Clear=0x0001;若目标层等于当前层, 即to=at, 那么电梯停止运行: if(to=at)*P_IOB_Data=stop;*P_Watch

28、dog_Clear=0x0001;若目标层小于当前层, 即toat, 那么电梯应向下运行, 直到获取的当前值at=to之后, 电梯停止运行: if(toat)*P_IOB_Data=down;*P_Watchdog_Clear=0x0001;3.9.4 LED模块3.9.4.1程序流程图Figure 19 外部按键电梯LED函数流程图Figure 20 外部按键电梯btLED函数流程图3.9.4.2功能过程程序初始化完成后, 外部按键灯以及指示层数的数码管根据现在电梯的运行状态正常显示。3.9.4.3实现功能过程当外部六个按键按下后, 外部按键的灯亮, 电梯上部的LED灯显示当前运行的所在层数

29、。3.9.4.4问题的解决及收获在程序调试过程中, 我们发现如果在电梯运行的过程中, 即电梯不处于某层到位的状态时, 若按下电梯外部的按键后, 电梯有可能会卡死在中间部位, 而且导致电梯无法运行, 在发现这样的问题之后, 我们对程序进行了修改, 针对上下行部分, 我们加入了使得电梯停止的条件, 如果电梯没有处于到位状态的话就始终保持先前上行或下行的状态不变, 从而使得问题得到了有效的解决。第四章 电梯模型完整控制程序4.1 完整控制程序( main函数) 4.1.1 功能说明Figure 21 电梯完整程序主函数代码见附录十一4.1.2 功能实现过程在上下行的优先级别判断上, 我们没有使用以前

30、的数组或者at和to大小判断的方式, 而是按照内外部层数按键的个数分别定义了4个和6个变量, 分别来指示目标层数, 而何时选择上下行这一问题, 举例如下: 如果电梯当前处于二层, 首先判断电梯之前的运行方向, 如果电梯之前运行方向向下, 那么, 若外部二层下按键或者内部二层按键被按下, 电梯执行开门程序; 若外部按键二层下被按下且外部按键一层上与内部一层按键均未被按下, 电梯执行开门程序。之后进行上下行的判断, 如果电梯外部按键一层上或者内部按键一层被按下, 那么电梯下行至一层再做出判断; 如果电梯外部按键一层上或者内部按键一层均未被按下, 且三、 四层按键至少有一个被按下之后, 电梯上行至三层再做出判断。如果电梯之前运行方向向上, 那门, 如果外部二层上或者内部二层按键被按下, 电梯执行开门程序; 若外部按键二层下被按下, 且三、 四层均没有按

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服