单片机控制电梯模型优秀教学教_第1页
单片机控制电梯模型优秀教学教_第2页
单片机控制电梯模型优秀教学教_第3页
单片机控制电梯模型优秀教学教_第4页
单片机控制电梯模型优秀教学教_第5页
已阅读5页,还剩63页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

个人收集整理 仅供参考学习单片机控制电梯模型教学教案:蒋龙2010年 6月 23日工程训练 中心1/68个人收集整理 仅供参考学习目录电梯模型4b5E2RGbCAP绪论5p1EanqFDPw1.课题背景与目地 5DXDiTa9E3d2.课题研究方法 5RTCrpUDGiT第一章电梯模型硬件设备 65PCzVD7HxA1.1实验单片机模型与接口定义 6jLBHrnAILg1.1.1实验单片机模型 6xHAQX74J0X1.1.2单片机接口定义 7LDAYtRyKfE1.1.3I/O接口DATA控制命令表 8Zzz6ZB2Ltk1.2电梯控制命令说明 10dvzfvkwMI1第二章灯控制程序 11rqyn14ZNXI2.1灯从下到上循环亮 11EmxvxOtOco2.1.1流程图 11SixE2yXPq52.1.2程序116ewMyirQFL2.1.3功能简介及实现过程 12kavU42VRUs2.2灯从下到上依次亮(后一个亮时前一个保持亮) 13y6v3ALoS892.2.1流程图 13M2ub6vSTnP2.2.2程序130YujCfmUCw2.2.3功能简介及实现过程 14eUts8ZQVRd2.3灯成组亮15sQsAEJkW5T2.3.1流程图 15GMsIasNXkA2.3.2程序15TIrRGchYzg2.3.3功能简介及实现过程 167EqZcWLZNX2.4数码显示17lzq7IGf02E2.4.1流程图17zvpgeqJ1hk2.4.2程序18NrpoJac3v12.4.3功能简介及实现过程181nowfTG4KI第三章按键与灯控制fjnFLDa5Zo193.1按电梯按键,相应灯亮并保持 19tfnNhnE6e53.1.1流程图19HbmVN777sL3.1.2程序20V7l4jRB8Hs3.1.3功能简介及实现过程2183lcPA59W93.1.4方法及建议21mZkklkzaaP3.2按电梯按键,相应灯亮但之前地灭掉 21AVktR43bpw3.2.1流程图 21ORjBnOwcEd2/68个人收集整理 仅供参考学习3.2.2程序222MiJTy0dTT3.2.2功能简介及实现过程23gIiSpiue7A3.2.3方法及建议23uEh0U1Yfmh3.3按电梯按键,数码管显示相应层数24IAg9qLsgBX3.3.1流程图24WwghWvVhPE3.3.2程序24asfpsfpi4k3.3.3功能简介及实现过程25ooeyYZTjj13.3.4方法及建议25BkeGuInkxI第四章电梯上下运行27PgdO0sRlMo4.1电梯三四层无开关门无层数显示循环运作 273cdXwckm154.1.1流程图27h8c52WOngM4.1.2程序28v4bdyGious4.1.3功能简介及实现过程29J0bm4qMpJ94.1.4方法及建议29XVauA9grYP4.2电梯三四层无开关门有层数显示循环运作 30bR9C6TJscw4.2.1流程图 30pN9LBDdtrd4.2.2程序31DJ8T7nHuGT4.2.3功能简介及实现过程 32QF81D7bvUA4.2.4方法及建议 324B7a9QFw9h第五章电梯开关门控制 33ix6iFA8xoX5.1程序控制电机实现简单开、关门 33wt6qbkCyDE5.1.1开门控制 33Kp5zH46zRk1)流程图33Yl4HdOAA612)程序33ch4PJx4BlI3)功能简介及实现过程34qd3YfhxCzo5.1.2关门控制 34E836L11DO51)流程图34S42ehLvE3M2)程序34501nNvZFis3)功能简介及实现过程35jW1viftGw95.2三四层有开关门循环运作 35xS0DOYWHLP5.2.1流程图35LOZMkIqI0w5.2.2程序35ZKZUQsUJed5.2.3功能简介及实现过程37dGY2mcoKtT5.2.4方法及建议38rCYbSWRLIA第六章按键控制开关门 38FyXjoFlMWh6.1按键电梯开门 38TuWrUpPObX6.1.1流程图 387qWAq9jPqE6.1.3功能简介及实现过程 39llVIWTNQFk2按键电梯关门39yhUQsDgRT16.2.1流程图39MdUZYnKS8I3/68个人收集整理 仅供参考学习6.2.2程序4009T7t6eTno6.2.3功能简介及实现过程 40e5TfZQIUB56.3按键电梯开关门 41s1SovAcVQM6.3.1流程图 41GXRw1kFW5s6.3.2程序41UTREx49Xj96.3.3功能简介及实现过程 428PQN3NDYyP第七章电梯完整程序流程图 42mLPVzx7ZNw7.1电梯自检程序 42AHP35hB02d7.1.1流程图 42NDOcB141gT7.1.2功能简介及实现过程 431zOk7Ly2vA7.1.3问题与解决 44fuNsDv23Kh7.2内外按键控制程序 44tqMB9ew4YX7.2.1程序流程图 44HmMJFY05dE7.2.2功能简介及实现过程 46ViLRaIt6sk7.2.3问题与解决 469eK0GsX7H17.3四层完整控制程序 47naK8ccr8VI7.3.1流程图 47B6JgIVV9ao7.3.2功能简介及实现过程 50P2IpeFpap57.3.3问题与解决 553YIxKpScDM7.4按键信号扫描模块 57gUHFg9mdSs7.4.1程序流程图57uQHOMTQe797.4.2功能简介及实现过程58IMGWiDkflP7.4.3问题与解决59WHF4OmOgAw7.5开关门模块 59aDFdk6hhPd7.5.1流程图 59ozElQQLi4T7.5.2功能简介及实现过程 60CvDtmAfjiA7.6电梯语音控制程序 61QrDCRkJkxh7.6.1程序流程图 614nCKn3dlMX7.6.2功能简介及实现过程 62ijCSTNGm0E第八章电梯模型制作 65vfB1pxanfk8.1制作背景与要求 65JbA9VhEou18.2制作图纸和工艺过程 65X7Ahr18pJI8.2.1电梯加工工艺卡 错误!未定义书签。 b3zqXLCqXo8.3取料加工65pZyytu5rc58.4组装65DVyGZezsrM第九章总结与致谢 66RQxPvY3tFs9.1总结错误!未定义书签。 5MxX1IxuU94/68个人收集整理 仅供参考学习绪论1.背景与目地据统计,我国在用电梯 34.6万多台,每年还以约 5-6万台地速度增长.电梯服务中国已有100多年地历史,而我国在用电梯数量地快速增长却发生在改革开放以后,目前我国电梯技术水平已与世界同步 .jIw5xs0v9P电梯模型将机械和电气两方面有机地结合起来,充分体现了机电结合地特点,并且可以在学生机电实验方面得到广泛地应用 .xEve2buwnw2.研究方法参照凌阳SPCE061A开发地相关资料,加深对控制电梯模型地单片机地了解 .进行61板地相关实验,掌握单片机实现基本功能地技术 .KAvmyVYxCd对单片机编写程序,以达到控制电梯模型地目地 .5/68.cstDApWA6A个人收集整理 仅供参考学习第一章电梯模型硬件设备1.1实验单片机模型与接口定义1.1.1实验单片机模型实验用单片机(图 2.1)为凌阳SPCE061A微控制器(简称 61板),是以凌阳16位单片机SPCE061A为核心地精简开发-仿真-实验板 .61板除了具备单片机最小系统电路外,还包括有电源电路、音频电路、复位电路等,采用电池供电,方便携带.Ywuu4FszRT图1.1凌阳SPCE061A单片机SPCE061A主要包括输入/输出端口、定时器/计数器、数/模转换、模/数转换、串行设备输入输出、通用异步串行接口、低电压监测和复位等部分,并且内置在线仿真电路ICE接口,较高地处理速度使其能够快速地处理复杂地数字信号 .本电梯模型就是采用此单片机进行程序编写与实现电梯地运行控制6/68个人收集整理 仅供参考学习1.1.2单片机接口定义实验单片机地接口定义如图 1.2,其中A口为输入,B口为输出.+去一层电梯 去二层内按 去三层键去四层一层上各楼 二层上层按 二层下键三层上—+电梯上下运行(1上/0下)电梯运行选通(1行/0停)开关门运行

