收藏 分销(赏)

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

上传人:精**** 文档编号:3033790 上传时间:2024-06-13 格式:DOC 页数:125 大小:1.11MB 下载积分:20 金币
下载 相关 举报
电梯控制程序源代码带作业流程图功能分解源代码.doc_第1页
第1页 / 共125页
电梯控制程序源代码带作业流程图功能分解源代码.doc_第2页
第2页 / 共125页


点击查看更多>>
资源描述
《综合电子创新训练》研究报告 研究题目: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 实验用电梯模型 9 第三章 与电梯模型相关的实验程序 10 3.1数码管连续显示 10 3.1.1 程序流程图 10 3.1.2 功能简介 11 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.1 程序流程图 14 3.3.2 功能简介 14 3.3.3 功能实现过程 14 3.3.4 问题的解决及收获 15 3.4 外部按键上下行 16 3.4.1 程序流程图 16 3.4.2 功能简介 17 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功能简介 24 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.1程序流程图 28 3.8.2功能简介 29 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函数) 38 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 问题的解决及收获 39 4.5 电梯开关门模块(openandclose函数) 39 4.5.1 功能简介 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 课题背景与目 当代社会中,电梯已经成为不可缺少运送设备。电梯存在使得每幢高层建筑交通更为便利。电梯控制技术发展重要经历了三个阶段:继电器控制阶段,微机控制阶段,现场总线控制阶段。随着经济高速发展,微电子技术、计算机技术和自动控制技术也得到了迅速发展,交流变频调速技术已经进入一种崭新时代,其应用越来越广。电梯是当代高层建筑垂直交通工具,其设计规定稳定性、安全性及高。随着人们生活水平不断提高,对电梯规定也相应提高,电梯得到了迅速发展。 电梯模型将机械和电气两方面有机地结合起来,充分体现了机电结合特点,同步微机控制即单片机控制电梯在成本上较低,同步尚有着较高精度,非常适合在学生机电实验方面得到广泛应用,可以提高人们编程能力,加深对单片机理解和应用,同步增强创新精神和团队合伙精神。 1.2 课题研究办法 参照凌阳SPCE061A开发有关资料,加深对控制电梯模型单片机理解,进行61板有关实验,掌握单片机实现基本功能技术。 对单片机编写程序,以达到控制电梯模型目。 第二章 电梯模型硬件设备 2.1 实验单片机模型与接口定义 2.1.1 实验用单片机 实验用单片机为凌阳SPCE061A微控制器(简称61板),是以凌阳16位单片机SPCE061A为核心精简开发-仿真-电路板。61板除了具备单片机最小系统电路外,还涉及有电源电路、音频电路、复位电路等,采用电池供电,以便携带。 SPCE061A 是继u’nSP™系列产品SPCE500A等之后凌阳科技推出又一款16位构造微控制器。跟市面上常用avr、51等单片机相比,这款单片机具备一种绝招:语言功能。与SPCE500A不同是,在存储器资源方面考虑到顾客较少资源需求以及便于程序调试等功能,SPCE061A里只内嵌32K字闪存(FLASH)。较高解决速度使u’nSP™可以非常容易地、迅速地解决复杂数字信号。 SPCE061A重要涉及输入/输出端口、定期/计数器、数/模转换、模/数转换、串行设备输入/输出、通用异步串行接口、低电压检测和复位等某些,且内置在线仿真电路ICE接口,较高解决速度使其可以迅速地解决复杂数字信号。本电梯模型就是采用此单片机进行程序编写和实现电梯运营控制。 Figure 1 凌阳单片机 2.1.2 单片机接口定义 A0 A8 A1 A9 A2 A10 A3 A11 A4 A12 A5 A13 A6 A14 A7 A15 B0 B8 B1 B9 B2 B10 B3 B11 B4 B12 B5 B13 B6 B14 B7 B15 实验用单片机接口定义如图,其中A口为输入,B口为输出。 各楼层按键 + — 电梯内按键 去一层 三层下 去二层 四层下 去三层 一层到达 去四层 二层到达 各楼层按键 一层上 三层到达 电梯内按键 二层上 四层到达 30 10 二层下 开门 实验单片机接口 三层上 关门 + — 各楼层按键灯 — + 电梯上下运营(1上0下) 三层下灯 电梯运营选通(1行0停) 四层下灯 开关门运营(1开0关) 开门到位 开关门选通(1行0禁) 关门到位 各楼层按键灯 一层上灯 二层上灯 40 20 二层下灯 三层上灯 — — Figure 2 凌阳单片机接口定义 2.1.3 I/O接口DATA控制命令表 单片机A口DATA控制命令表 A口 (信号输入) *P_IOA_Data 接口编号 电梯动作 0x0001 A0 去一层(内部按键) 0x0002 A1 去二层(内部按键) 0x0004 A2 去三层(内部按键) 0x0008 A3 去四层(内部按键) 0x0010 A4 一层上(外部按键) 0x0020 A5 二层上(外部按键) 0x0040 A6 二层下(外部按键) 0x0080 A7 三层上(外部按键) 0x0100 A8 三层下(外部按键) 0x0200 A9 四层下(外部按键) 0x0400 A10 一层到达(外部按键) 0x0800 A11 二层到达(外部按键) 0x1000 A12 三层到达(外部按键) 0x A13 四层到达(外部按键) 0x4000 A14 开门(内部按键) 0x8000 A15 关门(内部按键) 单片机A口DATA控制命令表 A口 (信号输入) *P_IOB_Data 接口编号 电梯动作 0x0001 B0 电梯上下运营(1上0下) 0x0002 B1 电梯运营选通(1行0停) 0x0004 B2 开关门运营(1开0关) 0x0008 B3 开关门选通(1行0禁) 0x0010 B4 一层上灯 0x0020 B5 二层上灯 0x0040 B6 二层下灯 0x0080 B7 三层上灯 0x0100 B8 三层下灯 0x0200 B9 四层下灯 0x0400 B10 开门到位 0x0800 B11 关门到位 0x1000 B12 数码管 0x B13 数码管 0x4000 B14 数码管 0x8000 B15 单片机接口属性设立: *P_IOA_Dir=0 *P_IOA_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_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输入值为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_Data输入值为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中定义了直观易懂单词来表达数字指令,这样使得编程过程更加容易直观,并且使得程序可读性更强,但是这种办法是在之前不断地尝试基本上才逐渐摸索出来,因而在日后编写程序中普遍用到了这种办法,而在开始训练阶段编写程序还往往是使用数字型指令,详细定义如下: #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 #define 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 #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 0x0200 #define at1 0x0400 #define at2 0x0800 #define at3 0x1000 #define at4 0x #endif 同步由于看门狗在程序中频繁浮现,故定义看门狗函数dog以便使用: #include "spce061A.h" #include "dingyi.h" void dog() { *P_Watchdog_Clear=0x0001; } 2.3 实验用电梯模型 Figure 3 实验用电梯模型 第三章 与电梯模型有关实验程序 3.1数码管持续显示 3.1.1 程序流程图 Figure 4 数码管持续显示流程图 3.1.2 功能简介 程序初始化完毕后,数码管从0持续变化到7,再从7持续变化到1。 3.1.3 功能实现过程 通过定义一种批示当前数码管显示数值变量,以该变量为循环条件,每次循环结束后变量自动加1,即批示下一种数码管显示数值,并且通过延时函数使得输出持续一段时间一边观测现象。(代码详见附录一) 3.1.4 问题解决及收获 该程序较为简朴,但是通过该程序咱们对软件运营、调试有了初步结识,对采集输入数据、设立输出命令基本办法结识更加清晰直观,同步对控制命令某些有了更加深刻理解。 3.2 外部按键灯持续闪烁 3.2.1 程序流程图 Figure 5 外部按键灯持续闪烁流程图 3.2.2 功能简介 程序初始化完毕后,外部按键灯持续闪烁,即从一层上灯到四层下等逐个亮,并不断循环。 3.2.3 功能实现过程 定义一种整形变量,通过该变量对6(外部按键一共有6个灯,可按顺序定义六个灯分别为0,1,2,3,4,5)取余构造判断应当哪一种灯亮,同步通过延时函数使得输出得到持续。(代码详见附录二) 3.2.4 问题解决及收获 这个程序思路非常好,但是在逻辑上需要通过取余这种办法实现,有些复杂,可以将代码直接描述为外部按键逐个灯亮这样也可以实现,咱们用这种思路写了一种让外部按键灯逐个亮且保持,直到所有灯都亮了之后,再逐个灯灭程序,代码见附录三,程序流程图如下: Figure 6 LED1to7流程图 3.3 键、灯、数码管 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 问题解决及收获 通过该程序,咱们对各种部件共同控制办法有了非常清晰结识,在61中只需要将需要共同控制某些数字指令相加即可形成共同协调控制。 3.4 外部按键上下行 3.4.1 程序流程图 Figure 8 外部按键上下行流程图 3.4.2 功能简介 程序运营后,当按下电梯外部按键后,电梯从当前层运营至目的层后停止,等待下一次输入。 3.4.3 功能实现过程 一方面程序定义了一种批示当前所在层变量at,以及一种批示目的层变量to,程序初始化完毕后,给变量at赋上相应层数值, 如若当前所在层为2层: if((t&0x0800)==0x0800) //判断当前所在层数,若当前所在层数为2层 { at=2; //给变量at赋当前层数值2 *P_Watchdog_Clear=0x0001; } 扫描外部按键与否按下,若按下,则对变量to赋上相应层数值, 如若三层上或三层下按键被按下: if(((t&0x0080)==0x0080)||((t&0x0100)==0x0100)) //若三层上、三层下按键被按//下 { to=3; //给变量to赋目的层数为3 *P_Watchdog_Clear=0x0001; } 进行目的层与当前层比较判断, 若目的层不不大于当前层,即to>at,那么电梯应向上运营,直到获取当前值at=to之后,电梯停止运营: if(to>at) { *P_IOB_Data=up; *P_Watchdog_Clear=0x0001; } 若目的层等于当前层,即to=at,那么电梯停止运营: if(to==at) { *P_IOB_Data=stop; *P_Watchdog_Clear=0x0001; } 若目的层不大于当前层,即to<at,那么电梯应向下运营,直到获取当前值at=to之后,电梯停止运营: if(to<at) { *P_IOB_Data=down; *P_Watchdog_Clear=0x0001; } 代码详见附录五 3.4.4 问题解决及收获 对数据采集系统以及程序运营方式有了更加深刻结识,系统输入数据有一某些是可以持续,而有一某些只是一种短暂脉冲,例如说像开门到位或者关门到位这样输入就可以是持续信号,但外部按键这样输入只能是一种脉冲信号,像这种信号就需要通过在这种脉冲信号产生瞬间给此外一种自己定义变量赋上有关信息值这样方式来保存这种信息;在加有*P_Watchdog_Clear=0x0001状况下,程序是以非常迅速度在一遍一遍走整个代码某些,在没有加看门狗状况下,程序在运营一段时间之后会从头初始化后继续运营。 3.5 计算器 3.5.1 程序流程图 Figure 9 计算器数字扫描函数流程图 Figure 10 计算器主函数流程图 3.5.2 功能简介 程序初始化完毕后,一层上按键按下后,电梯门打开,内部层数按键1、2、3、4分别相应数字1、2、3、4,四层上、三层上、三层下分别相应加法、减法和乘法,一方面按下内部两个按键分别相应数学符号先后两个数字,在电梯上部LED显示屏上显示按下数字,然后再按下加减乘符号,则在电梯上部LED显示屏上显示计算成果,若答案在显示范畴之内,即在0到7范畴对的显示,如果超过这个范畴,则01闪烁。 3.5.3 功能实现过程 程序初始化完毕后,通过扫描内部按键,获取两个数字作为即将进行数学计算输入,而这两个数字输入又靠一种标志位i实现,当清零按下之后或者在初始化完毕后还没有进行输入状况下,i标志位为0等待输入,当采集进来一种数据之后,i标志位自动加1,之后当i==1状况下在采集进来第二个数据,例如第一种按键按下内部按键1,则该某些代码如下: while (i==0) { if((IOA&btin1)==btin1) { num1=1; i++; IOB=0x1000; DelayMs(100); dog(); } 第二次按下内部按键3,则该某些代码如下: while (i==0) if((IOA&btin3)==btin3) { num2=3; i++; IOB=0x3000; dog(); } 之后在进行运算法则选取,分别有加、减、乘三种,在按下运算法则选取按键后,数码管显示最后答案,如果运算成果没有超过显示范畴话那么就正常显示答案,如若超过了正常显示范畴,那么这个时候浮现01闪烁以提示超过了运算范畴。代码详见附录六 3.5.4 问题解决及收获 计算器是咱们比较有特色一种程序,程序在实现上虽然比较简朴,但是让咱们对系统输入和输出理解更加深刻,特别是在协助咱们理解如何完毕按键实时扫描、并且记录有关数据这两点上起到非常重要作用,例如说对外部案件解决上,人手动按下外部按键时间要比CPU扫过整个程序时间来说长得多,这样如果没有延时函数作用并且又使用数组记录输入数据状况下,也许会导致数组溢出,从而达不到每次记录一种数据输入目。 3.6 密码锁 3.6.1程序流程图 Figure 11 密码锁流程图 3.6.2功能简介 程序初始化完毕后,若电梯门没关于上则电梯门关闭,等待外部按键输入,若密码输入对的则开门。 3.6.3实现功能过程 在这一某些咱们引入了两个数组对密码与否相似进行判断,一种是程序初始化完毕后对的密码,此外一种就是咱们输入密码,这个密码是通过当程序运营后,扫描外部按键状况,对外部按键进行顺序记录,最后对外部按键输入密码与真实密码进行逐位比对,若每一位均相似,那么执行开门动作,如果不相似,则不开门。代码详见附录七 3.6.4问题解决及收获 密码锁程序代码编写过程中咱们使用了数组进行数据采集和记录,因此这样咱们又遇到了之前在编写计算器程序中遇到问题,在按下按键之后数组溢出不能满足之前预定规定,因而咱们加入延时函数以改进之前程序,但是在这个过程中由于延时时间不是较好控制,因此也做了诸多次尝试之后才最后拟定了一种相对比较适当时间常数,基本上可以满足正常速度密码输入,从这一点上来说,通过编写密码锁程序让咱们对61单片机理解更加进一步细致,此前总会遇到编译通过但是运营之后总会浮现诸多问题并且咱们总是感觉无从下手这种状况,但是完毕密码锁程序之后,随着咱们对单片机理解更加进一步,在程序运营之后,咱们通过简朴地调试普通就可以找到在那些环节判断或者逻辑是存在不合理之处,使得咱们效率提高了诸多。 3.7逐级停自动开关门循环 3.7.1程序流程图 Figure 12 逐级停自动开关门循环main函数 Figure 13 逐级停自动开关门循环AtAndTo函数 Figure 14 逐级停自动开关门循环OpenAndClose函数 3.7.2功能简介 程序初始化完毕后,电梯自动完毕上下行以及开关门动作,不断循环。 3.7.3实现功能过程 在这个程序中咱们引入了一种批示上下行变量shangxia,一层到位之后令该变量为1,批示电梯之后运营状态为上行;当四层到位之后令该变量为0,批示电梯之后运营状态为下行。这样电梯在二、三层进行上下行判断时,只需判断当前批示电梯运营状态shangxia则可以保证电梯正常运营。代码详见附录八 3.7.4问题解决及收获 逐级停自动开关门程序在前面诸多程序铺垫下相对比较容易,不同点在于在这个程序中定义了一种批示电梯先前运动状态变量,从而控制电梯当前时刻上下行,这为之后电梯完整程序打下了一定基本。 3.8 可记录顺序逐级停自动开关门 3.8.1程序流程图 Figure 15 可记录顺序逐级停自动开关门 3.8.2功能简介 在程序初始化完毕后,一方面持续输入目的层数,点击拟定按键之后,电梯按照之前按键设定顺序自动运营,完毕上下行和相应开关门功能。 3.8.3实现功能过程 代码详见附录九 3.8.4问题解决及收获 这个程序在实现过程中咱们借鉴了密码锁有关经验,不同之处在与之前密码锁是有拟定个数输入,而当前可记录顺序逐级停开关门输入是不拟定个数,同步它还具备了清零和拟定选项,但是它是把之前密码匹配某些改为了电梯上下行和到达目的层之后自动开关门功能,因此可记录顺序逐级停自动开关门程序是继承了密码锁程序某些特点基本上,在功能上又有所拓展和创新。 3.9 外部按键电梯 3.9.1 主程序 3.9.1.1程序流程图 Figure 16 外部按键电梯主函数流程图 3.9.1.2功能过程 在程序初始化完毕后,进入AtAndTo函数,判断当前层数和目的层,之后进入UpAndDown函数通过对at与to大小比较,判断电梯上下行,并将电梯送至目的层,进入OpenAndClose函数后进行开关门操作。(代码详见附录十) 3.9.2 开关门模块 3.9.2.1程序流程图 Figure 17 外部按键电梯开关门函数流程图 3.9.2.2功能过程 当从主函数进入开关门模块后,电梯自动开门,开门到位后,如果按下内部关门按键,电梯关门。 3.9.2.3实现功能过程 当从主函数进入开关门模块后,一方面判断at和to值,如果两者相等且DoorEnable容许开门即为1,此时执行开门动作,当开门到位且内部关门按键按下后,电梯关门。 3.9.3 上下行模块 3.9.3.1程序流程图 Figure 18 外部按键电梯上下行函数流程图 3.9.3.2功能过程 程序初始化完毕后,若外部按键按下后,电梯运营到目的层。 3.9.3.3实现功能过程 这个函数定义了一种批示当前所在层变量at,以及一种批示目的层变量to,程序初始化完毕后,给变量at赋上相应层数值, 如若当前所在层为2层: if((t&0x0800)==0x0800) //判断当前所在层数,若当前所在层数为2层 { at=2; //给变量at赋当前层数值2 *P_Watchdog_Clear=0x0001; } 扫描外部按键与否按下,若按下,则对变量to赋上相应层数值, 如若三层上或三层下按键被按下: if(((t&0x0080)==0x0080)||((t&0x0100)==0x0100)) //若三层上、三层下按键被按下 { to=3; //给变量to赋目的层数为3 *P_Watchdog_Clear=0x0001; } 进行目的层与当前层比较判断, 若目的层不不大于当前层,即to>at,那么电梯应向上运营,直到获取当前值at=to之后,电梯停止运营: if(to>at) { *P_IOB_Data=up; *P_Watchdog_Clear=0x0001; } 若目的层等于当前层,即to=at,那么电梯停止运营: if(to==at) { *P_IOB_Data=stop; *P_Watchdog_Clear=0x0001; } 若目的层不大于当前层,即to<at,那么电梯应向下运营,直到获取当前值at=to之后,电梯停止运营: if(to<at) { *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灯显示当前运营所在层数。 3.9.4.4问题解决及收获 在程序调试过程中,咱们发现如果在电梯运营过程中,即电梯不处在某层到位状态时,若按下电梯外部按键后,电梯有也许会卡死在中间部位,并且导致电梯无法运营,在发现这样问题之后,咱们对程序进行了修改,针对上下行某些,咱们加入了使得电梯停止条件,如果电梯没有处在到位状态话就始终保持先前上行或下行状态不变,从而使得问题得到了有效解决。 第四章 电梯模型完整控制程序 4.1 完整控制程序(main函数) 4.1.1 功能阐明 Figure 21 电梯完整程序主函数 代码见附录十一 4.1.2 功能实现过程 在上下行优先级别判断上,咱们没有使用此前数组或者at和to大小判断方式,而是按照内外部层数按键个数分别定义了4个和6个变量,分别来批示目的层数,而何时选取上下行这一问题,举例如下: 如果电梯当前处在二层,一方面判断电梯之前运营方向,如果电梯之前运营方向向下,那么,若外部二层下按键或者内部二层按键被按下,电梯执行开门程序;若外部按键二层下被按下且外部按键一层上与内部一层按键均未被按下,电梯执行开门程序。 之后进行上下行判断,如果电梯外部按键一层上或者内部按键一层被按下,那么电梯下行至一层再做出判断;如果电梯外部按键一层上或者内部按键一层均未被按下,且三、四层按键至少有一种被按下之后,电梯上行至三层再做出判断。 如果电梯之前运营方向向上,那门,如果外部二层上或者内部二层按键被按下,电梯执行开门程序;若外部按键二层下被按下,且三、四层均没有按键被按下,那么电梯也执行开门程序。 之后进行上下行判断,如果电梯三、四层有至少一种按键被按下之后,电梯上行至三层再做出判断;如果电梯外部按键一层上被按下且三、四层都没有按键被按下状况先,电梯执行下行动作至一层再做出判断。 其他功能实现重要通过主函数调用其他函数实现,例如开关门函数,LED控制函数,外部按键扫描函数,获取目的层函数等等。 4.1.3 问题解决及收获 在电梯完整程序中,咱们变化了以往c文献过多特点,尽量把某些判断都放在了主函数中完毕,这也导致了主函数比较复杂。 4.2 按键扫描模块(getto函数) 4.2.1功能简介 程序初始化完毕后,随时扫描内外部按键从而获得目的层,并通过各层标志位将其记录下来。 4.2.2 问题解决及收获 本次使用获取目的层函数虽与以往相似,但是由于实际电梯会实时记录电梯内外按键状况,同步在目的层之后会把相应层数及方向清零并且对上下行做出判断,因此在获取目的层与及时清除已到达层这一问题上思路完全是崭新,而这某些重要是体当前主函数中,在此不做赘述。 4.3 当前层判断模块(getat函数) 4.3.1 功能简介 当程序初始化完毕后,实时拟定当前所在层数。 4.3.2 问题解决及收获 或许当前层数模块在前面使用也较多,但是在这一某些咱们加入了一种判断当前上部LED批示某些,即上部LED显示当前所在层数,并且通过此事state状态来判断LED显示某些箭头指向。 4.4 电梯门选通、禁止模块(DoorEnable函数) 4.4.1 功能简介 程序初始化完毕后,依照电梯当前状态判断此
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

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

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

关注我们 :微信公众号    抖音    微博    LOFTER 

客服