单片机控制电梯模型教学教1Word文件下载.docx
- 文档编号:17708819
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:54
- 大小:245.97KB
单片机控制电梯模型教学教1Word文件下载.docx
《单片机控制电梯模型教学教1Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机控制电梯模型教学教1Word文件下载.docx(54页珍藏版)》请在冰豆网上搜索。
(信号输入)
*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
三层到达
0x2000
A13
四层到达
0x4000
A14
开门(内部按键)
0x8000
A15
关门(内部按键)
表1.2是单片机B口Data控制命令表:
表1.2:
B口
(信号输出)
*P_IOB_Data
B0
电梯上下运行(1上0下)
B1
电梯运行选通(1行0停)
B2
开关门运行(1开0关)
B3
开关门选通(1行0禁)
B4
一层上灯
B5
二层上灯
B6
二层下灯
B7
三层上灯
B8
三层下灯
B9
四层下灯
B10
开门到位
B11
关门到位
B12
数码管显示层数
B13
B14
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;
1.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.1灯从下到上循环亮
2.1.1流程图
开始
系统初始化
输出单个灯控制信号
相应的灯亮起
2.1.2程序
#include<
spce061A.h>
#defineD10x0010
#defineD200x0040
#defineD210x0020
#defineD300x0100
#defineD310x0080
#defineD40x0200
voiddly(unsignedintundly)
{
intm;
for(m=0;
m<
undly;
m++)
{
intn;
for(n=0;
n<
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循环语句,是程序看起来简单明了。
在这一段程序中还有一个时间延迟子程序,通过改变数值大小从而实现改变相邻灯亮起的时间间隔的功能。
2.2灯从下到上依次亮(后一个亮时前一个保持亮)
2.2.1流程图
输出灯控制信号
输出另一个灯控信号
相应灯亮起,之前灯灭掉
2.2.2程序
#defineD200x0050
#defineD210x0070
#defineD300x0170
#defineD310x01f0
#defineD40x03f0
intshunxu[]={0,D1,D20,D21,D30,D31,D4};
=6;
2.2.3功能简介及实现过程
本程序能实现的功能是外部按键的灯从下到上依次亮起,在一个灯亮起的同时前一个已经亮起的灯仍然保持亮,知道全部的灯都亮起后再同时灭掉,而后开始下一个循环。
并且可以调节相邻两个灯亮起的时间间隔出的功能。
本程序同样采用采用宏定义功能,将同时亮着的各个灯的端口地址定义在一个一个简单的代码内,最后在主程序中将代码全部放入一个数组中,这样可以方便地使用for循环语句,是程序看起来简单明了。
2.3灯成组亮
2.3.1流程图
同时输出多个灯控制信号
2.3.2程序
#defineD10x0050
#defineD200x0120
#defineD210x0280
#defineD300x0070
#defineD310x0380
intoutput=0;
intt=0;
2.3.3功能简介及实现过程
本程序能实现的功能是一层上和二层下的灯同时亮,然后二层上和三层下的灯同时亮,然后三层上和四层下的灯同时亮,然后一层上、二层下和三层下的灯同时亮,然后二层上、二层下和三层下的灯同时亮,然后所有的灯全部亮起,而后所有灯灭掉开始新一轮循环。
在一组灯亮起的同时前一组已经亮起的灯灭掉,直到最后一组灯都亮起后再同时灭掉,而后开始下一个循环。
本程序同样采用采用宏定义功能,将同时亮着的一组灯的各个端口地址定义在一个一个简单的代码内,最后在主程序中将代码全部放入一个数组中,这样可以方便地使用for循环语句,是程序看起来简单明了。
现在可以看出以上三个灯控制程序基本上是一样的,只是在宏定义语句中改变了每个代码所代表的端口地址值,其它的主程序语句完全一样。
这也反映出了使用宏定义语句的程序的优越性。
当然也可以采用其它语句来实现上述功能,比如采用while循环控制语句内嵌控制,每次只控制一个灯的亮或者灭,然后使用“或”逻辑语句实现前后亮灯的独立性或者实现灯的成组亮。
这样的程序看起来简单明了,便于理解,但是程序过于冗杂。
2.4数码显示
2.4.1流程图
输出数字显示信号
显示相应的数字
2.4.2程序
*P_IOB_Data=0x2000;
2.4.3功能简介及实现过程
本程序实现的功能非常简单,就是让数码管显示一个数字2。
实现的过程也比较简单,只需将要显示的楼层数输入到相应的端口地址内就行了。
第三章按键与灯控制
3.1按电梯按键,相应灯亮并保持
3.1.1流程图
按键信号扫描
是否有按键信号请求
N
Y
相应按键灯亮
3.1.2程序
voidmain()
intinput,t=0;
t=*P_IOA_Data;
if((t&
0x0010)==0x0010)
{*P_IOB_Data=*P_IOB_Data|0x0010;
*P_Watchdog_Clear=0x0001;
0x0020)==0x0020)
{*P_IOB_Data=*P_IOB_Data|0x0020;
0x0040)==0x0040)
{*P_IOB_Data=*P_IOB_Data|0x0040;
0x0080)==0x0080)
{*P_IOB_Data=*P_IOB_Data|0x0080;
0x0100)==0x0100)
{*P_IOB_Data=*P_IOB_Data|0x0100;
0x0200)==0x0200)
{*P_IOB_Data=*P_IOB_Data|0x0200;
*P_Watchdog_Clear=0x0001;
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,三层上键和下键的灯都亮。
3.1.4方法及建议
此程序的方法基础即按键控制灯亮,通过把按键信号传给A口,经单片机识别之后执行B口命令,则相应的灯亮起,编程时注意不要把相应的端口定义错,并且注意看门狗的使用,以免程序自动跳出,最重要的是对“或”语句的理解和使用。
3.2按电梯按键,相应灯亮但之前的灭掉
3.2.1流程图
Y
相应按键亮灯,之前的灯灭
3.2.2程序
intinput,t=0;
{*P_IOB_Data=0x0010;
*P_Watchdog_Clear=0x0001;
{*P_IOB_Data=0x0020;
{*P_IOB_Data=0x0040;
{*P_IOB_Data=0x0080;
{*P_IOB_Data=0x0100;
{*P_IOB_Data=0x0200;
3.2.2功能简介及实现过程
通过按电梯外部按键,相应按键会亮灯。
本程序通过对系统的初始化之后,识别电梯外部按键,即将A口定义为相应的按键层数,然后B口得到相应的信号,使电梯按键灯亮起。
再按四层下按键,则四层下按键灯亮起,此时二层灯会灭掉,这里涉及到“与语句”,注意体会它与“或语句”的区别和使用方法,如之前的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,即只有三层上灯亮,三层下灯将灭掉。
3.2.3方法及建议
此处涉及到的“或语句”和“与语句”在电梯的程序中经常用到,要认真体会其含义和用法才能运用自如,这就需要在编程中练习使用,以达到运用自如。
3.3按电梯按键,数码管显示相应层数
3.3.1流程图
N
显示相应的楼层数
3.3.2程序
intinput,t=0;
{*P_IOB_Data=0x1000;
{*P_IOB_Data=0x2000;
{*P_IOB_Data=0x3000;
{*P_IOB_Data=0x4000;
3.3.3功能简介及实现过程
通过按电梯外部按键,数码管能显示相应的层数。
本程序通过对系统的初始化之后,识别电梯外部按键,即将A口定义为相应的按键层数,然后B口得到相应的信号,使数码管显示相应的层数。
按电梯2层上按键,则对应的A口即为*P_IOA_Data=0x0020,此时B口*P_IOB_Data=0x2000,即数码管显示2层。
3.3.4方法及建议
此程序相对基础,对单片机的接口定义的理解很有帮助,编辑时注意接口对应即可,对程序做一些自己的改动以实现新的功能,可练习对单片机的灵活使用。
第四章电梯上下运行
4.1电梯三四层无开关门无层数显示循环运作
4.1.1流程图
是否有关门到位信号
N
关门
电梯上行
N
是否四层到达
暂停
电梯下行
是否三层到达
4.1.2程序
inti,j,p;
*P_IOB_Dir=0x0300;
*P_IOB_Attri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 电梯 模型 教学