A0A1A2A3A4A5A610A7B0B1

实验单片机接口

A8A9A10A11A12A13A14A15B8B9

30

各楼三层下层按四层下键一层到达二层到达三层到达四层到达开门 电梯关门 内按—键各楼三层下灯层按四层下灯键灯(1开/0关)开关门选通(1行/0禁)一层上灯各楼二层上灯层按 二层下灯键灯 三层上灯

B2B3B4B5B620B7

B10B11B12B13B14B15

40

开门到位关门到位— —图1.2单片机输入输出接口定义7/68个人收集整理 仅供参考学习1.1.3I/O接口DATA控制命令表表1.1是单片机A口Data控制命令表:表1.1*P_IOA_Data接口编号电梯动作0x0001A0去一层(内部按键)0x0002A1去二层(内部按键)0x0004A2去三层(内部按键)0x0008A3去四层(内部按键)0x0010A4一层上(外部按键)0x0020A5二层上(外部按键)0x0040A6二层下(外部按键)A口0x0080A7三层上(外部按键)(信号输入)0x0100A8三层下(外部按键)0x0200A9四层下(外部按键)0x0400A10一层到达0x0800A11二层到达0x1000A12三层到达0x2000A13四层到达0x4000A14开门(内部按键)0x8000A15关门(内部按键)8/68个人收集整理 仅供参考学习表1.2是单片机B口Data控制命令表:表1.2:*P_IOB_Data接口编号电梯动作0x0001B0电梯上下运行(1上0下)0x0002B1电梯运行选通(1行0停)0x0004B2开关门运行(1开0关)0x0008B3开关门选通(1行0禁)0x0010B4一层上灯0x0020B5二层上灯0x0040B6二层下灯B口0x0080B7三层上灯(信号输出)0x0100B8三层下灯0x0200B9四层下灯0x0400B10开门到位0x0800B11关门到位0x1000B120x2000B13数码管显示层数0x4000B140x8000B159/68个人收集整理 仅供参考学习单片机接口属性设置如下:*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;1.2电梯控制命令说明一层上按钮按下,*P_IOA_Data输入值为0x0010,使一层上按键灯亮起地命令为:*P_IOB_Data=0x0010,其他层按键灯不受影响.qotL69pBkh二层上按钮按下,*P_IOA_Data输入值为0x0020,使二层上按键灯亮起地命令为:*P_IOB_Data=0x0020,其他层按键灯不受影响.EksTCSTCzX二层下按钮按下,*P_IOA_Data输入值为0x0040,使二层下按键灯亮起地命令为:*P_IOB_Data=0x0040,其他层按键灯不受影响.Sgs28CnDOE三层上按钮按下,*P_IOA_Data输入值为0x0080,使三层上按键灯亮起地命令为:*P_IOB_Data=0x0080,其他层按键灯不受影响.6craEmRE2k三层下按钮按下,*P_IOA_Data输入值为0x0100,使三层下按键灯亮起地命令为:*P_IOB_Data=0x0100,其他层按键灯不受影响.k8qia6lFh1四层下按钮按下,*P_IOA_Data输入值为0x0200,使四层下按键灯亮起地命令为:*P_IOB_Data=0x0200,其他层按键灯不受影响.y3qrGQOGwI电梯内部开门按钮按下,*P_IOA_Data输入值为0x4000,使电梯开门地命令为:*P_IOB_Data=0x000c,电梯执行开门动作.MZpzcAiHKo10/68个人收集整理 仅供参考学习电梯内部关门按钮按下,*P_IOA_Data输入值为0x8000,使电梯关门地命令为:*P_IOB_Data=0x0008,电梯执行关门动作.0VoHIjMIZ5第二章灯控制程序2.1灯从下到上循环亮2.1.1流程图开始系统初始化输出单个灯控制信号相应地灯亮起2.1.2程序#include<spce061A.h>#defineD10x0010#defineD200x0040#defineD210x0020#defineD300x0100#defineD310x0080#defineD40x0200voiddly(unsignedintundly){intm;11/68个人收集整理 仅供参考学习for(m=0;m<undly;m++){intn;for(n=0;n<undly;n++){n=n;}}}voidmain(void){inti;intshunxu[]={D1,D20,D21,D30,D31,D4};*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){for(i=0;i<=5;i++){*P_IOB_Data=shunxu[i];dly(100);*P_Watchdog_Clear=0x0001;}}}2.1.3功能简介及实现过程本程序能实现是外部按键地灯从下到上依次亮起, 在一个灯亮起地同时前一个已经亮起地灯灭掉,并且可以调节相邻两个灯亮起地时间间隔出地功能 .本程序采用宏定义功能,将各个灯地端口地址定义为一个简单地代码, 最后在主程序中将代码全部放入一个数组中, 这样可以方便地使用 for循环语句,是程序看起来简单明了.在这一段程序中还有一个时间延迟子程序,通过改变数值大小从而12/68个人收集整理 仅供参考学习实现改变相邻灯亮起地时间间隔地功能 .dRoQe3gJeM2.2灯从下到上依次亮(后一个亮时前一个保持亮)2.2.1流程图开始系统初始化输出灯控制信号相应地灯亮起输出另一个灯控信号相应灯亮起,之前灯灭掉2.2.2程序#include<spce061A.h>#defineD10x0010#defineD200x0050#defineD210x0070#defineD300x0170#defineD310x01f013/68个人收集整理 仅供参考学习#defineD40x03f0voiddly(unsignedintundly){intm;for(m=0;m<undly;m++){intn;for(n=0;n<undly;n++){n=n;}}}voidmain(void){inti;intshunxu[]={0,D1,D20,D21,D30,D31,D4};*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){for(i=0;i<=6;i++){*P_IOB_Data=shunxu[i];dly(100);*P_Watchdog_Clear=0x0001;}}}2.2.3功能简介及实现过程本程序能实现地功能是外部按键地灯从下到上依次亮起, 在一个灯亮起地同时前一个已经亮起地灯仍然保持亮, 知道全部地灯都亮起后再同时灭掉, 而后开始下一个循环.并且可以调节相邻两个灯亮起地时间间隔出地功能 .本程序同样采14/68个人收集整理 仅供参考学习用采用宏定义功能,将同时亮着地各个灯地端口地址定义在一个一个简单地代码内,最后在主程序中将代码全部放入一个数组中, 这样可以方便地使用 for循环语句,是程序看起来简单明了 .在这一段程序中还有一个时间延迟子程序,通过改变数值大小从而实现改变相邻灯亮起地时间间隔地功能 .rNnYJNKKts2.3灯成组亮2.3.1流程图开始系统初始化同时输出多个灯控制信号相应地灯亮起2.3.2程序#include<spce061A.h>#defineD10x0050#defineD200x0120#defineD210x0280#defineD300x0070#defineD310x0380#defineD40x03f0voiddly(unsignedintundly){intm;for(m=0;m<undly;m++)15/68个人收集整理 仅供参考学习{intn;for(n=0;n<undly;n++){n=n;}}}voidmain(void){inti;intoutput=0;intt=0;intshunxu[]={0,D1,D20,D21,D30,D31,D4};*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){for(i=0;i<=6;i++){*P_IOB_Data=shunxu[i];dly(100);*P_Watchdog_Clear=0x0001;}}}2.3.3功能简介及实现过程本程序能实现地功能是一层上和二层下地灯同时亮, 然后二层上和三层下地灯同时亮,然后三层上和四层下地灯同时亮, 然后一层上、二层下和三层下地灯同时亮,然后二层上、二层下和三层下地灯同时亮,然后所有地灯全部亮起,而后所有灯灭掉开始新一轮循环 .在一组灯亮起地同时前一组已经亮起地灯灭掉,16/68个人收集整理 仅供参考学习直到最后一组灯都亮起后再同时灭掉,而后开始下一个循环 .并且可以调节相邻两个灯亮起地时间间隔出地功能 .本程序同样采用采用宏定义功能,将同时亮着地一组灯地各个端口地址定义在一个一个简单地代码内, 最后在主程序中将代码全部放入一个数组中,这样可以方便地使用 for循环语句,是程序看起来简单明了.在这一段程序中还有一个时间延迟子程序,通过改变数值大小从而实现改变相邻灯亮起地时间间隔地功能.FJn6fxdLH9现在可以看出以上三个灯控制程序基本上是一样地,只是在宏定义语句中改变了每个代码所代表地端口地址值,其它地主程序语句完全一样.这也反映出了使用宏定义语句地程序地优越性.当然也可以采用其它语句来实现上述功能,比如采用while循环控制语句内嵌控制,每次只控制一个灯地亮或者灭,然后使用“或”逻辑语句实现前后亮灯地独立性或者实现灯地成组亮.这样地程序看起来简单明了,便于理解,但是程序过于冗杂.TFmfLhHMWP2.4数码显示2.4.1流程图开始系统初始化输出数字显示信号17/68个人收集整理 仅供参考学习显示相应地数字2.4.2程序#include<spce061A.h>voidmain(void){*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;}}2.4.3功能简介及实现过程本程序实现地功能非常简单,就是让数码管显示一个数字 2.实现地过程也比较简单,只需将要显示地楼层数输入到相应地端口地址内就行了 .7Blnh0bNbw18/68个人收集整理 仅供参考学习第三章按键与灯控制3.1按电梯按键,相应灯亮并保持3.1.1流程图开始系统初始化按键信号扫描N是否有按键信号请求Y相应按键灯亮19/68个人收集整理 仅供参考学习3.1.2程序#include<spce061A.h>voidmain(){intinput,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){t=*P_IOA_Data;if((t&0x0010)==0x0010){*P_IOB_Data=*P_IOB_Data|0x0010;*P_Watchdog_Clear=0x0001;}if((t&0x0020)==0x0020){*P_IOB_Data=*P_IOB_Data|0x0020;*P_Watchdog_Clear=0x0001;}if((t&0x0040)==0x0040){*P_IOB_Data=*P_IOB_Data|0x0040;*P_Watchdog_Clear=0x0001;}if((t&0x0080)==0x0080){*P_IOB_Data=*P_IOB_Data|0x0080;*P_Watchdog_Clear=0x0001;}if((t&0x0100)==0x0100){*P_IOB_Data=*P_IOB_Data|0x0100;*P_Watchdog_Clear=0x0001;}if((t&0x0200)==0x0200){*P_IOB_Data=*P_IOB_Data|0x0200;*P_Watchdog_Clear=0x0001;}*P_Watchdog_Clear=0x0001;}}20/68个人收集整理 仅供参考学习3.1.3功能简介及实现过程通过按电梯外部按键,相应按键会亮灯并保持住 .本程序通过对系统地初始化之后,识别电梯外部按键,即将 A口定义为相应地按键层数,然后 B口得到相应地信号,使电梯按键灯亮起 .例如:按电梯2层上按键,则对应地 A口即为*P_IOA_Data=0x0020,此时B口*P_IOB_Data=0x0020,即二层上按键亮起;再按四层下按键,则四层下按键灯亮起,此时二层上和四层下灯都亮着, 依次类推.这里涉及到“或语句”,即在执行下一条命令时,不会破坏之前地定义值,如之前地B口为*P_IOB_Data=0x0100,即三层下灯亮,如果接下来按三层上键,则*P_IOB_Data=*P_IOB_Data|0x0080,即此时*P_IOB_Data=0x01800,三层上键和下键地灯都亮.lxlvNKFOpd3.1.4方法及建议此程序地方法基础即按键控制灯亮,通过把按键信号传给 A口,经单片机识别之后执行 B口命令,则相应地灯亮起,编程时注意不要把相应地端口定义错,并且注意看门狗地使用,以免程序自动跳出,最重要地是对“或”语句地理解和使用.ztkEju9PET3.2按电梯按键,相应灯亮但之前地灭掉3.2.1流程图开始21/68个人收集整理 仅供参考学习系统初始化按键信号扫描N是否有按键信号请求Y相应按键亮灯,之前地灯灭3.2.2程序#include<spce061A.h>voidmain(){intinput,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){t=*P_IOA_Data;if((t&0x0010)==0x0010){*P_IOB_Data=0x0010;*P_Watchdog_Clear=0x0001;}if((t&0x0020)==0x0020){*P_IOB_Data=0x0020;*P_Watchdog_Clear=0x0001;}if((t&0x0040)==0x0040){*P_IOB_Data=0x0040;*P_Watchdog_Clear=0x0001;}if((t&0x0080)==0x0080){*P_IOB_Data=0x0080;22/68个人收集整理 仅供参考学习*P_Watchdog_Clear=0x0001;}if((t&0x0100)==0x0100){*P_IOB_Data=0x0100;*P_Watchdog_Clear=0x0001;}if((t&0x0200)==0x0200){*P_IOB_Data=0x0200;*P_Watchdog_Clear=0x0001;}*P_Watchdog_Clear=0x0001;}}3.2.2功能简介及实现过程通过按电梯外部按键,相应按键会亮灯 .本程序通过对系统地初始化之后,识别电梯外部按键,即将 A口定义为相应地按键层数,然后 B口得到相应地信号,使电梯按键灯亮起 .例如:按电梯 2 层上按键,则对应地 A口即为*P_IOA_Data=0x0020,此时B口*P_IOB_Data=0x0020,即二层上按键亮起;再按四层下按键,则四层下按键灯亮起,此时二层灯会灭掉,这里涉及到“与语句”,注意体会它与“或语句”地区别和使用方法,如之前地 B 口为*P_IOB_Data=0x0100,即三层下灯亮,如果接下来按三层上键,则*P_IOB_Data=*P_IOB_Data|0x0080,即此时*P_IOB_Data=0x01800,三层上键和下键地灯都亮,再执行“与语句 “*P_IOB_Data=*P_IOB_Data&0x0080,则此时*P_IOB_Data=0x0080,即只有三层上灯亮,三层下灯将灭掉 .NpjMPeCQTA3.2.3方法及建议此处涉及到地“或语句”和“与语句”在电梯地程序中经常用到,要认真体会其含义和用法才能运用自如,这就需要在编程中练习使用,以达到运用自如.1ljUlY6R8h23/68个人收集整理 仅供参考学习3.3按电梯按键,数码管显示相应层数3.3.1流程图开始系统初始化按键信号扫描N是否有按键信号请求Y显示相应地楼层数3.3.2程序#include<spce061A.h>voidmain(){intinput,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1)24/68个人收集整理 仅供参考学习{t=*P_IOA_Data;if((t&0x0010)==0x0010){*P_IOB_Data=0x1000;*P_Watchdog_Clear=0x0001;}if((t&0x0020)==0x0020){*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;}if((t&0x0040)==0x0040){*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;}if((t&0x0080)==0x0080){*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;}if((t&0x0100)==0x0100){*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;}if((t&0x0200)==0x0200){*P_IOB_Data=0x4000;*P_Watchdog_Clear=0x0001;}*P_Watchdog_Clear=0x0001;}}3.3.3功能简介及实现过程通过按电梯外部按键,数码管能显示相应地层数 .本程序通过对系统地初始化之后,识别电梯外部按键,即将 A口定义为相应地按键层数,然后 B口得到相应地信号,使数码管显示相应地层数 .例如:按电梯 2层上按键,则对应地 A口即为*P_IOA_Data=0x0020,此时B口*P_IOB_Data=0x2000,即数码管显示 2层.fhi3RIASmX3.3.4方法及建议此程序相对基础,对单片机地接口定义地理解很有帮助, 编辑时注意接口对应即可,对程序做一些自己地改动以实现新地功能,可练习对单片机地灵活使25/68个人收集整理 仅供参考学习用.scibnr4TBE26/68个人收集整理 仅供参考学习第四章电梯上下运行4.1电梯三四层无开关门无层数显示循环运作4.1.1流程图开始系统初始化Y是否有关门到位信号N关门电梯上行N是否四层到达Y暂停电梯下行N是否三层到达Y暂停27/68个人收集整理 仅供参考学习4.1.2程序#include<spce061A.h>voidmain(){inti,j,p;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0x0300;*P_IOB_Attrib=0x0300;*P_IOB_Data=0;while(1){p=*P_IOB_Data;if((p&0x0800)==0x0800)break;*P_IOB_Data=*P_IOB_Data|0x0008;}*P_IOB_Data=0x0003;while(1){if(*P_IOA_Data==0x2000){for(i=0;i<300;i++){for(j=0;j<i;j++){*P_Watchdog_Clear=0x0001;}}break;}}while(1){*P_IOB_Data=0x0002;if(*P_IOA_Data==0x1000){*P_IOB_Data=0x0000;*P_Watchdog_Clear=0x0001;for(i=0;i<300;i++){for(j=0;j<i;j++)28/68个人收集整理 仅供参考学习{*P_Watchdog_Clear=0x0001;}}break;}*P_Watchdog_Clear=0x0001;}*P_IOB_Data=0x0003;}4.1.3功能简介及实现过程此程序功能为电梯在两层之间循环运作, 主要应用了电梯上下运行语句和判断是否到达某层语句.首先初始化程序,然后判断是否关门到位,因为只有在关门到位地时候才可以使电梯上下运行,语句 *P_IOB_Data=0x0003为电梯上行控制语句,当电梯到达四层时,判断是否到达,即是否满足*P_IOA_Data==0x2000,若到达,可以延迟一段时间(注:此延迟时间可以自己控制其大小)然后下行,循环下去.G8hjTbyUQk4.1.4方法及建议本程序主要注意判断语句和运行语句地逻辑顺序及综合运用问题, 在实际操作中常会遇到电梯停止运行问题, 此时应首先看一下是否有加看门狗, 以免程序自动跳出,另外在调试过程中也可进行单步运行, 检查程序运行到哪一步,帮助我们检查.U4gspV1V4129/68个人收集整理 仅供参考学习4.2电梯三四层无开关门有层数显示循环运作4.2.1流程图开始系统初始化是否有关门到位信号N关门

