CTS1600-1控制技术综合实验系统程序设计.docx_第1页
CTS1600-1控制技术综合实验系统程序设计.docx_第2页
CTS1600-1控制技术综合实验系统程序设计.docx_第3页
CTS1600-1控制技术综合实验系统程序设计.docx_第4页
CTS1600-1控制技术综合实验系统程序设计.docx_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

综合电子创新训练研究报告研究题目:CTS1600-1控制技术综合实验系统程序设计院系名称:能源与动力工程学院专业名称:飞行器动力工程 学生姓名:李宁 11041166 杨婷 11041168 杨瑞琪 11041178 指导教师:蒋 龙、李 烨 2014 年 6 月 2 日工程训练中心工程训练中心本科生创新训练(论文)任务书、创新训练(论文)题目:基于CTS1600-1控制技术综合实验系统的电梯模拟控制系统设计 、创新训练(论文)使用的原始资料(数据)及设计技术要求: 、主要参考资料: 电梯教学.ppt 说明讲义.pdf 16位单片机原理及应用学习与实验指导: 百度文库 能源与动力工程 学院 飞行器动力工程 专业类 110417 班学生姓名 李宁 11041166 杨婷 11041168 杨瑞琪 11041178 创新训练时间: 2014 年 3 月至 2014 年 6 月答辩时间: 2014 年 6 月 19 日 成 绩: 指导教师:蒋 龙、李 烨7摘要CTS1600-1控制系统技术综合实验系统的电梯模拟控制系统是基于凌阳单片机的一次学生实验,电梯模型将机械和电气两方面有机的结合起来,充分体现了机电结合的特点,增强了实验的综合性和动手性。此次实验我们编写了电梯的各项小程序以及最终电梯运行的大程序,并绘制了其对应的程序流程图,在问题的解决中得到了不菲的收获。关键词:电梯模拟控制系统,单片机,程序编写 目录第一章、绪论11.1、课题背景与目的11.2、课题研究方法1第二章、电梯模型硬件设备22.1、实验单片机模型与接口定义22.1.1、实验用单片机22.1.2、单片机接口定义32.1.3、I/O接口DATA控制命令表42.2、电梯控制命令说明62.3、实验用电梯模型72.3.1、简介72.3.2、硬件连接82.3.3、安装步骤82.3.4、接口种类及数目8第三章、与电梯模型相关的实验程序93.1、灯93.1.1、程序流程图93.1.2、程序代码93.1.3、功能简介103.1.4、功能实现过程103.1.5、问题的解决及收获113.2、键+灯123.2.1、程序流程图123.2.2、程序代码123.2.3、功能简介133.2.4、功能实现过程143.2.5、问题的解决及收获143.3、键+灯+数码管153.3.1、程序流程图153.3.2、程序代码153.3.3、功能简介163.3.4、功能实现过程173.3.5、问题的解决及收获173.4、键+灯+开关门183.4.1、程序流程图183.4.2、程序代码183.4.3、功能简介203.4.4、功能实现过程213.4.5、问题的解决及收获213.5、键+灯+数码管+上下行223.5.1、程序流程图223.5.2、程序代码223.5.3、功能简介253.5.4、功能实现过程263.5.5、问题的解决及收获263.6、键+灯+数码管+上下行+开关门273.6.1、程序流程图273.6.2、程序代码283.6.3、功能简介283.6.4、功能实现过程283.6.5、问题的解决及收获283.7、密码锁303.7.1、程序流程图303.7.2、程序代码303.7.3、功能简介353.7.4、功能实现过程353.7.5、问题的解决及收获353.8、创新程序(记忆训练)363.8.1、程序流程图363.8.2、程序代码363.8.3、功能简介403.8.4、功能实现过程403.8.5、问题的解决及收获41第四章、电梯模型完整控制程序424.1、主程序424.1.1、程序流程图424.1.2、程序代码434.1.3、功能说明524.1.4、功能实现过程524.1.5、问题的解决及收获524.2、键灯子程序(light函数)534.2.1、程序流程图534.2.2、功能简介534.2.3、问题解决及收获534.3、开关门子程序(door函数)544.3.1、程序流程图544.3.2、功能简介544.3.3、问题的解决及收获544.4、数码管显示子程序(digital函数)554.4.1、程序流程图(以二层为例)554.4.2、功能简介554.4.3、问题的解决及收获554.5、延时子程序(dely函数)564.5.1程序流程图564.5.2功能简介564.5.3、问题的解决与收获56第五章、总结与致谢575.1、总结575.2、致谢58工 程 训 练 中 心 (论文)第一章、绪论1.1、课题背景与目的1) 据统计,我国在用电梯34.6万多台,每年还以约5-6万台的速度增长。目前我国电梯技术水平已与世界同步。2) 电梯模型将机械和电气两方面有机的结合起来,充分体现了机电结合的特点,并且可以在学生机电实验方面得到广泛的应用。1.2、课题研究方法1) 参照凌阳SPCE061A开发的相关资料,加深对控制电梯模型的单片机的了解。进行61板的相关实验,掌握单片机实现基本功能的技术。2) 对单片机编写程序,以达到控制电梯模型的目的。3) 通过电梯模型的使用,使我们开发能力提高。59第二章、电梯模型硬件设备2.1、实验单片机模型与接口定义2.1.1、实验用单片机SPCE061A是继nSP系列产品SPCE500A等之后凌阳科技推出的又一个16位结构的微控制器。与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存FLASH ROM。较高的处理速度使nSP能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相同,以nSP为核心的SPCE061A微控制器也适用在数字语音识别应用领域。SPCE061A在2.6V3.6V工作电压范围内的工作速度范围为0.32MHz49.152MHz,较高的工作速度使其应用领域更加拓宽。2K字SRAM和32K字闪存ROM仅占一页存储空间,32位可编程的多功能I/O端口;两个16位定时器/计数器;32768Hz实时时钟;低电压复位/监测功能;8通道10位模-数转换输入功能并具有内置自动增益控制功能的麦克风输入方式;双通道10位DAC方式的音频输出功能SPCE061A是数字声音和语音识别产品的一种最经济的应用。2.1.2、单片机接口定义实验单片机的接口定义如图1,其中A 口为输入,B 口为输出。2.1.3、I/O接口DATA控制命令表表1是单片机A口Data控制命令表:表一表2 是单片机B 口Data 控制命令表:表二2.2、电梯控制命令说明1) 一层上按钮按下,*P_IOA_Data输入值为0x0010,使一层上按键灯亮起的命令为:*P_IOB_Data=0x0010,其他层按键灯不受影响。2) 二层上按钮按下,*P_IOA_Data输入值为0x0020,使二层上按键灯亮起的命令为:*P_IOB_Data=0x0020,其他层按键灯不受影响。3) 二层下按钮按下,*P_IOA_Data输入值为0x0040,使二层下按键灯亮起的命令为:*P_IOB_Data=0x0040,其他层按键灯不受影响。4) 三层上按钮按下,*P_IOA_Data输入值为0x0080,使三层上按键灯亮起的命令为:*P_IOB_Data=0x0080,其他层按键灯不受影响。5) 三层下按钮按下,*P_IOA_Data输入值为0x0100,使三层下按键灯亮起的命令为:*P_IOB_Data=0x0100,其他层按键灯不受影响。6) 四层下按钮按下,*P_IOA_Data输入值为0x0200,使四层下按键灯亮起的命令为:*P_IOB_Data=0x0200,其他层按键灯不受影响。7) 电梯内部开门按钮按下,*P_IOA_Data输入值为0x4000,使电梯开门的命令为:*P_IOB_Data=0x000c,电梯执行开门动作。8) 电梯内部关门按钮按下,*P_IOA_Data输入值为0x8000,使电梯关门的命令为:*P_IOB_Data=0x0008,电梯执行关门动作。2.3、实验用电梯模型2.3.1、简介CTS1600-控制技术综合实验系统是典型的机电控制系统,是运用PC 机控制单片机的教学平台。通过本实验,不但可以帮助学生理解掌握实际电梯的控制原理和方法,而且能将所学运用到现代工业和其他领域中。电梯模型将机械和电气两方面有机的结合起来,充分体现了机电结合的特点,并且在学生机电实验方面得到广泛的应用。参照凌阳SPCE061A 开发的相关资料,加深对控制电梯模型的单片机的了解。进行61 板的相关实验,掌握单片机实现基本功能的技术。对单片机编写程序,达到控制电梯模型的目的。2.3.2、硬件连接2.3.3、安装步骤1) 用UART/USB 连接线将计算机与凌阳单片机连接2) 凌阳单片机与40 线并行电缆连接3) CTS1600-控制技术综合实验系统与40 线并行电缆连接4) CTS1600-控制技术综合实验系统再与220V交流电连接2.3.4、接口种类及数目1) 外部按键6个,内部按键6个2) 到位开关1 至4 层各1个3) 7. 开门/关门到位开关各1个4) 外部/内部信号灯各6个5) 数码显示BCD(3位)6) 上下行/开关门电机各1台第三章、与电梯模型相关的实验程序3.1、灯3.1.1、程序流程图3.1.2、程序代码#include spce061A.hvoid main() int input,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) *P_IOB_Data=0x0010;dly(40);*P_IOB_Data=0x0040;dly(40);*P_IOB_Data=0x0020;dly(40);*P_IOB_Data=0x0100;dly(40);*P_IOB_Data=0x0080;dly(40);*P_IOB_Data=0x0200;dly(40);void dly (unsigned int undly) int m; for(m=0;mundly;m+) int n; for(n=0;nundly;n+) n=n; *P_Watchdog_Clear=0x0001; *P_Watchdog_Clear=0x0001; 3.1.3、功能简介这个程序通过一个延时子程序来实现灯按一定频率的进行亮、灭的目标,最终灯会由一层到四层逐次亮、灭。3.1.4、功能实现过程这个程序通过while(1)的指令,不断给输出端口B进行赋值,通过赋予B对应端口一个灯对应的16进制代码以实现此灯亮的功能。灯亮后延时(此程序运行频率约为100000Hz,dly函数延时时间为n2,dly(40)即延时0.016秒。3.1.5、问题的解决及收获编写这个程序时,由于是第一次使用凌阳单片机,虽然有着C语言的基础,但是对于单片机的程序还是有着一定程度的陌生。编写时由于对单片机的了解不够犯了很多逻辑上的错误,对于延时子程序的了解也不够透彻,以至于没有正确合适的使用它。通过阅读讲义、上课PPT以及老师的现场指导,我们最终解决了这些问题,这位之后程序的成功编写奠定了一定的基础。这些问题告诉我们,在遇到困难的时候不要过于紧张,静下来通过其他例子进行触类旁通就有可能将其完美解决。3.2、键+灯3.2.1、程序流程图3.2.2、程序代码#include spce061A.hvoid main() int input,p,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;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;3.2.3、功能简介本程序开始时灯是全灭的,当按键之后,按键对应的灯就亮,按下下一个键后,原先的灯不灭,下一个对应的灯亮。3.2.4、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值在原先的基础上,对应的端口再加上一个对应按键的灯的值,以此来实现按键之后对应的灯亮,原先的灯不灭的功能。3.2.5、问题的解决及收获通过这个程序我们了解到,让B口在原先的基础上继续输出现在的值可以通过“|”这个命令解决,也可以通过将对应端口的值直接用十六进制的加法计算算出结果来解决。由于本程序较为简单,因此我们选择通过“|”这个命令来解决,从而起到简化编写过程的效果。3.3、键+灯+数码管3.3.1、程序流程图3.3.2、程序代码#include spce061A.hvoid main() int input,p,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=0x1010;if(t&0x0020)=0x0020)*P_IOB_Data=0x2020;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040)*P_IOB_Data=0x2040;*P_Watchdog_Clear=0x0001;if(t&0x0080)=0x0080)*P_IOB_Data=0x3080;*P_Watchdog_Clear=0x0001;if(t&0x0100)=0x0100)*P_IOB_Data=0x3100;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200)*P_IOB_Data=0x4200;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;3.3.3、功能简介本程序刚开始灯和数码管均没有显示。当按下一个键之后,对应的灯亮,数码管显示数字,按下下一个键之后,前一盏灯和数码管灭,这一个键所对应的灯亮、数码管显示数字。3.3.4、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值赋予一个对应按键的灯和数码管的值来取代原先的值,以此来实现按键之后对应的灯亮、数码管亮的功能。3.3.5、问题的解决及收获此程序可以通过对“键+灯”程序的修改而快速得到,较为简单。值得一提的是,一开始此程序由于缺少“看门狗”指令,在外界某些因素的影响下,程序并没有顺利运行。由于研究工具的限制,我们并没有彻底了解看门狗的具体功能以及外界对此程序的影响方式。通过查阅文献我们最终了解到“看门狗”是为了程序里面防止一些不可知的因素程序跑飞功能不正常而设置的硬件复位,通常这个功能是编程时可选开启的,开了之后会一定的周期(大概是8M时钟周期)地出发这个“看门狗”功能。所以如果开了“看门狗”,主循环中一般需要加一句clear watchdog,或者其他有长时间等待再或者死循环的地方,都要注意清“看门狗“。通过这个程序我们了解到了”看门狗“的重要性。3.4、键+灯+开关门3.4.1、程序流程图3.4.2、程序代码#include spce061A.hvoid main() int input,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)p=*P_IOB_Data;if(p&0x0800)=0x0800)break;*P_IOB_Data=*P_IOB_Data|0x0008;while(1)t=*P_IOA_Data;if(t&0x0010)=0x0010) *P_IOB_Data=0x001c;dly(400);*P_IOB_Data=0x0018;*P_Watchdog_Clear=0x0001;if(t&0x0020)=0x0020) *P_IOB_Data=0x002c;dly(400);*P_IOB_Data=0x0028;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040)*P_IOB_Data=0x004c;dly(400);*P_IOB_Data=0x0048;*P_Watchdog_Clear=0x0001;if(t&0x0080)=0x0080)*P_IOB_Data=0x008c;dly(400);*P_IOB_Data=0x0088;*P_Watchdog_Clear=0x0001;if(t&0x0100)=0x0100)*P_IOB_Data=0x010c;dly(400);*P_IOB_Data=0x0108;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200)*P_IOB_Data=0x020c;dly(400);*P_IOB_Data=0x0208;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;void dly (unsigned int undly) int m;for(m=0;mundly;m+)int n; for(n=0;nundly;n+) n=n; *P_Watchdog_Clear=0x0001; *P_Watchdog_Clear=0x0001;3.4.3、功能简介当按下一个键后,按键所对应的灯亮,电梯门打开,打开完毕后延时1.6秒,电梯门关闭且灯灭,以此循环。3.4.4、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值赋予一个对应按键的灯的值以及一个开门的值来取代原先的值,以此来实现按键之后对应的灯亮、开门,开门完毕后,延时1.6秒后,也就是子程序中dly(400),将输出端B口的值赋予关门的值,从而电梯门关闭,灯灭。3.4.5、问题的解决及收获由于电梯本身的故障,电梯在刚启动时,电梯门会打开一半。由于这个问题,我们的程序一开始并不能完美运行,必须先通过多次启动电梯,然后通过内部按键关闭电梯门才能正常开始运行程序。为了解决这个问题,我们在我们原先程序的基础上增加了一个检查程序,当电梯门并没有关门到位时,就关闭电梯门,然后通过break命令跳出这个检查程序进入正常的键+灯+开关门程序。通过这种方式我们让我们的程序得到了便捷完美的实现。3.5、键+灯+数码管+上下行3.5.1、程序流程图3.5.2、程序代码#include spce061A.hvoid main()int input,t=0,i,m;*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=0x0002+0x0010; i=1; stop(0x0400); *P_IOB_Data=0x1000; *P_Watchdog_Clear=0x0001; if(t&0x0020)=0x0020) *P_IOB_Data=0x0020;go(i,2);stop(0x0800);*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040) *P_IOB_Data=0x0040;go(i,2);i=2;stop(0x0800);*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;if(t&0x0080)=0x0080) *P_IOB_Data=0x0080;go(i,3);i=3;stop(0x1000);*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;if(t&0x0100)=0x0100) *P_IOB_Data=0x0100;go(i,3);i=3;stop(0x1000);*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200) *P_IOB_Data=0x0200;go(i,4);i=4;stop(0x2000);*P_IOB_Data=0x4000;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;void dly (unsigned int undly) int m;for(m=0;mundly;m+)int n; for(n=0;nundly;n+) n=n; *P_Watchdog_Clear=0x0001; *P_Watchdog_Clear=0x0001;void stop(int x) while(1)if(*P_IOA_Data&x)=x)if(x=0x0400)*P_IOB_Data=0x1000;if(x=0x0800)*P_IOB_Data=0x2000;if(x=0x1000)*P_IOB_Data=0x3000;if(x=0x2000)*P_IOB_Data=0x4000;break;*P_Watchdog_Clear=0x0001;int go( int i,int m) if(im)*P_IOB_Data=0x0002;i=m;*P_Watchdog_Clear=0x0001;3.5.3、功能简介当按下一个键之后,按键所对应的灯亮、数码管显示所在楼层楼号,与此同时电梯前往按键所在楼层,电梯到达所在楼层后,电梯停止,数码管显示当前楼层楼号。3.5.4、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值赋予一个对应按键的灯的值以及一个数码管的值来取代原先的值,以此来实现按键之后对应的灯亮、数码管显示当前楼层楼号,然后通过一个运行子程序go(i,m)来使电梯运行到所需要前往的楼层,子程序中用变量i来记录当前楼层号,m来记录所要前往的楼层号通过判断来确定电梯是该上行还是下行,到达楼层后,通过一个停止子程序stop(x)让电梯停止,并给输出端B赋予一个当前楼层数码管的值来取代原先的值,以此来实现到达之后显示当前楼层楼号的效果。3.5.5、问题的解决及收获这个程序让我们对子程序的引用使用方法以及返回值更加了解,通过定义全局变量可以让程序变量的定义变得更加便捷,但是在这个程序中我们并没有实现电梯经过某个楼层就显示楼层号的效果,这个为我们后续程序的编写提供了改进方向。我们最终编写了一个子程序来控制数码管的变化,这个在后续程序中有叙述。3.6、键+灯+数码管+上下行+开关门3.6.1、程序流程图3.6.2、程序代码由于程序过长且与最终的电梯运行大程序类似,故在此不详尽叙述程序代码内容,详细程序可参考最终电梯运行大程序。3.6.3、功能简介电梯始终显示当前楼层楼号,当按下一个键之后,按键灯亮,该程序控制电梯关门,按键所对应的灯灭,进而运行到所要前往的楼层,在运行过程,数码管显示经过楼层的楼号直至最终到达下一楼层,电梯到达且停稳后,电梯开门。3.6.4、功能实现过程首先,系统需要先清零,也就是把已经编好的程序写入到凌阳SPCE061A单片机中。程序通过while(1)始终运行,按键输入指令后 ,程序先给输出端B一个关门的指令,通过判断程序确定电梯的上下行方向,运行过程中通过一个数码管的控制程序来控制数码管始终显示当前楼层楼号,此外电梯通过一个停止程序来控制电梯最终的停止,然后给输出端B一个开门指令结束程序运行。3.6.5、问题的解决及收获在上个程序的基础上,我们给电梯增加了一个子程序来控制灯和数码管的显示,且给电梯一个开关门指令。值得一提的是,电梯在开关门的指令后需要接上一个延时程序,否则由于电梯扫描程序运行的速度过快,将会导致后续程序无法正常运行。这个问题在编写的时候给我们带来了很大的困扰,最终在请教了老师之后将其完美解决,使程序能够顺利运行。通过这个程序,我们了解到了延时程序在电梯运行过程中你的重要性和不可缺少性。3.7、密码锁3.7.1、程序流程图3.7.2、程序代码#include spce061A.h#includeint a5=0,b5=0,i=1,j=1;int main()*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)setup();jiesuo();if(a4=b4)&(a1=b1)&(a2=b2)&(a3=b3)*P_IOB_Data=0x000c;b4=0; b1=0; b2=0; b3=0; j=1;*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x4000)=0x4000)*P_IOB_Data=0x0008;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;void dly (unsigned int undly)int m,n;for(m=0;mundly;m+)for(n=0;nundly;n+)n=n;void setup() if(*P_IOA_Data&0x0001)=0x0001) ai=1; i=i+1; *P_IOA_Data=0; *P_IOB_Data=0x1010; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0002)=0x0002) ai=2; i=i+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x2040; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0004)=0x0004) ai=3; i=i+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x3020; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0008)=0x0008) ai=4; i=i+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x4100; *P_Watchdog_Clear=0x0001;void jiesuo() if(*P_IOA_Data&0x0010)=0x0010) bj=1; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x1010; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0040)=0x0040) bj=2; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x2040; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0020)=0x0020) bj=3; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x3020; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0100)=0x0100) bj=4; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x4100; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0200)=0x0200) *P_IOB_Data=0x0200; a4=0; a1=0; a2=0; a3=0; i=1; *P_IOA_Data=0; dly(100); *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0080)=0x0080) *P_IOB_Data=0x0080; b4=0; b1=0; b2=0; b3=0; j=1; *P_IOA_Data=0; dly(100); *P_Watchdog_Clear=0x0001; *P_Watchdog_Clear=0x0001; 3.7.3、功能简介该程序是一个密码锁程序,程序先通过电梯内部按键输入设定一个密码,电梯关门,然后通过电梯外部按键输入一个密码,若之后输入的密码和之前的密码相同,则电梯开门,否则电梯将不会有任何反应,密码程序可以通过外部按键进行重设密码和输入密码重置的功能。3.7.4、功能实现过程程序通过while(1)始终运行,先通过电梯内部按键给数组ai输入一个密码,然后给输出端B一个电梯关门的指令。通过电梯外部按键给数组bi输入一个密码,电梯通过判断程序,若ai=bi,则给输出端B一个开门指令。电梯可通过外部按键实现ai和bi的清零,也就是密码和输入密码的重置。3.7.5、问题的解决及收获由于电梯扫描运行的速度过快,当按下一个键之后,往往给整个数组都赋予了当前按键所对应的值,从而使得电梯不能正常的记录多个密码,我们通过一个按键清零指令和一个延时程序,使数组一次只记录一个密码,从而实现了密码的工作。3.8、创新程序(记忆训练)3.8.1、程序流程图3.8.2、程序代码#include spce061A.h#includeint a5=0,j=0,i=1;int main()*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_IOB_Data&0x0800)=0x0800)break;*P_IOB_Data=*P_IOB_Data|0x0008;while(1)if(j=0)*P_IOB_Data=0x3000; dly(150);*P_IOB_Data=0x2000;dly(150);*P_IOB_Data=0x1000;dly(150);*P_IOB_Data=0x0010; dly(100);*P_IOB_Data=0x0020;dly(100);*P_IOB_Data=0x0040;dly(100);*P_IOB_Data=0x0100;dly(100);*P_IOB_Data=0;j=1;dly(100);*P_Watchdog_Clear=0x0001;if(j=1)if(*P_IOA_Data&0x0010)=0x0010) *P_IOB_Data=0x0010;ai=1;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0040)=0x0040) *P_IOB_Data=0x0040;ai=2;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0020)=0x0020) *P_IOB_Data=0x0020;ai=3;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0100)=0x0100) *P_IOB_Data=0x0100;ai=4;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(a1=1&a2=3&a3=2&a4=4) *P_IOB_Data=0x000c;a1=0;a2=0;a3=0;a4=0;i=1;dly(200);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0200)=0x0200) *P_IOB_Data=0x0080;j=0;*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0080)=0x0080) a1=0;a2=0;a3=0;a4=0;i=1;*P_IOB_Data=0;*P_Watchdog_Clear=0x0001;if(*P_IOA_Dat

温馨提示

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

评论

0/150

提交评论