版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、综合电子创新训练研究报告研究题目:CTS1600-1控制技术综合实验系统程序设计院系名称:能源与动力工程学院专业名称:飞行器动力工程 学生姓名:李宁 11041166杨婷 11041168 杨瑞琪 11041178指导教师:蒋龙、李烨2014 年6 月2日工程训练中心工程训练中心本科生创新训练(论文)任务书、创新训练(论文)题目:基于CTS1600-1控制技术综合实验系统的电梯模拟控制系统设计、创新训练(论文)使用的原始资料(数据)及设计技术要求:、主要参考资料:电梯教学.ppt说明讲义.pdf16位单片机原理及应用学习与实验指导:百度文库能源与动力工程学院飞行器动力工程专业类110417班学
2、生姓名李宁 11041166 杨婷 11041168 杨瑞琪 11041178 创新训练时间:2014年 3月至2014年6月答辩时间:2014年6月19日成绩:指导教师:蒋龙、李烨摘要CTS1600-1控制系统技术综合实验系统的电梯模拟控制系统是基于凌阳单片机的一次学生实验,电梯模型将机械和电气两方面有机的结合起来,充分体现了机电结合的特点,增强了实验的综合性和动手性。此次实验我们编写了电梯的各项小程序以及最终电梯运行的大程序,并绘制了其对应的程序流程图,在问题的解决中得到了不菲的收获。关键词:电梯模拟控制系统,单片机,程序编写目录第一章、绪论11.1、课题背景与目的11.2、课题研究方法1
3、第二章、电梯模型硬件设备22.1、实验单片机模型与接口定义2、实验用单片机2、单片机接口定义3、I/O接口DATA控制命令表42.2、电梯控制命令说明62.3、实验用电梯模型7、简介7、硬件连接8、安装步骤8、接口种类及数目8第三章、与电梯模型相关的实验程序93.1、灯9、程序流程图9、程序代码9、功能简介10、功能实现过程10、问题的解决及收获113.2、键+灯12、程序流程图12、程序代码12、功能简介13、功能实现过程14、问题的解决及收获143.3、键+灯+数码管15、程序流程图15、程序代码15、功能简介16、功能实现过程17、问题的解决及收获173.4、键+灯+开关门18、程序流程
4、图18、程序代码18、功能简介20、功能实现过程21、问题的解决及收获213.5、键+灯+数码管+上下行22、程序流程图22、程序代码22、功能简介25、功能实现过程26、问题的解决及收获263.6、键+灯+数码管+上下行+开关门27、程序流程图27、程序代码28、功能简介28、功能实现过程28、问题的解决及收获283.7、密码锁30、程序流程图30、程序代码30、功能简介35、功能实现过程35、问题的解决及收获353.8、创新程序(记忆训练)36、程序流程图36、程序代码36、功能简介40、功能实现过程40、问题的解决及收获41第四章、电梯模型完整控制程序424.1、主程序42、程序流程图4
5、2、程序代码43、功能说明52、功能实现过程52、问题的解决及收获524.2、键灯子程序(light函数)53、程序流程图53、功能简介53、问题解决及收获534.3、开关门子程序(door函数)54、程序流程图54、功能简介54、问题的解决及收获544.4、数码管显示子程序(digital函数)55、程序流程图(以二层为例)55、功能简介55、问题的解决及收获554.5、延时子程序(dely函数)56程序流程图56功能简介56、问题的解决与收获56第五章、总结与致谢575.1、总结575.2、致谢58第一章、绪论1.1、课题背景与目的1) 据统计,我国在用电梯34.6万多台,每年还以约5-6
6、万台的速度增长。目前我国电梯技术水平已与世界同步。2) 电梯模型将机械和电气两方面有机的结合起来,充分体现了机电结合的特点,并且可以在学生机电实验方面得到广泛的应用。1.2、课题研究方法1) 参照凌阳SPCE061A开发的相关资料,加深对控制电梯模型的单片机的了解。进行61板的相关实验,掌握单片机实现基本功能的技术。2) 对单片机编写程序,以达到控制电梯模型的目的。3) 通过电梯模型的使用,使我们开发能力提高。第二章、电梯模型硬件设备2.1、实验单片机模型与接口定义、实验用单片机SPCE061A是继µnSP系列产品SPCE500A等之后凌阳科技推出的又一个16位结构的微控制器。与SP
7、CE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,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、;低电压复位/监测功能;8通道10位模-数转换输入功能并具有内置自动增益控制功能的麦克风输入方式;双通道10位DAC方式的音频输出功能SPCE061A是数字声音和语音识别产品的一种最经济的应用。、单片机接口定义实验单片机的接口定义如图1,其中A 口为输入,B 口为输出。、I/O接口DATA控制命令表表1是单片机A口Data控制命令表:表一表2 是单片机B 口Data 控制命令表:表二2.2、电梯控制命令说明1) 一层上按钮按下,*P_IOA_Data输入值为0x0010,使一层上按键灯亮起的命令为:*P_IOB_Data=0x0010,其他层按键灯不受影响。2) 二层上按钮按下,*P_IOA_
9、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) 四层下按钮按下
10、,*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、实验用电梯模型、简介CTS1600-控制技术综合实验系统是典型的机电控制系统,是运用PC 机控制单片机的教学平台。通过本实验,不但可以帮助学生理解掌握实际电梯的控
11、制原理和方法,而且能将所学运用到现代工业和其他领域中。电梯模型将机械和电气两方面有机的结合起来,充分体现了机电结合的特点,并且在学生机电实验方面得到广泛的应用。参照凌阳SPCE061A 开发的相关资料,加深对控制电梯模型的单片机的了解。进行61 板的相关实验,掌握单片机实现基本功能的技术。对单片机编写程序,达到控制电梯模型的目的。、硬件连接、安装步骤1) 用UART/USB 连接线将计算机与凌阳单片机连接2) 凌阳单片机与40 线并行电缆连接3) CTS1600-控制技术综合实验系统与40 线并行电缆连接4) CTS1600-控制技术综合实验系统再与220V交流电连接、接口种类及数目1) 外部
12、按键6个,内部按键6个2) 到位开关1 至4 层各1个3) 7. 开门/关门到位开关各1个4) 外部/内部信号灯各6个5) 数码显示BCD(3位)6) 上下行/开关门电机各1台第三章、与电梯模型相关的实验程序3.1、灯、程序流程图、程序代码#include "spce061A.h"void 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;
13、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;m<undly;m+) int n; for(n=0;n<undly;n+)n=n; *P_Watchdog_Clear=0x0001; *P_Watchdog_Clear=0x0001; 、功能简介这个程序通过
14、一个延时子程序来实现灯按一定频率的进行亮、灭的目标,最终灯会由一层到四层逐次亮、灭。、功能实现过程这个程序通过while(1)的指令,不断给输出端口B进行赋值,通过赋予B对应端口一个灯对应的16进制代码以实现此灯亮的功能。灯亮后延时(此程序运行频率约为100000Hz,dly函数延时时间为n2,dly(40)即延时0.016秒。、问题的解决及收获编写这个程序时,由于是第一次使用凌阳单片机,虽然有着C语言的基础,但是对于单片机的程序还是有着一定程度的陌生。编写时由于对单片机的了解不够犯了很多逻辑上的错误,对于延时子程序的了解也不够透彻,以至于没有正确合适的使用它。通过阅读讲义、上课PPT以及老师
15、的现场指导,我们最终解决了这些问题,这位之后程序的成功编写奠定了一定的基础。这些问题告诉我们,在遇到困难的时候不要过于紧张,静下来通过其他例子进行触类旁通就有可能将其完美解决。3.2、键+灯、程序流程图3.2.2、程序代码#include "spce061A.h"void 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&0x00
16、10)=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)=0
17、x0100)*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;、功能简介本程序开始时灯是全灭的,当按键之后,按键对应的灯就亮,按下下一个键后,原先的灯不灭,下一个对应的灯亮。、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值在原先的基础上,对应的端口再加上一个对应按键的灯的值,以此来实现
18、按键之后对应的灯亮,原先的灯不灭的功能。、问题的解决及收获通过这个程序我们了解到,让B口在原先的基础上继续输出现在的值可以通过“|”这个命令解决,也可以通过将对应端口的值直接用十六进制的加法计算算出结果来解决。由于本程序较为简单,因此我们选择通过“|”这个命令来解决,从而起到简化编写过程的效果。3.3、键+灯+数码管、程序流程图、程序代码#include "spce061A.h"void main()int input,p,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attr
19、ib=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&am
20、p;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;、功能简介本程序刚开始灯和数码管均没有显示。当按下一个键之后,对应的灯亮,数码管显示数字,按下下一个键之后,前一盏灯和数码管灭,这一个键所对应的灯亮、数码管显示数字。、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值赋予一个对应按键的灯和数码管的值来取
21、代原先的值,以此来实现按键之后对应的灯亮、数码管亮的功能。、问题的解决及收获此程序可以通过对“键+灯”程序的修改而快速得到,较为简单。值得一提的是,一开始此程序由于缺少“看门狗”指令,在外界某些因素的影响下,程序并没有顺利运行。由于研究工具的限制,我们并没有彻底了解看门狗的具体功能以及外界对此程序的影响方式。通过查阅文献我们最终了解到“看门狗”是为了程序里面防止一些不可知的因素程序跑飞功能不正常而设置的硬件复位,通常这个功能是编程时可选开启的,开了之后会一定的周期(大概是8M时钟周期)地出发这个“看门狗”功能。所以如果开了“看门狗”,主循环中一般需要加一句clear watchdog,或者其他
22、有长时间等待再或者死循环的地方,都要注意清“看门狗“。通过这个程序我们了解到了”看门狗“的重要性。3.4、键+灯+开关门、程序流程图、程序代码#include "spce061A.h"void 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|0
23、x0008;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_Watchd
24、og_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=0x0
25、001;*P_Watchdog_Clear=0x0001;void dly (unsigned int undly) int m;for(m=0;m<undly;m+)int n; for(n=0;n<undly;n+)n=n;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;、功能简介当按下一个键后,按键所对应的灯亮,电梯门打开,打开完毕后延时1.6秒,电梯门关闭且灯灭,以此循环。、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值赋予一个对应按键的灯的值以及一个开门的值来取代原先的值,以此来
26、实现按键之后对应的灯亮、开门,开门完毕后,延时1.6秒后,也就是子程序中dly(400),将输出端B口的值赋予关门的值,从而电梯门关闭,灯灭。、问题的解决及收获由于电梯本身的故障,电梯在刚启动时,电梯门会打开一半。由于这个问题,我们的程序一开始并不能完美运行,必须先通过多次启动电梯,然后通过内部按键关闭电梯门才能正常开始运行程序。为了解决这个问题,我们在我们原先程序的基础上增加了一个检查程序,当电梯门并没有关门到位时,就关闭电梯门,然后通过break命令跳出这个检查程序进入正常的键+灯+开关门程序。通过这种方式我们让我们的程序得到了便捷完美的实现。3.5、键+灯+数码管+上下行、程序流程图3.
27、5.2、程序代码#include "spce061A.h"void 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=0x000
28、1; 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
29、_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 (u
30、nsigned int undly) int m;for(m=0;m<undly;m+)int n; for(n=0;n<undly;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=0x40
31、00;break;*P_Watchdog_Clear=0x0001;int go( int i,int m) if(i<m)*P_IOB_Data=0x0003;i=m;if(i>m)*P_IOB_Data=0x0002;i=m;*P_Watchdog_Clear=0x0001;、功能简介当按下一个键之后,按键所对应的灯亮、数码管显示所在楼层楼号,与此同时电梯前往按键所在楼层,电梯到达所在楼层后,电梯停止,数码管显示当前楼层楼号。、功能实现过程程序通过while(1)命令使程序始终循环运行,当按下一个键后,输出端B的值赋予一个对应按键的灯的值以及一个数码管的值来取代原先的值,以此来
32、实现按键之后对应的灯亮、数码管显示当前楼层楼号,然后通过一个运行子程序go(i,m)来使电梯运行到所需要前往的楼层,子程序中用变量i来记录当前楼层号,m来记录所要前往的楼层号通过判断来确定电梯是该上行还是下行,到达楼层后,通过一个停止子程序stop(x)让电梯停止,并给输出端B赋予一个当前楼层数码管的值来取代原先的值,以此来实现到达之后显示当前楼层楼号的效果。、问题的解决及收获这个程序让我们对子程序的引用使用方法以及返回值更加了解,通过定义全局变量可以让程序变量的定义变得更加便捷,但是在这个程序中我们并没有实现电梯经过某个楼层就显示楼层号的效果,这个为我们后续程序的编写提供了改进方向。我们最终
33、编写了一个子程序来控制数码管的变化,这个在后续程序中有叙述。3.6、键+灯+数码管+上下行+开关门、程序流程图3.6.2、程序代码由于程序过长且与最终的电梯运行大程序类似,故在此不详尽叙述程序代码内容,详细程序可参考最终电梯运行大程序。、功能简介电梯始终显示当前楼层楼号,当按下一个键之后,按键灯亮,该程序控制电梯关门,按键所对应的灯灭,进而运行到所要前往的楼层,在运行过程,数码管显示经过楼层的楼号直至最终到达下一楼层,电梯到达且停稳后,电梯开门。、功能实现过程首先,系统需要先清零,也就是把已经编好的程序写入到凌阳SPCE061A单片机中。程序通过while(1)始终运行,按键输入指令后,程序先
34、给输出端B一个关门的指令,通过判断程序确定电梯的上下行方向,运行过程中通过一个数码管的控制程序来控制数码管始终显示当前楼层楼号,此外电梯通过一个停止程序来控制电梯最终的停止,然后给输出端B一个开门指令结束程序运行。、问题的解决及收获在上个程序的基础上,我们给电梯增加了一个子程序来控制灯和数码管的显示,且给电梯一个开关门指令。值得一提的是,电梯在开关门的指令后需要接上一个延时程序,否则由于电梯扫描程序运行的速度过快,将会导致后续程序无法正常运行。这个问题在编写的时候给我们带来了很大的困扰,最终在请教了老师之后将其完美解决,使程序能够顺利运行。通过这个程序,我们了解到了延时程序在电梯运行过程中你的
35、重要性和不可缺少性。3.7、密码锁、程序流程图、程序代码#include "spce061A.h"#include<stdio.h>int 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_IO
36、B_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;m<undly;m+)for(n=0;n<undly;n+)n=n;void setup() if(*P_IOA_Data&0x0001)=0x000
37、1) 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_C
38、lear=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=
39、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_Watchd
40、og_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_Cle
41、ar=0x0001;、功能简介该程序是一个密码锁程序,程序先通过电梯内部按键输入设定一个密码,电梯关门,然后通过电梯外部按键输入一个密码,若之后输入的密码和之前的密码相同,则电梯开门,否则电梯将不会有任何反应,密码程序可以通过外部按键进行重设密码和输入密码重置的功能。、功能实现过程程序通过while(1)始终运行,先通过电梯内部按键给数组ai输入一个密码,然后给输出端B一个电梯关门的指令。通过电梯外部按键给数组bi输入一个密码,电梯通过判断程序,若ai=bi,则给输出端B一个开门指令。电梯可通过外部按键实现ai和bi的清零,也就是密码和输入密码的重置。、问题的解决及收获由于电梯扫描运行的速度过
42、快,当按下一个键之后,往往给整个数组都赋予了当前按键所对应的值,从而使得电梯不能正常的记录多个密码,我们通过一个按键清零指令和一个延时程序,使数组一次只记录一个密码,从而实现了密码的工作。3.8、创新程序(记忆训练)、程序流程图、程序代码#include "spce061A.h"#include<stdio.h>int 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;whil
43、e(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=
44、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)=
45、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
46、);*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_Data&0x4000)=0x4000) *P_IOB_Data=0x0008;*P_Watchdog_Clear=0x0001;*P_Watchdog_C
47、lear=0x0001;void dly (unsigned int undly) int m;for(m=0;m<undly;m+)int n; for(n=0;n<undly;n+)n=n;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;、功能简介电梯的灯先按一定顺序亮、灭一定数量,然后手动输入灯的亮、灭顺序,如果输入的顺序和电梯播放的顺序相同,那么电梯就开门,以此可以进行小朋友的记忆训练。、功能实现过程此程序有两个循环,一个循环为电梯自动播放灯亮灭程序,另一个循环为输入判断程序。电梯先进行第一个循环播放,然后跳出第一个循环进
48、入第二个循环,电梯通过外部按键输入值到数组ai中,并将ai的值与电梯预设的值(灯亮、灭顺序)相比较,若两者相同则电梯开门,电梯可通过外部按键重置输入ai,也可以通过外部按键跳回到第一个循环重新播放灯的亮灭。、问题的解决及收获此程序原意是希望电梯能够自动随机播放灯的亮、灭,但由于对于单片机程序命令的不熟悉,不知道随机播放的命令,最后只能退而求其次,让电梯播放预先设定的一组灯的亮灭顺序,对于这一点,希望我们能通过后续的学习将其改进。第四章、电梯模型完整控制程序4.1、主程序、程序流程图4.1.2、程序代码#include "spce061A.h"int input,t=0,x=
49、0; void main()*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0x0002;while(1) light(1);digital(1);t=*P_IOA_Data;if(*P_IOA_Data&0x000f)!=0x0000)x=*P_IOA_Data;*P_Watchdog_Clear=0x0001;if(t&0x0400)=0x0400)digital(1);if(*P_IOB_Data&0x0010)=0x0010
50、|(x&0x0001)=0x0001) *P_IOB_Data=*P_IOB_Data&0xffef;x=x&0x000e;door(1);*P_Watchdog_Clear=0x0001;if(x&0x0002)=0x0002|(x&0x0004)=0x0004|(x&0x0008)=0x0008|(*P_IOB_Data&0x0020)=0x0020|(*P_IOB_Data&0x0040)=0x0040|(*P_IOB_Data&0x0080)=0x0080|(*P_IOB_Data&0x0100)=0x01
51、00|(*P_IOB_Data&0x0200)=0x0200)*P_IOB_Data=(*P_IOB_Data&0xfffc)|0x0003;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;if(t&0x0800)=0x0800)digital(1);if(*P_IOB_Data&0x0001)=0x0001)if(*P_IOB_Data&0x0020)=0x0020|(x&0x0002)=0x0002)*P_IOB_Data=*P_IOB_Data&0xffdf;x=x&0x0
52、00d;*P_IOB_Data=*P_IOB_Data&0xfffd;door(1);*P_Watchdog_Clear=0x0001;else if(*P_IOB_Data&0x0080)=0x0080|(*P_IOB_Data&0x0100)=0x0100|(*P_IOB_Data&0x0200)=0x0200|(x&0x0004)=0x0004|(x&0x0008)=0x0008)*P_IOB_Data=(*P_IOB_Data&0xfffc)|0x0003;dely(100);*P_Watchdog_Clear=0x0001;else if(*P_IOB_Data&0x0040)=0x0040)*P_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度塔吊安全监控安装施工劳务分包合同
- 二零二五年度房产买卖合同关于房屋附属设施使用协议4篇
- 口腔科2025年度公益活动策划与执行合同3篇
- 二零二五年度土地储备与交易居间合同
- 2025年度消防器材租赁与维修专业承包服务协议3篇
- 2025年度临时仓储仓储货物保险及理赔合同
- 2025年度牧草种植与农业科技研发合同范本4篇
- 2024维修电器合同
- 2025年度配电箱模块化设计与制造合同4篇
- 二零二五年度内墙装饰工程碳排放管理合同
- 洗浴部前台收银员岗位职责
- 2024年辅警考试公基常识300题(附解析)
- GB/T 43650-2024野生动物及其制品DNA物种鉴定技术规程
- 暴发性心肌炎查房
- 口腔医学中的人工智能应用培训课件
- 工程质保金返还审批单
- 【可行性报告】2023年电动自行车项目可行性研究分析报告
- 五月天歌词全集
- 商品退换货申请表模板
- 实习单位鉴定表(模板)
- 数字媒体应用技术专业调研方案
评论
0/150
提交评论