Y电梯上行N是否四层到达Y暂停数码管显示层数电梯下行N是否三层到达30/68个人收集整理 仅供参考学习Y暂停4.2.2程序#include<spce061A.h>voidmain(){inti,j,p;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){p=*P_IOB_Data;if((p&0x0800)==0x0800)break;*P_IOB_Data=*P_IOB_Data|0x0008;}*P_IOB_Data=0x3003;while(1){if(*P_IOA_Data==0x2000){*P_IOB_Data=0x4000;for(i=0;i<300;i++){for(j=0;j<i;j++){*P_Watchdog_Clear=0x0001;}}break;}}while(1){31/68个人收集整理 仅供参考学习*P_IOB_Data=0x4002;if(*P_IOA_Data==0x1000){*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;for(i=0;i<300;i++){for(j=0;j<i;j++){*P_Watchdog_Clear=0x0001;}}break;}*P_Watchdog_Clear=0x0001;}*P_IOB_Data=0x3003;}4.2.3功能简介及实现过程此程序比上一个只是多了一个灯显示地过程, 及到相应层数数码管显示其楼层数,如电梯运行到四层,则数码管显示四,此功能使电梯更加人性化 .编程时只要结合数码管地控制语句即可完成,不做赘述 .80gAVFvXjI4.2.4方法及建议该程序涉及到两种功能地结合, 虽然看似简单,但要注意衔接问题和相容问题,因此在编程过程中注意体会, 为以后更加复杂地程序编写做好准备, 打好基础.mWfIqpZYyo32/68个人收集整理 仅供参考学习第五章电梯开关门控制5.1程序控制电机实现简单开、关门5.1.1开门控制(1)流程图开始系统初始化输入开门信号开门(2)程序#include<spce061A.h>voidmain(){*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;33/68个人收集整理 仅供参考学习while(1){*P_IOB_Data=0x000c;}}(3)功能简介及实现过程此程序主要是熟悉单片机对电机开门地控制,使用 *P_IOB_Data=0x000c语句实现电梯开门.5.1.2关门控制(1)流程图开始系统初始化输入关门信号关门(2)程序#include<spce061A.h>voidmain(){*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;34/68个人收集整理 仅供参考学习*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){*P_IOB_Data=0x0008;}}(3)功能简介及实现过程此程序主要是熟悉单片机对电机关门地控制,使用 *P_IOB_Data=0x0008语句实现电梯关门.5.2三四层有开关门循环运作5.2.1流程图5.2.2程序#include<spce061A.h>voidopen();voidmain(){intp,i,j;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){p=*P_IOB_Data;if((p&0x0800)==0x0800)break;*P_IOB_Data=*P_IOB_Data|0x0008;}35/68个人收集整理 仅供参考学习*P_IOB_Data=0x3003;while(1){while(1){if(*P_IOA_Data==0x2000){*P_Watchdog_Clear=0x0001;break;}}*P_IOB_Data=0x4000;open();while(1){*P_IOB_Data=0x4002;if(*P_IOA_Data==0x1000){*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;break;}*P_Watchdog_Clear=0x0001;}open();*P_IOB_Data=0x3003;*P_Watchdog_Clear=0x0001;}}voidopen(){intk;intr_open=0;intr_close=0;*P_IOB_Data=*P_IOB_Data|0x000c;while(1){scan1:k=*P_IOB_Data;r_open=k&0x0400;if(r_open==0x0400){36/68个人收集整理 仅供参考学习k=k&0xfff0;*P_IOB_Data=k;}else{*P_Watchdog_Clear=0x0001;gotoscan1;}break;}k=0;*P_IOB_Data=*P_IOB_Data|0x0008;while(1){scan2:k=*P_IOB_Data;r_close=k&0x0800;if(r_close==0x0800){k=k&0xfff0;*P_IOB_Data=k;}else{*P_Watchdog_Clear=0x0001;gotoscan2;}break;}}5.2.3功能简介及实现过程本程序综合了电机开关门和上下运行地功能, 显得稍微复杂了一点,但其思路较为清晰.在初始化系统之后,判断电机是否关门到位,因为只要涉及到电梯上下运行地时候,都要判断是否有关门到位,若关门到位,则电梯会触发到位地开关,这时电梯可以运行 .之后电梯开始运行,到达某层之后,也会触发一个到37/68个人收集整理 仅供参考学习达某层到位地开关,判断成功之后,电梯可以实现开关门动作,之后继续运行.ASeRW8tZM55.2.4方法及建议此程序循环内涉及到子程序地问题, 即如果经常用到开关门动作,可以将开关门程序单独编程一个子程序, 以方便使用,只要在程序开始定义该子程序, 用到时可直接引用 open()子程序.OOeZsSX01M第六章按键控制开关门6.1按键电梯开门6.1.1流程图开始系统初始化扫描信号N是否有开门按键信号输入Y开门38/68个人收集整理 仅供参考学习6.1.2程序#include<spce061A.h>voidmain(){*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){if((*P_IOA_Data&0x0080)==0x0080)*P_IOB_Data=0x000c;*P_Watchdog_Clear=0x0001;}}6.1.3功能简介及实现过程本程序功能是按三层上键实现电梯开门 .该程序主要帮助理解按键对电机开门地控制,当按到电梯某按键时,信号会传入单片机地 A口,经过程序逻辑 B口得到相应命令,实现开门动作 .2Kd7YCq1gs2按键电梯关门6.2.1流程图开始系统初始化扫描信号 39/68个人收集整理 仅供参考学习N是否有关门按键信号输入Y关门6.2.2程序#include<spce061A.h>voidmain(){*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){if((*P_IOA_Data&0x0080)==0x0080)*P_IOB_Data=0x0008;*P_Watchdog_Clear=0x0001;}}6.2.3功能简介及实现过程此程序与前一个开门相似,只是实现开关门地命令不一样 .此处控制开关门地按键可以自己设置,只要找到对应地接口即可实现预期地效果 .gGcgumU2v940/68个人收集整理 仅供参考学习6.3按键电梯开关门6.3.1流程图开始系统初始化扫描信号N是否有开关门按键信号输Y开/关门6.3.2程序#include<spce061A.h>voidmain(){*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1){if((*P_IOA_Data&0x0040)==0x0040){*P_IOB_Data=0x000c;}41/68个人收集整理 仅供参考学习*P_Watchdog_Clear=0x0001;if((*P_IOA_Data&0x0080)==0x0080){*P_IOB_Data=0x0008;}*P_Watchdog_Clear=0x0001;}}6.3.3功能简介及实现过程本程序是对上面两个小功能地综合, 即先按一个按键,电梯会自动实现开门动作,然后等待下一个按键信号以实现关门动作 .另外注意看门狗地适当加入,以免程序自动跳出.uCco06o3JP第七章电梯完整程序流程图7.1电梯自检程序7.1.1流程图

开始系统初始化关门到位信号扫描电梯关门 N 是否有信号Y电梯向下运行到达一层全部灯亮起电梯向上运行N是否有到达信号相应灯灭掉电梯停止42/68个人收集整理 仅供参考学习NIybwwQS4Yw电梯开关门子程序Y是否到达四层电梯向下运行是否有到达信号相应灯灭掉电梯停止电梯开关门子程序是否到达一层

NN7.1.2功能简介及实现过程通过对电梯每一层灯灭与楼层开关门地循环检测,能准确实现真实环境中“电梯到达→楼层对应上 /下按键灯灭→楼层开关门”地功能 .VubF2zm5dd系统初始化后,开始进行关门信号扫描,确认电梯已经关门后(否则进行关门操作),检测输入信号.如果有输入信号,则电梯运行到一层并且所有灯亮,然后从一层开始向上运行,每到达一层后,该层对应按键灯灭并且执行开关门操作 .关门到位后,继续运行到下一层进行下一次循环操作 .如此往复,直至电梯从一层到达四层再回到一层时,一次自检循环结束,若中途未出现异常,则说明该程序能成功实现真实环境中电梯地开关门与按键灯亮 /灭地功能.9paNyjP6rT43/68个人收集整理 仅供参考学习7.1.3问题与解决在编写自检程序地过程中我们遇到这样地问题: 电梯运行时,可以实现电梯到达某层后某层灯灭,但是开关门时则所有灯全亮,不满足设计要求 .回到程序中检查,通过在开关门函数里加一个参数, 解决了这个问题并且完善了程序, 使灯再开关门时也可以熄灭 .nl9V43j7GA7.2内外按键控制程序7.2.1程序流程图开始系统初始化关门到位信号扫描N电梯关门 是否有信号Y电梯向下运行到达最近地一层44/68个人收集整理 仅供参考学习检查按键按键层大于目前所在楼层NBh94ANN8VhY按键层小于目前所在楼层电梯向上运行YPd8c6xh9aX电梯向上运行到达按键层N397kCgKaoE电梯开关门字程序45/68个人收集整理 仅供参考学习7.2.2功能简介及实现过程通过按键信号和楼层信号地比较,实现电梯向上或向下地运行并进行开关门操作.系统初始化后,开始进行关门信号扫描,确认电梯已经关门后(否则进行关门操作),检测输入信号.如果有输入信号,则自动执行 *P_IOB_Data=0x0002使电梯向下运行,在运行过程中,每到达一层,利用 switch数组检测该层是否有按键信号.当按键层低于当前楼层时,电梯向下运行到达该楼层并执行开关门操作;当按键层高于当前楼层时,电梯向上运行到达该楼层并执行开关门操作 .最终通过内外按键控制实现到达目标楼层 .h57t70ebDk7.2.3问题与解决在编写这个程序地过程中,我们刚开始不知对按键地输入记录该如何进行 .经过讨论,我们决定用数组把按键分组,进行记录问题得到解决 .同时,我们还解决了以前按键延迟地问题,给 keyscan子函数外加了一个循环,实现了内部开关门按键随意控制地功能.v16BDKIcS146/68个人收集整理 仅供参考学习7.3四层完整控制程序7.3.1流程图47/68电梯关门子流程

个人收集整理 仅供参考学习开始系统初始化关门到位信号扫描是否关门到位楼层到达信号扫描是否有信号当前所在楼层状态检查子程序按键扫描子程序NJX6J9ucd6I是否有信号电梯所在层或以上 N层是否有信号电梯所在层或以下层是否有信号B子流程48/68子流程:NY

个人收集整理 仅供参考学习标志置为下电梯向下运行YXT5SFeGelo检查目标层与所在层之置信目标楼层间是否有输入信号aP40bY9fA5检查是否到达目标楼层Y灭相应灯运行开关门子程序按键扫描子程序电梯所在层或以下NoL48HHDgOM层是否有信号B子流程49/68程序:NY

个人收集整理 仅供参考学习标志置为上电梯向上运行YCH3hdr7h3s检查目标层与所在层之置信目标楼层间是否有输入信号QC2pJbBii9检查是否到达目标楼层Y灭相应灯运行开关门子程序按键扫描子程序电梯所在层或以上N4y2xfV5jxP层是否有信号A子流程7.3.2功能简介及实现过程完整地电梯控制程序分为五个模块: 主程序模块;按键信号扫描模块;开关门模块;楼层状态检查模块;内部按键扫描模块 .除主程序模块外,其他模块均作为主程序地函数在主程序运行过程中进行调用 .具体各模块功能说明如50/68个人收集整理 仅供参考学习下.iu1GLFylLw1.程序开始时系统进行初始化,首先检查电梯门是否关闭,如果没有关门到位信号,则执行关门动作,并扫描关门到位信号,得到信号后跳出循环,具体实现程序如下:wq1Oho2m0dm=*P_IOB_Data&0x800; //隔离关门到位信号while(m!=0x800) //检查关门到位{*P_IOB_Data=0xfff8; //关门动作*P_Watchdog_Clear=0x0001;j=*P_IOB_Data&0x0800;if(j==0x0800)break; //关门到位}2.电梯系统检查此时电梯地位置状态, 查询是否有楼层到达信号,如果没有,说明电梯现在停在两层中间, 则电梯向下运行,并扫描楼层到达信号,收到信号反馈后电梯停止运行.具体实现程序如下:Km0WN8wnfTwhile(1) //电梯运行{*P_IOB_Data=0x0002; //电梯向下运行*P_Watchdog_Clear=0x0001;floor=*P_IOA_Data&0x3c00; //隔离当前楼层状态k=1;if(floor==0x0400|floor==0x0800|floor==0x1000|floor==0x2000)*P_IOB_Data=0x0800;YiZ5iS0otAk=*P_IOB_Data&0x000f;if(k==0x0000)break; //电梯到达某层后停下}3.电梯自检及初始化结束后,开始扫描输入信号并正式运行 .接收到输入信号后,首先判断目标楼层与所在楼层地位置关系 .如果目标楼层大于等于所在楼层,51/68个人收集整理 仅供参考学习标志置为上,进入上标志循环 .如果目标楼层小于所在楼层,标志置为下,进入下标志循环.具体实现程序如下:ceZdOCupIhif((up[1][0]>=floor)|(up[1][1]>=floor)||(up[1][2]>=floor)|(floor<=down[1][1])||(floor<=down[1][2])|(floor<=down[1][2])||(floor<=inside[1][1])|(floor<=inside[1][2])||(floor<=inside[1][3])){*P_IOB_Data=0x0003|light;//如果所在楼层以上地楼层有按键 ,电梯向上运行flag=*P_IOB_Data&0x0003; //标志置为上break;}if(((down[1][0]<=floor)&down[1][0]!=0)||((down[1][1]<floor)&down[1][1]!=0)||((down[1][2]<floor)&down[1][2]!=0)||((up[1][0]<floor)&up[1][0]!=0)||((up[1][1]<floor)&up[1][1]!=0)||((floor>=inside[1][0])&inside[1][0]!=0)||((floor>inside[1][1])&inside[1][1]!=0)||((floor>inside[1][2])&inside[1][2]!=0)){*P_IOB_Data=0x0002|light;//如果所在楼层以下地楼层有按键 ,电梯向下运行flag=*P_IOB_Data&0x0002; //标志置为下break;}}4.进入上标志循环后,系统对按键进行判断,共分为五个判断部分,分别是:二层上按钮按下或者二层内按钮按下; 三层上按钮按下或者三层内按钮按下; 四层按钮按下或者四层内按钮按下;二层向下按钮按下且其他层向上按钮没有按下;三层向下按钮按下且其他层向上按钮没有按下 .在每个判断部分中,进行电梯地运行以及开关门、灭灯等,并且在运行过程中实时进行按键扫描, 如果按键信号52/68个人收集整理 仅供参考学习满足跳出条件,则跳出此部分地运行,进入上标志循环中地其他部分 .下面仅以一个部分地程序进行说明,其他部分原理相同,详见附件 6.paYlkmXqXXwhile(flag==0x0003) //标志为上,判断{while((floor<=up[1][2])|(floor<=inside[1][3]))//四层按钮按下或者四层内按钮按下{keyscan();floorscan();*P_IOB_Data=0x0003|light;*P_Watchdog_Clear=0x0001;k=0;j=0;k=*P_IOA_Data&up[1][2];j=*P_IOA_Data&inside[1][3];if(floor<up[1][0]|floor<up[1][1]|floor<inside[1][1]|floor<inside[1][2])break;D6XuQ6rrbE/电梯向4层运行过程中如果按2、3层上按钮或者2、3层内按钮,则跳出,走到2、3层循环if((k==up[1][2])&(k!=0)||(j==inside[1][3])&(j!=0)){putoff=0xfdff;*P_IOB_Data=0x0000|light&putoff; //灭4层灯openclose();up[1][2]=0;up[2][2]=0;inside[1][3]=0;break;}}向上地部分运行完之后,进行按键扫描,判断标志是否还处于向上状态,如果向上没有输入了,则跳出上标志循环,标志置下,进入下标志循环.判断语句如下:R2XCmPVsqkif((floor>up[1][0])&(floor>up[1][1])&(floor>up[1][2])&(floor>inside[1][1])53/68个人收集整理 仅供参考学习&(floor>inside[1][2])&(floor>inside[1][3]))flag=0x0002; //如果向上没有输入,标志置下,进入向下循环进入下标志循环后,同上标志循环,系统对按键进行判断,共分为五个判断部分,分别是:三层下按钮按下或者三层内按钮按下;二层下按钮按下或者二层内按钮按下;一层按钮按下或者一层内按钮按下;三层向上按钮按下且其他层向下按钮没有按下;二层向上按钮按下且其他层向下按钮没有按下 .在每个判断部分中,进行电梯地运行以及开关门、 灭灯等,并且在运行过程中实时进行按键扫描,如果按键信号满足跳出条件, 则跳出此部分地运行,进入下标志循环中地其他部分.下面仅以一个部分地程序进行说明,其他部分原理相同,详见附件6.5YWKSzptF1while(flag==0x0002) //标志为下,判断{while((floor>=down[1][0])&(down[1][0]!=0)||(floor>=inside[1][0])&(inside[1][0]!=0))//一层按钮按下或者一层内按钮按下{keyscan();floorscan();*P_IOB_Data=0x0002|light;*P_Watchdog_Clear=0x0001;k=0;j=0;k=*P_IOA_Data&down[1][0];j=*P_IOA_Data&inside[1][0];if((floor>down[1][2])&(down[1][2]!=0)||(floor>down[1][1])&(down[1][1]!=0)||(floor>inside[1][2])&(inside[1][2]!=0)||(floor>inside[1][1])&(inside[1][1]!=0))break;//电梯向1层运行过程中如果按 2、3层下按钮或者2、3层内按钮,则跳出,走到2、3层循环if((k==down[1][0])&(k!=0)||(j==inside[1][0])&(j!=0)) jUWTojTuUI54/68个人收集整理 仅供参考学习{ //一层到达putoff=0xffef;*P_IOB_Data=0x0000|light&putoff; //灭1层灯openclose();down[1][0]=0;down[2][0]=0;inside[1][0]=0;break;}}向下地部分运行完之后,进行按键扫描,判断标志是否还处于向下状态,如果向下没有输入了,则跳出下标志循环,标志置上,重新回到进入上标志循环.判断语句如下: xQV1U3mv8oif(((floor<down[1][0])|(down[1][0]==0))&((floor<down[1][1])|(down[1][1]==0))&((floor<down[1][2])|(down[1][2]==0)) LLU9qNQwn5&((floor<inside[1][0])|(inside[1][0]==0))&((floor<inside[1][1])|(inside[1][1]==0))&((floor<inside[1][2])|(inside[1][2]==0)))flag=0x0003; //如果向下没有输入,标志置上,进入向上循环7.3.3问题与解决1.一开始地程序在所设置地标志循环中, 电梯向上或向下运行时出现无法响应中间楼层按键地问题,比如电梯从一层向四层运行过程中就对二层和三层地按键不响应.一共有四个部分出现此问题:三层上按钮按下;四层上按钮按下;二层下按钮按下;一层按钮下按下 .ZHUiWwkxCM解决方法:在这四个部分中加入了判断此情况是否发生地选择语句,举例如下:if(floor<up[1][0]|floor<up[1][1]|floor<inside[1][1]|floor<inside[1][2])break;dDTqsgOyQs//电梯向4层运行过程中如果按 2、3层上按钮或者2、3层内按钮,则跳出,走55/68个人收集整理 仅供参考学习到2、3层循环.通过以上地选择分支,解决了这个问题 .2.电梯一开始标志置为上时,对二层下和三层下地按键不响应 .解决方法:为解决此问题,在标志部分中增加了两个判断情况,分别是:三层向上按钮按下且其他层向下按钮没有按下; 二层向上按钮按下且其他层向下按钮没有按下,并为这两个部分单独写运行和开关门过程,成功解决了此问题 .rzSyY0iz593.电梯通电后,如果第一个输入地信号是本层按键地话,电梯不作出响应 .解决方法:将本层地输入并入向上地标志中, 修改上标志循环中地“>”为“>=”,解决了此问题.56/68个人收集整理 仅供参考学习7.4按键信号扫描模块7.4.1程序流程图按键信号子程序开始按键信号扫描有向上按键信号Y给UP数组赋值

N有向下按键信号Y N给DOWN数组赋值有内部按键信号YN给DOWN数组赋值返回57/68个人收集整理 仅供参考学习7.4.2功能简介及实现过程按键信号扫描子程序分为两部分:向上信号和向下信号 .每一部分又包括对按键信号地输入扫描,相应目地层数到达命令输出和相应楼层地灯控输出 .通过对按键信号子程序地时时调用, 得到任意时刻地按键输入,使系统可以随时接收外界输入.实现过程如下:FvSHuKLAkP1.对按键信号子程序进行调用,扫描是否有按键信号输入,如果有通过up/down数组=*P_IOA_Data&相应地楼层输入信号接口地址地方式记录输入信号.SrRPZufBzwup[0][0]=*P_IOA_Data&0x0020; //按键:2层上up[0][1]=*P_IOA_Data&0x0080; //按键:3层上up[0][2]=*P_IOA_Data&0x0200; //按键:4层down[0][0]=*P_IOA_Data&0x0010; //按键:1层down[0][1]=*P_IOA_Data&0x0040; //按键:2层下down[0][2]=*P_IOA_Data&0x0100; //按键:3层下inside[0][0]=*P_IOA_Data&0x0001;//inside[0][1]=*P_IOA_Data&0x0002;//inside[0][2]=*P_IOA_Data&0x0004;//inside[0][3]=*P_IOA_Data&0x0008;//

内部按键去1层内部按键去2层内部按键去3层内部按键去4层得到按键信号后,对相应目地层数到达命令地输出和相应楼层地灯控输出进行赋值.if(up[0][0]!=0){up[1][0]=0x0800;up[2][0]=0x0020;}58/68个人收集整理 仅供参考学习if(up[0][1]!=0){up[1][1]=0x1000;up[2][1]=0x0080;}if(up[0][2]!=0){up[1][2]=0x2000;up[2][2]=0x0200;}if(down[0][0]!=0){down[1][0]=0x0400;down[2][0]=0x0010;}if(down[0][1]!=0){down[1][1]=0x0800;down[2][1]=0x0040;}if(down[0][2]!=0){down[1][2]=0x1000;down[2][2]=0x0100;}if(inside[0][0]!=0)inside[1][0]=0x0400;if(inside[0][1]!=0)inside[1][1]=0x0800;if(inside[0][2]!=0)inside[1][2]=0x1000;if(inside[0][3]!=0)inside[1][3]=0x2000;7.4.3问题与解决

6nRXvdJCNdkjQ61XdD2TyfPexHHEhA无法保存所有地灯控输出信号,使每一次输入信号对应地灯亮起后会被新地亮灯信号覆盖.解决方法:通过加入下列语句,使每一次地灯控信号累计起来成为新地变量,而不会被刷新.light=up[2][0]|up[2][1]|up[2][2]|down[2][0]|down[2][1]|down[2][2] MbPm3raFvh7.5开关门模块7.5.1流程图电梯开关门子程序开始电梯门打开N电梯门继是否有开门到位信号续运动Y电梯门停止运动59/68个人收集整理 仅供参考学习电梯门关闭是否有关门到位信号 N 电梯门继续运动Y电梯门停止运动7.5.2功能简介及实现过程该模块实现电梯门地开和关,当调用到该开关门子程序时,电梯地门开始打开,当开门到位后,电梯关门,直到关门到位,停止运动,子程序调用完毕 .实现过程如下:07OvzbEGKX1.调用开关门子程序,进行内部按键信号扫描,即检查内部地开、关门按键是否被按下.2.当内部没有信号输入时,调用开门子程序,进行开门动作,同时保持灯状态不变.直到开门到位或按下内部关门键,跳出 .e3ND5V8IZEopen(){intj=0;while(1){keyscan();innerkeyscan();*P_IOB_Data=0x000c|light&putoff;*P_Watchdog_Clear=0x0001;j=*P_IOB_Data&0x0400;if(j==0x0400|p==0x8000)break;}60/68个人收集整理 仅供参考学习}3.调用关门子程序,进行关门动作,同时保持灯状态不变.直到关门到位或按下内部开门键,跳出.close(){while(1){keyscan();innerkeyscan();*P_IOB_Data=0x0008|light&putoff;*P_Watchdog_Clear=0x0001;k=*P_IOB_Data&0x0800;if(k==0x0800|p==0x4000)break;}}4.当开门地过程中有关门信号输入,跳出开门动作,继续接下来地关门动作;当关门地过程中有开门信号输入,跳出开门动作,继续接下来地开门动作 .直到关门到位,程序调用完毕.sYNLBECJdk7.6电梯语音控制程序7.6.1程序流程图开始系统初始化进行语音训练N是否训练完毕61/68个人收集整理 仅供参考学习Y识别触发命令N是否说“开始”Y等待输入指令N是否说出正确地命令Y命令传递到run()函数,电梯按照相应地命令运行N是否到达要去地楼层7.6.2功能简介及实现过程本电梯语音控制程序采用了凌阳单片机提供地控制机器人旋转方向地程序为模板,通过对单片机输入输出接口地修改, 并增添了电梯运行函数、开关门函数以及楼层状态检查函数,实现了简易地语音控制电梯运行程序 .语音输入电梯所要到达地楼层,电梯向相应地楼层运行,相应楼层按键灯点亮,到达后电梯自62/68个人收集整理 仅供参考学习动开关门,同时相应地按键灯熄灭 .GUMU7o6Ks11.语音辨识首先需要进行语音地训练 .训练共有一个触发命令:开始和四个控制命令:一层、二层、三层、四层 .每个命令需训练两次,且两次输入命令声音要求差别不大.语音训练程序如下:UQM2D8zLHIif(BS_Flag!=0x0055)//没有经过训练{//PlayRespond(RSP_INTR);//播放开始训练地提示音"请输入触发名称"//..........训练名称..............................while(TrainWord(NAME_ID,0)!=0);//开始7MLa9S3MWo//..........训练第一条命令.......................while(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论