电梯控制程序源代码(带流程图-功能分解、源代码)

合集下载

电梯程序源代码

电梯程序源代码
{
OuterUpButton[floor-LowerLayers-1] = 1;//没有楼
}
}
}
}
cout<<endl;
//电梯外部各楼层输入下楼信号
cout<<"请电梯外部乘客输入下楼信号,"<<endl;
cout<<"多个楼层用空格隔开,结束输入0:";
while(true)
{
cin>>floor;
{
}
void CElevator::PressOuterButton(int direction, int floor)
{
if(direction==0)
OuterUpButton[floor-LowerLayers-1] = 1;
else
OuterDownButton[floor-LowerLayers-1] = 1;
#ifndef CELEVATOR_H
#define CELEVATOR_H
const int MostLayers = 100;
class CElevator
{
public:
CElevator();//构造函数
CElevator(int uLayers, int lLayers);//构造函数
CElevator(CElevator &myElevator);//拷贝构造函数
}
}
CElevator::CElevator(CElevator &myElevator):UpperLayers(myElevator.UpperLayers),LowerLayers( myElevator.LowerLayers)

五层电梯PLC控制源程序

五层电梯PLC控制源程序
项目1_lzfwhytest12 / 主程序 (OB1)
块:
主程序
作者:
创建时间: 2010.11.30
修改时间: 2010.12.10
15:48:59 11:33:54
L0.0 L0.1 LB1
符号 电梯上行状态 电梯下行状态 测试
变量类型
数据类型
注释
TEMP
BOOL
TEMP
BOOL
TEMP
BYTE
限位开关五层 S1.5
M0.0 /
M0.1
M0.1 /
S0.2
S0.3
S0.4
S0.5
S0.6
S2.1
S2.2
S2.3
S2.4
限位开关四层 S1.4
M0.0 /
M0.1
M0.1 /
S0.0 S0.1
S0.2
S0.3
S0.4
M0.1 S 1
M0.0 R 1
14 / 37
限位开关三层 S1.3
限位开关二层 S1.2
限位开关一层
S1.1 S 1
S1.2 R 1
S1.3 R 1
S1.4 R 1
S1.5 R 1
符号 限位开关一层
地址 I1.0
注释
网络 4
电梯下降到一层, 如果有外呼需求。则一层外呼指示灯灭 如果有内呼需求则一层内呼指示灯灭 (M0.0表示电梯下降,M0.2表示停下)
限位开关一层
S0.0 S2.1
S0.0 R 1
外呼选层三上
限位开关三层 /
符号 外呼选层三上 限位开关三层
地址 I0.4 I1.2
S0.4 S 1
注释
4 / 37
项目1_lzfwhytest12 / 主程序 (OB1)

电梯控制流程图

电梯控制流程图

4.4 流程图电梯上下行流程图见图4-4。

假设电梯停在N(N=1,2,3,4)楼,M楼有信号,M >N时,电梯上行;M<N时,电梯下行。

图4-4 电梯上下行流程图在电梯运行过程中,电梯上升(或下降)途中,任何反方向下降(或上升)的外呼梯信号均不响应,但如果反向外呼梯信号前方向无其它内、外呼梯信号时,则电梯响应该外号。

电梯应具有最远反向外梯响应功能。

例如:电梯在一楼,而同时有二层向下外呼梯,三层向下外呼梯,四层向下外呼梯,则电梯先去四楼响应四层向下外呼梯信号。

电梯响应流程图见图4-5。

图4-5 电梯响应流程图当电梯到达系统控制的目标楼层时,控制系统发出开门信号,电梯门开,当门开到开门限位时,计时3秒钟,然后关门,直到关门限位产生信号。

此过程期间,按开门按钮电梯门打开,按关门电梯门关闭,并且当门关闭动作时,门间来人会使光电传感器产生信号,控制系统发出开门信号,电梯开关门流程图见图4-6。

图4-6 电梯开关门流程图4.5 操作原理简要说明电梯由安装在各楼层厅门口的上升和下降呼叫按钮进行呼叫操纵,其操纵内容为电梯运行方向。

电梯轿箱内设有楼层内选按钮S1~S4,用以选择需停靠的楼层。

L1为一层指示、L2为二层指示、L3为三层指示、L4为四层指示,SQ1~SQ4为到位行程开关。

具体如下:1、开始时,电梯处于任意一层。

2、当有外呼梯信号到来时,电梯响应该呼梯信号,到达该楼层时,电梯停止运行,电梯门打开,延时3S后自动关门。

3、当有内呼梯信号到来时,电梯响应该呼梯信号,到达该楼层时,电梯停止运行,电梯门打开,延时3S后自动关门。

4、在电梯运行过程中,电梯上升(或下降)途中,任何反方向下降(或上升)的外呼梯信号均不响应,但如果反向外呼梯信号前方向无其它内、外呼梯信号时,则电梯响应该外号。

5、电梯应具有最远反向外梯响应功能。

例如:电梯在一楼,而同时有二层向下外呼梯,三层向下外呼梯,四层向下外呼梯,则电梯先去四楼响应四层向下外呼梯信号。

三层电梯控制系统程序设计 基于plc程序控制

三层电梯控制系统程序设计 基于plc程序控制

三层电梯控制系统plc课程设计一、内容摘要可编程控制器作为一种工业控制微型计算机,它以其编程方便、操作简单尤其是它的高可控性等优点,在工业生产过程中得到了广泛的应用。

它应用大规模集成电路,微型机技术和通讯技术的发展成果,逐步形成了具有多种优点和微型,中型,大型,超大型等各种规格的系列产品,应用于从继电器控制系统到监控计算机之间的许多控制领域。

随着社会的不断发展,楼房越来越高,而电梯成为了高层楼房的必须设备。

电梯从手柄开关操纵电梯、按钮控制电梯发展到了现在的群控电梯,为高层运输做出了不可磨灭的贡献。

PLC在电梯升降控制上的应用主要体现在它的逻辑开关控制功能。

由于PLC具有逻辑运算,计数和定时以及数据输入输出的功能。

在电梯升降过程中,各种逻辑开关控制与PLC很好的结合,很好的实现了对电梯的控制。

在PLC课程设计中,我组设计了一个三层电梯控制系统,并且将西门子公司S7-200系列可编程控制器与其结合并应用起来,在学完《电气控制与PLC应用》课程后,我们在设计过程中较为得心应手,不至于从头开始。

整个过程包括了方案讨论,程序设计,程序修改,上机调试等,在程序设计方面花了比较多的时间,主要考虑到电梯分别停在一层、二层和三层时在其他楼层呼叫等各种情况。

每当遇到困难时,我组都积极与老师联系讨论,深入分析研究问题,在整个过程中,我与我的组员都相互配合,相互学习。

二、目录1. 概述-------------------------------------------------------------2. 硬件电路设计及描述----------------------------------------3. 软件设计流程及描述----------------------------------------4. 源程序代码----------------------------------------------------5. 课程设计体会-------------------------------------------------6. 参考文献-------------------------------------------------------1. 概述我组设计的三层电梯控制系统的主要功能有:①楼层指示灯亮时表示停在相应的楼层,②每当停在各楼层时其楼层指示灯闪烁1秒接着常亮,③有呼叫的楼层有响应,反之没有,④电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向的呼叫均无效。

51单片机模拟智能电梯系统代码及注释

51单片机模拟智能电梯系统代码及注释

#include<reg51.h>#define uint unsigned int#define uchar unsigned char//延时程序,以毫秒为单位,用软件计时,输入的参数为毫秒数void Delay_ms( uint Time);//电梯向上走void Up();//电梯向下走void Down();//报警函数void Warnning();//获取目的楼层void Destination();//显示某一楼层void Display( uchar n, uchar a);//闪烁显示到达的楼层void Flash( uchar a);//点阵键盘扫描uchar KBScan();//延时void dl_ms();//解析出按键所代表的楼层uchar Reprsent();#include "settings.h"uchar code TAB[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit P0_0 = P0^0;sbit P0_1 = P0^1;sbit P0_2 = P0^2;sbit P0_3 = P0^3;sbit P0_4 = P0^4;sbit P0_5 = P0^5;sbit P0_6 = P0^6;sbit P0_7 = P0^7;sbit P1_0 = P1^0;uchar lift = 1;//电梯所在的楼层uchar destination1 = 1;//电梯的目的楼层uchar flag = 0;//进入电梯程序的标志uchar key;//按键的键码uchar request[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};//1~8楼有无请求,有请求为1 uchar status = 1;//电梯往上还是往下走,1为上,0为下//报警的响声的频率产生void Timer1() interrupt 3{P1_0 = ~P1_0;TH1 = 0xfc;TL1 = 0x0c;}int main(){uchar i;P0 = 0xff;P2 = 0x76; //数码管‘H’EA = 1; //开启外部中断INT0EX0 = 1;IT0 = 1;while(1) //检查flag标志{ //flag初始化为0if(flag == 1) //在中断中将其置1{break;}P1 = 0x01; //数码管跑马显示HDelay_ms( 100); //flag置1后则进入电梯程序for(i = 0; i < 5; ++i){P1 = P1 << 1;Delay_ms( 100);}}while(1) //电梯程序的循环{if( (key = KBscan()) == 0x77) //若点阵按键右下角的按键(其代码为0x77)按下{Warnning(); //则报警}else{Destination(); //查询有无楼层请求到达if( destination1 >= lift) //请求的楼层比要到达的楼层高{Up(); //电梯向上走}else{Down(); //否则电梯向下走}}}return 0;}//中断请求,将flag置1,表示要进入电梯程序void Int0() interrupt 0{flag = 1;}//延时程序,以毫秒为单位,用软件计时,输入的参数void Delay_ms( uint Time){uint i = 0, j = 0;for(i = 0; i < Time; ++i){for(j = 0; j < 125; ++j);}}//电梯向上走void Up(){uchar n, m; //n为所在楼层,m为存储查询有无楼层请求的变量uchar i; //循环控制status = 1; //置1表示电梯向上走for( n = lift; n <= destination1; ++n) //电梯到达目的楼层之前往上走{Display( n, 1); //没到达一楼就显示该楼层数lift = n;m = Represent(); //读取点阵键盘if( m == 9) //报警键按下则报警{Warnning();}else //有楼层请求到达{ //将对应的request置1request[m] = 1;}for(i = 1; i <= 8; ++i) //若请求到达的楼层在所在楼层和目的楼层之间{ //则停下闪烁显示if( request[i] == 1 && i == n) //并将其对应的request清零{request[i] = 0;Flash( 1);}}}--n;lift = n;Flash( 1); //到达目的楼层闪烁显示该楼层}//电梯向下走void Down(){uchar n, m; //n为所在楼层,m为存储查询有无楼层请求的变量uchar i; //循环控制status = 0; //置1表示电梯向上走for( n = lift; n >= destination1; --n) //电梯到达目的楼层之前往下走{Display( n, 0); //没到达一楼就显示该楼层数lift = n;m = Represent(); //读取点阵键盘if( m == 9) //报警键按下则报警{Warnning();}else //有楼层请求到达{ //将对应的request置1request[m] = 1;}for(i = 1; i <= 8; ++i) //若请求到达的楼层在所在楼层和目的楼层之间{ //则停下闪烁显示if( request[i] == 1 && i == n) //并将其对应的request清零{request[i] = 0;Flash( 0);}}}++n;lift = n;Flash( 0); //到达目的楼层闪烁显示该楼层}//报警函数void Warnning(){TMOD = 0x10; //T1定时器初始化ET1 = 1;TH1 = 0xfc;TL1 = 0x0c;TR1 = 1;while(1){P1 = 0x02; //显示STOPP2 = 0x6D;Delay_ms( 5);P1 = 0x04;P2 = 0x07;Delay_ms( 5);P1 = 0x08;P2 = 0x3f;Delay_ms( 5);P1 = 0x10;P2 = 0x73;Delay_ms( 5);if( KBScan() != 0x77) //报警键没有按{ //则跳出,并停止喇叭响TR1 = 0;break;}}}//获取目的楼层void Destination(){uchar j, n; //j循环控制变量,n存储度点阵键盘变量n = Represent(); //有键按下request[n] = 1; //其对应的楼层request置1if( status == 1) //若电梯向上走则从高楼层到低楼层扫描{ //以此达到判断优先级的目的for(j = 8; j >= 1; --j){if( request[j] == 1){request[j] = 0; //哪一层有请求destination1 = j; //则将目的楼层设为该楼break; //并将其对应的request置1,然后跳出}}}else if( status == 0) //若电梯向下走则从低楼层到高楼层扫描{ //以此达到判断优先级的目的for(j = 1; j <= 8; ++j){if( request[j] == 1){request[j] = 0;destination1 = j;break;}}}}//显示某一楼层void Display( uchar n, uchar a){uchar i, b;if(a == 1){b = 0x73;}else if(a == 0){b = 0x5E;}for(i = 0; i < 60; ++i){P1 = 0x20;P2 = b;Delay_ms( 10);P1 = 0x02;P2 = TAB[n];Delay_ms( 10);}}//闪烁显示到达的楼层void Flash( uchar a){uchar i, j, b;uchar m;if(a == 1) //a=1表示向上{b = 0x73; //七段码P}else if(a == 0) //a=0表示向下{b = 0x5E; //七段码d}for(i = 0; i < 5; ++i){m = Represent(); //闪烁时判断有无楼层请求到达request[m] = 1;for(j = 0; j < 15; ++j) //闪烁显示楼层和P或者d{P1 = 0x20; //先显示P或者d以及楼层数P2 = b; //再显示P或者d而不显示楼层数Delay_ms( 10); //以此达到闪烁的目的P1 = 0x02;P2 = TAB[lift];Delay_ms( 10);}for(j = 0; j < 15; ++j){P1 = 0x20;P2 = b;Delay_ms( 10);P1 = 0x02;P2 = 0x00;Delay_ms( 10);}}OPERATIONS.C#include "settings.h"//延时void dl_ms(){uchar i;for(i = 0; i < 200; ++i);}//点阵键盘扫描uchar KBScan(){uchar sccode, recode; //sccode低位,recode高位uchar i, a; //i循环控制,a读取P0口P0 = 0x0f;if( (P0 & 0x0f) != 0x0f) //有无键按下{dl_ms(); //消抖延时if( (P0 & 0x0f) != 0x0f) //有键按下则继续{recode = 0x7f;for(i = 1; i <= 4; ++i){P0 = recode; //从P0的最高位开始扫描,即点阵键盘第四行if( (P0 & 0x0f) != 0x0f){a = P0; //若该行有键按下,则返回其代码sccode = a & 0x0f;recode = recode & 0xf0;return (sccode + recode);}else{recode = (recode >> 1) | 0x80; //若没有则扫描其上面一行}}}}return 0;}//解析出按键所代表的楼层uchar Represent(){uchar key, n;key = KBScan();switch( key){case 0xee: n = 1; break;case 0xed: n = 2; break;case 0xeb: n = 3; break;case 0xe7: n = 4; break;case 0xde: n = 5; break;case 0xdd: n = 6; break;case 0xdb: n = 7; break;case 0xd7: n = 8; break;case 0x77: n = 9; break;default: n = 0; break;}return n;}。

电梯控制程序源代码(带流程图-功能分解、源代码)

电梯控制程序源代码(带流程图-功能分解、源代码)

电梯控制程序源代码(带流程图-功能分解、源代码)《综合电子创新训练》研究报告研究题目: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 实验用电梯模型 (8)第三章与电梯模型相关的实验程序 (10)3.1数码管连续显示 (10)3.1.1 程序流程图 (10)3.1.2 功能简介 (10)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.2 功能简介 (14)3.3.3 功能实现过程 (14)3.3.4 问题的解决及收获 (15)3.4 外部按键上下行 (16)3.4.1 程序流程图 (16)3.4.2 功能简介 (16)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功能简介 (23)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.2功能简介 (28)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函数) (37)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 问题的解决及收获 (38)4.5 电梯开关门模块(openandclose函数) (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课题背景与目的现代社会中,电梯已经成为不可缺少的运输设备。

PLC控制电梯程序

PLC控制电梯程序

可编程控制器控制电梯系统的设计[摘要]: 随着微电子技术和计算机技术的迅速发展,PLC(即可编程控制器)在工业控制领域内得到十分广泛地应用。

PLC是一种基于数字计算机技术、专为在工业环境下应用而设计的电子控制装置,它采用可编程序的存储器,用来存储用户指令,通过数字或模拟的输入/输出,完成一系列逻辑、顺序、定时、记数、运算等确定的功能,来控制各种类型的机电一体化设备和生产过程。

[关键词]: 可编程控制器自动控制计算机技术电梯PLC AUTOMATIVE CONTROLCOMPUTER TECNOLOGY ELEV ATOR目录前言PLC控制电梯的意义 (3)第一章概述 (4)1.1 PLC的由来 (4)1.2 PLC的分类与特点 (5)1.3 PLC的应用领域与发展趋势 ..............................5. 1.4 PLC的结构和工作原理 .. (5)1.5 PLC程序的表达方式 (6)1.6 PLC的工作方式 (6)1.7 PLC应用系统的设计步骤 (6)1.8 研究目标 (9)第二章 PLC控制电梯的设计 (9)2.1 工艺要求 (9)2.2 方案与控制流程 (10)2.3 梯形图设计与程序指令 (11)2.4 说明部分 (20)第三章讨论 (22)参考文献 (23)编后语 (24)附图1 (25)前言———PLC控制电梯的意义电梯是随着高层建筑的兴建而发展起来的一种垂直运输工具。

多层厂房和多层仓库需要有货梯;高层住宅需要有住宅梯;百货大楼和宾馆需要有客梯,自动扶梯……。

在现代社会,电梯已像汽车、轮船一样,成为人类不可缺少的交通运输工具。

据统计,美国每天乘电梯的人次多于乘载其它交通工具的人数。

当今世界,电梯的使用量已成为衡量现代化程度的标志之一。

追溯电梯这种升降设备的历史,据说它起源于公元前236年的古希腊。

当时有个叫阿基米德的人设计出-----人力驱动的卷筒式卷扬机。

电梯控制代码

电梯控制代码

#include"reg52.h"#define uchar unsigned char#define uint unsigned intuchar DZ1[]={0x08,0x14,0x2a,0x08,0x08,0x08};uchar DZ2[]={0xbf,0xdf,0xef,0xf7,0xfd,0xfb};uchar DZ3[]={0x08,0x08,0x08,0x2a,0x14,0x08};uchar shuma[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};ucharLC[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xedb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //楼层编码uchar key,dir,floor,zancun,s,x,p2;sbit DA=P0^0;sbit DB=P0^1;sbit DC=P0^2;sbit DD=P0^3;sbit w1=P0^4;//数码管位选1sbit w2=P0^5;//数码管位选2sbit wa=P0^6;//点阵阳极使能sbit wb=P0^7;//点阵阴极使能sbit EN=P3^0;//电机使能sbit CW=P3^1;//方向控制sbit clock=P3^2;//速度控制sbit red=P3^3;//上键显示sbit green=P3^4;//下键显示sbit beep=P3^5;//报警void delay1(uchar z){uchar i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}void delay2(uchar z){uchar i,j;for(i=z;i>0;i--){if(key==0)//减短代码运行时间,使用更多时间扫描键盘break;elsefor(j=110;j>0;j--);}}uchar key_scan(void){uchar scode,recode;P1=0xf0;if((P1&0xf0)!=0xf0){delay1(2);if((P1&0xf0)!=0xf0)//有键按下{scode=0xfe;//辅助变量,设定行while((scode&0x10)!=0){P1=scode;//将某一行设为0,从而判断是否为该行if((P1&0xf0)!=0xf0){recode=P1&0xf0;//列码scode=scode&0x0f;//行码return(scode+recode);//按键坐标}elsescode=(scode<<1)|0x01;//下一行判断}}}return 0;}void display1(void)//上箭头显示{uchar i,j;for(i=0;i<1;i++){wa=1;P2=DZ1[i];for(j=500;j>0;j--);wa=0;wb=1;P2=DZ2[i];for(j=500;j>0;j--);wb=0;}}void display2(void)//下箭头显示uchar i,j;for(i=0;i<1;i++){wa=1;P2=DZ3[i];for(j=500;j>0;j--);wa=0;wb=1;P2=DZ2[i];for(j=500;j>0;j--);wb=0;}}void shuxian(uchar z)//数码管显示{uchar temp;w1=0;P0=shuma[z/10];temp=P0;P0=P0|temp;w1=1;w2=0;P0=shuma[z%10];temp=P0;P0=P0|temp;w2=1;}void init(void)//初始化{dir=0;w1=1;w2=1;wa=0;wb=0;floor=0;zancun=1;beep=1;EN=0;EA=1;ET1=1;//T1中断允许TMOD=0x10;//T1的8位计数TH1=(65536-50000)/256;TL1=(65536-50000)%256;void main(void){init();while(1){key=key_scan();if(key!=0){delay2(10);if(key!=0){TR1=1;switch(key){case 14:dir=1;//按键储存上键值break;case 15:dir=2;//按键储存下键值break;// default ;}if(dir==1){shuxian(s);display1();if((zancun-floor)>=0){switch(key){case 1:floor=1;break;case 2:floor=2;break;case 3:floor=3;break;case 4:floor=4;break;case 5:floor=5;break;case 6:floor=6;break;case 7:floor=7;break;case 8:floor=8;break;case 9:floor=9;break;case 10:floor=10;break;case 11:floor=11;break;case 12:floor=12;break;case 13:floor=13;break;case 14:floor=14;break;}}else //不符逻辑报警停止电机转动beep=0;EN=0;TR1=0;}if(dir==0){shuxian(x);display2();if((zancun-floor)<=0){switch(key){case 1:floor=1;break;case 2:floor=2;break;case 3:floor=3;break;case 4:floor=4;break;case 5:floor=5;break;case 6:floor=6;break;case 7:floor=7;break;case 8:floor=8;break;case 9:floor=9;break;case 10:floor=10;break;case 11:floor=11;break;case 12:floor=12;break;case 13:floor=13;break;case 14:floor=14;break;}}else //不符逻辑报警停止电机转动EN=0;TR1=0;beep=0;}}TR1=0;}}}void timer1(void) interrupt 3 using 0{uchar t;uint i;TH1=(65536-50000);TL1=(65536-50000);if(t==20){clock=~clock;//调节电机速度i++;}if(i==1000){if(dir==1){s++;zancun++;//上键值暂存}if(dir==2){x--;zancun--;//下键值暂存}}}。

电梯控制系统C语言程序

电梯控制系统C语言程序
for(a=2;a<befnum+1-num;a++)
{
TR1=1;
step_down();
TR1=0;
}
}
}
void main()
uint circle;
uchar table_up[]={0x06,0x0c,0x09,0x03}; //步进电机上楼
uchar table_down[]={0x03,0x09,0x0c,0x06}; //步进电机下楼
uchar const lightopen[]={0x00,0x18,0x3c,0x7e,0xff};//流水灯指示电梯门打开
befnum=num;
}
}
befnum=num;
delay(10);
kaimen();
}
///////////////////////////////////下 楼///////////////////////////////////////////
uchar select[]={0xbf,0x7f}; //选择数码管数组,依次选择1,2,..,8
uchar i,j,num,aa,befnum,lightnum,dnum,abcd,uplay,a,key,define,loop,lable;
{ P0=shuma[dnum/10];
P2=select[0];
delay(1);
P0=shuma[dnum%10];
P2=select[1];
delay(1);
}
void delay2(uint cnt) //延时
h=P3&0x0f;

电梯调度算法(源代码)

电梯调度算法(源代码)

#include <stdio.h> #include <stdlib.h>#include <string.h>#include <conio.h>typedef struct _proc{char name[32];/*定义进程名称*/int team;/*定义柱面号*/int ci;/*定义磁道面号*/int rec;/*定义记录号*/struct _proc *prior;struct _proc *next;}PROC;PROC *g_head=NULL,*g_curr=NULL,*local;int record=0;int yi=1;void init(){PROC *p;*/g_head = (PROC*)malloc(sizeof(PROC));g_head->next = NULL;g_head->prior = NULL;p = (PROC*)malloc(sizeof(PROC)); strcpy(p->name, "P1");p->team=100;p->ci=10;p->rec=1;p->next = NULL;p->prior = g_head;g_head->next = p;g_curr=g_head->next;p = (PROC*)malloc(sizeof(PROC)); strcpy(p->name, "P2");p->team=30;p->ci=5;/*初始化链表(初始I/O表)p->rec=5;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC));strcpy(p->name, "P3");p->team=40;p->ci=2;p->rec=4;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC)); strcpy(p->name, "P4");p->team=85;p->ci=7;p->rec=3;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=p;p = (PROC*)malloc(sizeof(PROC)); strcpy(p->name, "P5");p->team=60;p->ci=8;p->rec=4;p->next = NULL;p->prior = g_curr;g_curr->next = p;g_curr=g_head->next;local = (PROC*)malloc(sizeof(PROC)); strcpy(local->name, "P0");local->team=0;/*选中进程*/local->ci=0;local->rec=0;local->next=NULL;local->prior=NULL;}void PrintInit()/*打印I/O表*/{PROC *t = g_head->next;printf("-------------------------------------\n"); printf("---------I/O LIST---------\n"); printf(" processteamcirec\n");while(t!=NULL){printf("%4s %8d %8d %5d\n", t->name, t->team, t->ci, t->rec );t = t->next;}printf("\n\nCurrent process is :\n");printf("------------------------------\n\n");printf(" processteamcirec\n");printf("%4s %8d %8d %5d\n", local->name, local->team, local->ci, local->rec ); switch(yi){case 1:{printf("current direction is UP\n");break;}case 0:{printf("current direction is down\n");break;}}}void acceptreq()/*接受请求函数*/{PROC *p;p = (PROC*)malloc(sizeof(PROC));printf("pleaseinputtheinformationofprocess\nprocess-name:\nprocess-team\nprocess-ci\nprocess-rec\n"); printf("\n");scanf("%s",p->name);printf("2.team 0-199\n");thenewscanf("%d",&p->team);/*输入请求进程信息*/ printf("3.ci 0-19\n");scanf("%d",&p->ci);printf("4.rec 0-7\n");scanf("%d",&p->rec);getchar();g_curr=g_head;/*将此节点链入I/O请求表*/while(g_curr->next!=NULL)g_curr=g_curr->next;p->next=NULL;p->prior=g_curr;g_curr->next=p;g_curr=g_head->next;printf("NEW I/O LIST\n\n");PrintInit();/*将新的I/O请求表输出*/}void qddd()/*驱动调度函数*/{PROC *out;int min;int max=g_head->next->team;if (g_head->next==NULL);/*若已全部调度,则空操作*/else{switch (yi){case 1:{min=g_head->next->team;out=g_head->next;/*选出最小的team进程,模拟启动此进程*/strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next){if (g_curr->team > record){ min = g_curr->team;break;}}for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next){if (min>=g_curr->team&&g_curr->team>record){min=g_curr->team;out=g_curr;strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;}}printf("\n-----------------------\n");printf("the process choosed :\n");printf(" processteamcirec\n");printf("%4s %8d %8d %5d\n", out->name, out->team, out->ci,out->rec ); record = local->team;printf("%d",record);for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next){if (max<g_curr->team)max=g_curr->team;}if(max==record){yi=0;record=1000;break;}break;}/*case 1*/case 0:/*case 1的对称过程*/{max=g_head->next->team;out=g_head->next;strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next) {if (g_curr->team < record){ max = g_curr->team;break;}}for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next) {if (max<=g_curr->team&&g_curr->team<record){max=g_curr->team;out=g_curr;strcpy(local->name,out->name);local->team=out->team;local->ci=out->ci;local->rec=out->rec;}}printf("\n-----------------------\n");printf("the process choosed :\n");printf(" processteamcirec\n");printf("%4s %8d %8d %5d\n", out->name, out->team, out->ci,out->rec ); min=g_head->next->team;for (g_curr=g_head->next;g_curr!=NULL;g_curr=g_curr->next){if (min>g_curr->team)min=g_curr->team;}record = local->team;if(min==record)yi=1;record=0;break;}break;}default : return -1;}/*switch*/if (out->next==NULL){out->prior->next=NULL;free(out);}else{out->prior->next=out->next;out->next->prior=out->prior;free(out);}/*将选中的进程从I/O请求表中删除*/ }/*else*/void acceptnum()/*通过输入0~1选择‘驱动调度’或是‘接受请求’*/{float num;char c;while(1){printf("----------------------------------------------\n");printf("pleaseinputanumberbetween0and1\nnum<=0.5:acceptrequest\nnum>0. 5:qudongdiaodu\n\nnum==2:I/O LIST\n\nnum=?\n");scanf("%f",&num);getchar();while((num<0||num>1)&&num!=2)/*过滤不合法数据注意:本程序其他输入数据可能未过滤*/{printf("number ERROR!Input again please!\nnum=?\n ");scanf("%f",&num);getchar();}if(num>0.5&&num!=2)/*驱动调度*/{if (g_head->next==NULL)printf("\n\n");printf("---------------------\n");printf("I/O list is empty!!!\n");/*请求表为空无需调度*/ }else{printf("qudong diaodu\n");qddd();/*调用函数进行调度*/}}else if (num<=0.5)/*接受请求*/{printf("accept request\n\n");acceptreq();}else if (num==2)/*通过输入2显示当前请求I/O表*/{ printf("I/O LIST;");printf("-------------------\n");PrintInit();printf("\n");}printf("-----------------------\n");printf("choose 'n' to quit else to continue\n");if(strcmp(c=getchar(),'n')==0||strcmp(c=getchar(),'N')==0) {//clrscr();printf("\n\n\n\n\n\n");printf("thank you for testing my program!\n");printf("---by01\n");sleep(2);printf("\n\nBYEbye!!");sleep(2);return -1;}else{//clrscr();}}}main ()/*主程序*//*输入n离开本程序*/ {init();PrintInit();acceptnum();}。

stm32控制地四层电梯设计原理与程序代码

stm32控制地四层电梯设计原理与程序代码

列出这个设计中要用到的S T M32的各个引脚及实际用途如表(1)所示,硬件电路图如图(2)所示。

控制要求1总体控制要求:电梯由安装在各楼层电梯口的上升下降呼叫按钮(U1、U2、U3、D2、D3、D4),电梯轿厢内楼层选择按钮(S1、S2、S3、S4),上升下降指示(U P、D O W N),各楼层到位行程开关(S Q1、S Q2、S Q3、S Q4)组成。

电梯自动执行呼叫。

2电梯在上升的过程中只响应向上的呼叫,在下降的过程中只响应向下的呼叫,电梯向上或向下的呼叫执行完成后再执行反向呼叫。

3电梯停止运行等待呼叫时,同时有不同呼叫时,谁先呼叫执行谁。

4具有呼叫记忆、内选呼叫指示功能。

5具有楼层显示、方向指示、到站声音提示功能。

设计中用到的各引脚分布:表(1) 硬件电路图如下图所示:图(2)程序的流程图如图(3):r e s t图(3)程序代码如下:#include "stm32f10x_lib.h"#include "stdio.h"void RCC_Configuration(void); //时钟配置函数void GPIO_Configuration(void); //通用I/O口配置函数void ask_Scan(void);void delay(vu32 Count); // 延时unsigned char inslt[4]={0},dnask[3]={0},upask[3]={0},fnow[4]={0}; signed char nnum=0,dnnum=0,upnum=0,innum=0,i=0;//inslt[4]四层内选,dnask下呼请求,upask[3]上呼请求,fnow当前楼层; u8 updnFlag=0; //上呼与下呼标main (void){#ifdef DEBUGdebug();#endifRCC_Configuration();GPIO_Configuration();GPIO_ResetBits(GPIOC, GPIO_Pin_0);GPIO_ResetBits(GPIOC, GPIO_Pin_1);GPIO_ResetBits(GPIOC, GPIO_Pin_2); //各层的上呼请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_3);GPIO_ResetBits(GPIOC, GPIO_Pin_4);GPIO_ResetBits(GPIOC, GPIO_Pin_5); //各层的下呼请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_6);GPIO_ResetBits(GPIOC, GPIO_Pin_7);GPIO_ResetBits(GPIOC, GPIO_Pin_8);GPIO_ResetBits(GPIOC, GPIO_Pin_9); //各层的内选请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_10); //桥箱上升请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_11); // 桥箱下降请求清零GPIO_ResetBits(GPIOC, GPIO_Pin_12);GPIO_ResetBits(GPIOC, GPIO_Pin_13);GPIO_ResetBits(GPIOC, GPIO_Pin_14);GPIO_ResetBits(GPIOC, GPIO_Pin_15); //当前楼层指示清零GPIO_ResetBits(GPIOD, GPIO_Pin_8);GPIO_ResetBits(GPIOD, GPIO_Pin_9);GPIO_ResetBits(GPIOD, GPIO_Pin_10);GPIO_ResetBits(GPIOD, GPIO_Pin_11); //当前楼层显示清零GPIO_ResetBits(GPIOD, GPIO_Pin_12); //到站声清零while(1){void wait_display_scan(void) // 等待状态扫描{ void nowfloor_scan(void) //扫描当前电梯所在的楼层{ if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==1){fnow[0]=1; nnum=1;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_2)==1){fnow[1]=1; nnum=2;} if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_3)==1){fnow[2]=1; nnum=3;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_4)==1){fnow[3]=1; nnum=4;} }void nowfloor_display(void){ switch(nnum){case 1:GPIO_SetBits(GPIOC, GPIO_Pin_6); //第一层指示灯亮GPIO_Write(GPIOD,0x01<<8); // 显示第一层break;case 2:GPIO_SetBits(GPIOC, GPIO_Pin_7); //第2层指示灯亮GPIO_Write(GPIOD,0x02<<8); // 显示第2层break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_8); //第3层指示灯亮GPIO_Write(GPIOD,0x03<<8); // 显示第3层break;case 4:GPIO_SetBits(GPIOC, GPIO_Pin_9); //第4层指示灯亮GPIO_Write(GPIOD,0x04<<8); // 显示第4层break;}}void ask_scan(void) //判断有没有上呼、下呼、内选请求{if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1){upask[0]=1;upnum=1;updnFlag==0; }if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==1){upask[1]=1;upnum=2;updnFlag==0;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==1){upask[1]=1;upnum=3;updnFlag==0;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==1){dnask[0]=1;upnum=2;updnFlag==1;} if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1){dnask[1]=1;upnum=3;updnFlag==1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1){dnask[2]=1;upnum=4;updnFlag==1;} if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==1){inslt[0]=1;innum=1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1){inslt[1]=1;innum=2;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1){inslt[2]=1;innum=3;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==1){inslt[3]=1;innum=4;}}void ask_display(void){ switch(upnum){case 1:GPIO_SetBits(GPIOC, GPIO_Pin_0); //第1层上呼指示灯亮break;case 2GPIO_SetBits(GPIOC, GPIO_Pin_1); //第2层上呼指示灯亮break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_2); //第3层上呼指示灯亮break;}switch(dnnum)case 2:GPIO_SetBits(GPIOC, GPIO_Pin_3); //第2层下呼指示灯亮break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_4); //第3层下呼指示灯亮break;case 4:GPIO_SetBits(GPIOC, GPIO_Pin_5); //第4层下呼指示灯亮break;}switch(innum){case 1:GPIO_SetBits(GPIOC, GPIO_Pin_6); //第1层内选指示灯亮break;case 2:GPIO_SetBits(GPIOC, GPIO_Pin_7); //第2层内选指示灯亮break;case 3:GPIO_SetBits(GPIOC, GPIO_Pin_8); //第3层内选指示灯亮break;case 4:GPIO_SetBits(GPIOC, GPIO_Pin_9); //第3层内选指示灯亮break;}if(upnum==0|dnnum==0|innum==0) //如果没有呼叫请求void wait_display_scan(void); //等待并显示当前楼层elseswitch(updnFlag){ case(0){void upask_dispose(void){if(nnun==upnum|nnum==innum){GPIO_setBits(GPIOD, GPIO_Pin_12); //开门、警报到站void nowfloor_display(void) ;void delay(vu32 Count);//开门延时}else{for (i=nnum+1;i<=4;i++){if(upnum[i]==1|dnnum[i]==1|inslt[i]==1) //当前层的上面有请求,上移一层,在看是否是{ nnum++; //想要去的层或呼叫层void nowfloor_display(void) ;void ask_display(void);void upask_dispose(void);}else{updnFlag==1void wait_display_scan(void); //若下面没有请求了,反向GPIO_SetBits(GPIOC, GPIO_Pin_11); //桥箱下降指示灯亮}}}}break;}case(1){void dnask_dispose(void){if(nnun==dnnum|nnum==innum){GPIO_setBits(GPIOD, GPIO_Pin_12); //开门、警报到站void nowfloor_scan(void) ;void delay(vu32 Count); //开门延时}else{for (i=nnum-1;i>=1;i--){if(upnum[i]==1|dnnum[i]==1|inslt[i]==1) //当前层的下面有请求,下移一层,在看是否是{ nnum--; //想要去的层或呼叫层void ask_display(void);void nowfloor_display(void) ;void dnask_dispose(void);}else{updnFlag==0void wait_display_scan(void); //若下面没有请求了,反向GPIO_SetBits(GPIOC, GPIO_Pin_10); //桥箱上升指示灯亮}}}}break;}}}}}void RCC_Configuration(void) //时钟配置函数{ErrorStatus HSEStartUpStatus;u8 SYSCLKSourceValue;RCC_DeInit(); //对RCC复位RCC_HSEConfig(RCC_HSE_ON); //使能HSE时钟HSEStartUpStatus=RCC_WaitForHSEStartUp(); //取HSE是否准备好标志if(HSEStartUpStatus==SUCCESS) //判断HSE是否准备好{/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* Flash 2 wait state */FLASH_SetLatency(FLASH_Latency_2);RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB时钟为系统时钟RCC_PCLK1Config(RCC_HCLK_Div2); //配置低速APB1时钟为系统时钟的一半RCC_PCLK2Config(RCC_HCLK_Div2); //配置高速APB2时钟为系统时钟的一半RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //对HSE进行倍频,倍频因子为9,倍频后时钟频率为72MHZRCC_PLLCmd(ENABLE); //使能倍频后的时钟while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)//等待PLL时钟启用成功{}RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将倍频后的时钟设置为系统时钟SYSCLKSourceValue=RCC_GetSYSCLKSource(); //取时钟频率值while(SYSCLKSourceValue != 0x08) //判断系统时钟是否为倍频后的时钟{//- 0x00: HSI used as system clock} //- 0x04: HSE used as system clock//- 0x08: PLL used as system clock}RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //使能APB2的外设GPIOA和GPIOC的时钟}void GPIO_Configuration(void) //通用I/O端口配置函数{GPIO_InitTypeDef GPIO_InitStructure;/* Configure GPIOC pin0, pin1, pin2 and pin3 as Output push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4|GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9GPIO_Pin_10||GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD, &GPIO_InitStructure);}void delay(vu32 Count){ for(Count;Count!=0;Count--);}。

电梯程序

电梯程序

电梯程序我有个5层的,不过大同小异,一样的,你可以照葫芦画瓢把另外的不上去。

3.1 控制系统硬件设计本实验有32个输入信号,32个输出信号及现有设备,所以选用FX2—64MR的PLC,由于现有材料所以选OMRON的3G2JV变频器和两相交流电机。

来完成实验。

PLC控制器、变频器和电动机的接线及原理图如附图(1)所示。

3.2 输入输出点分配输入信号输出信号名称代号编号名称代号编号安全回路K6 X000 电梯上行UP Y000零速输入K0 X001 电梯下行DOWN Y001脉冲输入K1 X002 电梯快行FAST Y002轿内电锁K2 X003 电梯慢行SLOW Y003红外传感器K3 X004 检修速度JX Y004关门力限开关K4 X005 七段码A Y005超重K5 X006 B Y006上限强制减速SQ0 X007 C Y007一楼指令SB1 X010 D Y010二楼指令SB2 X011 E Y011三楼指令SB3 X012 F Y012四楼指令SB4 X013 G Y013五楼指令SB5 X014 关门催促铃声KE1 Y014基站到位开关SQ4 X015 厅门关KM2 Y015一楼上呼SB6 X016 厅门开KM3 Y016一楼下呼SB7 X017 厅内指示灯1 E1 Y017二楼上呼SB8 X020 厅内指示灯2 E2 Y020二楼下呼SB9 X021 厅内指示灯3 E3 Y021三楼上呼SB10 X022 厅内指示灯4 E4 Y022三楼下呼SB11 X023 厅内指示灯5 E5 Y023四楼上呼SB12 X024 上呼灯1 E6 Y024四楼下呼SB13 X025 上呼灯2 E7 Y025五楼上呼SB14 X026 上呼灯3 E8 Y026五楼下呼SB15 X027 上呼灯4 E9 Y027厅门开SB16 X030 下呼灯2 E10 Y030厅门关SB17 X031 下呼灯3 E11 Y031厅门开到位SQ1 X032 下呼灯4 E12 Y032厅门关到位SQ2 X033 下呼灯5 E13 Y033检修开关SB18 X034 超重铃声KM4 Y034检修上SB19 X035 抱闸信号KM5 Y035检修下SB20 X036 上行指示灯E14 Y036下限强制减速SQ3 X037 下行指示灯E15 Y037表1 I/O分配表3.3 控制系统程序设计根据电梯的工作原理与功能要求以及输入/输出点的地址分配表,来绘制电梯的程序流程图。

三菱FX2N系列PLC编程实例――电梯控制实例

三菱FX2N系列PLC编程实例――电梯控制实例

三菱FX2N系列PLC编程实例――电梯控制实例第一节 PLC简述一、PLC的特点:1、高可靠性2、编程简单,使用方便可采用梯形图编程方式,与实际继电器控制电路非常接近,一般电气工作者很容易接受。

3、环境要求低适用于恶劣的工业环境。

4、体积小,重量轻5、扩充方便,组合灵活二、PLC的硬件结构:1、硬件框图2、输入接口电路为了保证能在恶劣的工业环境中使用,PLC输入接口都采用了隔离措施。

如下图,采用光电耦合器为电流输入型,能有效地避免输入端引线可能引入的电磁场干扰和辐射干扰。

在光敏输出端设置RC滤波器,是为了防止用开关类触点输入时触点振颤及抖动等引起的误动作,因此使得PLC内部约有10ms的响应滞后。

当各种传感器(如接近开关、光电开关、霍尔开关等)作为输入点时,可以用PLC机内提供的电源或外部独立电源供电,且规定了具体的接线方法,使用时应加注意。

3、输出接口电路PLC一般都有三种输出形式可供用户选择,即继电器输出,晶体管输出和晶闸管输出。

在线路结构上都采用了隔离措施。

特点:继电器输出:开关速度低,负载能力大,适用于低频场合。

晶体管输出:开关速度高,负载能力小,适用于高频场合。

晶闸管输出:开关速度高,负载能力小,适用于高频场合。

注意事项:(1)PLC输出接口是成组的,每一组有一个COM口,只能使用同一种电源电压。

(2)PLC输出负载能力有限,具体参数请阅读相关资料。

(3)对于电感性负载应加阻容保护。

(4)负载采用直流电源小于30V时,为了缩短响应时间,可用并接续流二极管的方法改善响应时间。

三、三菱FX2 PLC实物图及面板上的LED指示说明第二节 PLC的工作过程PLC 大多采用成批输入/输出的周期扫描方式工作,按用户程序的先后次序逐条运行。

一个完整的周期可分为三个阶段: (一)输入刷新阶段 程序开始时,监控程序使机器以扫描方式逐个输入所有输入端口上的信号,并依次存入对应的输入映象寄存器。

(二)程序处理阶段所有的输入端口采样结束后,即开始进行逻辑运算处理,根据用户输入的控制程序,从第一条开始,逐条加以执行,并将相应的逻辑运行结果,存入对应的中间元件和输出元件映象寄存器,当最后一条控制程序执行完毕后,即转入输出刷新处理。

可编程控制(PLC)电梯的程序以及梯形图、详细解释

可编程控制(PLC)电梯的程序以及梯形图、详细解释

电气可编程控制原理与应用(PLC)的实验报告实验人员:陶建美日期:2011年6月21日实验项目:电梯控制报告框架(Ctrl+点击该链接,即可转入相应模块)一、实验目的与要求二、实验设备三、实验内容四、实验过程1、电梯的基本构造2、PLC的基本结构3、PLC的工作原理4、电梯控制构成5、输入输出(I/O)端口功能分配表6、程序执行流程图7、梯形图(1)定时器T0 (2)一楼的控制(3)二楼的控制(4)三楼的控制(5)四楼的控制(6)确定电梯楼层位置(7)电梯趋势确定(8)电梯上行程序(9)电梯下行程序8、指令表五、问题与解决方案六、实验总结与心得体会电气可编程控制原理与应用(PLC)的实验报告电梯控制一、实验目的与要求1、运用所学基本理论、基本知识和基本技能,分析与解决实际问题的能力,通过设计掌握控制PLC控制系统的基本设计方法和应用。

2、设计出一个四层楼电梯控制。

3、完成并实现实验内容的基本功能要求。

二、实验设备计算机、PLC可编程控制器、FXGPWIN应用软件三、实验内容1、四层楼电梯基本设计2、停止有刹车及保险止降装置3、根据楼层请求上下,先来优先4、请求与趋势同优先5、楼内可以撤销楼内请求四、实验过程1、电梯的基本构造电梯是一种特殊的起重运输设备,由桥厢及配重、拖动机及减速传动机械、井道及井道设备、召唤系统及安全装置构成。

桥厢是载人或装货的部位,配重是为了改变电梯电机负载的特性以提高电梯安全性而设置的。

下图是电梯拖动系统示意图,图中可见电梯的桥厢及配重分系在钢丝绳的两端,钢丝绳跨挂在曳引轮上,曳引轮经减速机构由电机拖动,形成桥厢的上下运动。

2、PLC的基本结构从结构上分,PLC分为固定式和组合式(模块式)两种。

固定式PLC包括CPU板、I\O板、内存板、电源等,这些元素组成一个不可拆卸的整体。

模块式PLC包括CPC模块、I\O模块、电源模块、地板或支架,这些模块可以按照一定规则组合配置。

3、PLC的工作原理当PLC投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。

电梯程序源代码

电梯程序源代码

#ifndef CELEVATOR_H#define CELEVATOR_Hconst int MostLayers = 100;class CElevator{public:CElevator();//构造函数CElevator(int uLayers, int lLayers);//构造函数CElevator(CElevator &myElevator);//拷贝构造函数void PressOuterButton(int direction, int floor);//电梯外部各楼层操作按钮void PressInnerDigitalButton(int floor);//电梯内部数字按钮void PressOpen_CloseButton(int operate);//电梯内部开合控制按钮void PressAlert();//电梯内部报警按钮void run();//电梯运行~CElevator();//析构函数protected:void OpenElevator();//打开电梯void CloseElevator();//关闭电梯void UserOperate();//由于程序单线程运行,因此将用户的所有操作集中在每一层停止的时候完成。

const int UpperLayers; //电梯最高能到达的楼层const int LowerLayers; //电梯最低能到达的楼层int States[5]; //电梯当前状态,States[0]表示运行或停止,0停止,1运行,初值0;States[1]表示当前所在楼层,初值1;States[2]表示运行方向,向上0,向下1,初值0;States[3]表示开合,0开,0合,初值1;States[4]表示是否故障,0正常,1故障,初值1int DigitalButton[MostLayers];//整形数组,i为楼层且i!=0,i<0时下标iLowerLayers表示电梯内地下i楼层按钮是否被按下,i>0,i-LowerLayers-1表示电梯内地上i楼层按钮是否被按下,0未按,1按下int OuterDownButton[MostLayers];//整形数组,i为楼层且i!=0,i<0时下i-LowerLayers表示电梯外i层向下按钮是否被按下,i>0i-LowerLayers-1表示电梯外i层向下按钮是否被按下,0未按,1按下int OuterUpButton[MostLayers];//整形数组,i为楼层且i!=0,i<0时下标iLowerLayers表示电梯外i层向上按钮是否被按下,i>0,i-LowerLayers-1表示电梯外i层向上按钮是否被按下,0未按,1按下};#endif二:CElevator.cpp文件内容#include<iostream>#include "CElevator.h"using namespace std;CElevator::CElevator():UpperLayers(10),LowerLayers(1){States[0] = 0; //初始状态为停止States[1] = 1;//初始楼层在楼States[3] = 1;//初始电梯为合States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(int uLayers, int lLayers):UpperLayers(uLayers),LowerLayers(lLayers) {States[0] = 0; //初始状态为停止States[1] = 1;//初始楼层在楼States[2] = 0;//初始方向为向上States[3] = 1;//初始电梯为合States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(CElevator&myElevator):UpperLayers(myElevator.UpperLayers),LowerLayers( myElevator.LowerLayers) {States[0] = myElevator.States[0];States[1] = myElevator.States[1];States[2] = 0;//初始方向为向上States[3] = 1;//初始电梯为合States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(int uLayers, int lLayers):UpperLayers(uLayers),LowerLayers(lLayers) {States[0] = 0; //初始状态为停止States[1] = 1;//初始楼层在楼States[2] = 0;//初始方向为向上States[4] = 0;//初始电梯正常for(int i=0;i<MostLayers;i++){ DigitalButton[i] = 0;OuterDownButton[i] = 0;OuterUpButton[i] = 0;}}CElevator::CElevator(CElevator &myElevator): UpperLayers(myElevator.UpperLayers),LowerLayers(myElevator.LowerLayers){States[0] = myElevator.States[0];States[1] = myElevator.States[1];States[2] = myElevator.States[2];States[3] = myElevator.States[3];States[4] = myElevator.States[5];for(int i=0;i<MostLayers;i++){DigitalButton[i] = myElevator.DigitalButton[i];OuterDownButton[i] = myElevator.DigitalButton[i];OuterUpButton[i] = myElevator.DigitalButton[i];}}CElevator::~CElevator(){}void CElevator::PressOuterButton(int direction, int floor){if(direction==0)OuterUpButton[floor-LowerLayers-1] = 1;elseOuterDownButton[floor-LowerLayers-1] = 1;}void CElevator::PressInnerDigitalButton(int floor){DigitalButton[floor-LowerLayers-1] = 1;}void CElevator::PressOpen_CloseButton(int operate){if(operate == 0)//打开电梯{OpenElevator();}else//关闭电梯{CloseElevator();}}void CElevator::OpenElevator(){if(States[3] == 0){cout<<"电梯已打开,请先出后进!"<<endl<<endl;}else{cout<<"电梯正在打开…电梯已打开,请先出后进!"<<endl<<endl; States[3] = 0;}}void CElevator::CloseElevator(){if(States[3] == 1){ cout<<"电梯已关闭,请保持安静!"<<endl<<endl;}else{cout<<"电梯正在关闭…电梯已关闭,请保持安静!"<<endl<<endl; States[3] = 1;}}void CElevator::PressAlert(){cout<<"电梯内部有人报警,请援助!"<<endl;States[4] = 1;}void CElevator::UserOperate(){//按报警按钮int alm = 0;cout<<"按报警按钮吗?输入1表示按,0表示不按:";cin>>alm;cout<<endl;if(alm==1){States[4] = 1;while(States[4]==1){cout<<"电梯出现故障,请维修!维修好请输入0,维修不好请输入1!cin>>alm;cout<<endl;if(alm == 0 || alm ==1){States[4] = alm;}else{cout<<"维修数据不正确!"<<endl;}}}OpenElevator();//电梯内部输入到达楼层cout<<"请电梯内乘客输入所要到达的楼层!"<<endl;cout<<"多个楼层中间用空格隔开,结束输入0:";int floor = 1;while(true){cin>>floor;if(floor==0){break;}if((floor>=LowerLayers) && (floor<=UpperLayers) && (floor!=States[1])) {if(floor<0)//地下{DigitalButton[floor-LowerLayers] = 1;}else//地上{DigitalButton[floor-LowerLayers-1] = 1;//没有楼}}}cout<<endl;//电梯外部各楼层输入上楼信号cout<<"请电梯外部乘客输入上楼信号!"<<endl;cout<<"多个楼层用空格隔开,结束输入0:";while(true){cin>>floor;if(floor==0){break;}else{if((floor>=LowerLayers) && (floor<UpperLayers) &&(floor!=States[1])){if(floor<0)//地下{OuterUpButton[floor-LowerLayers] = 1;}else//地上{OuterUpButton[floor-LowerLayers-1] = 1;//没有楼}}}}cout<<endl;//电梯外部各楼层输入下楼信号cout<<"请电梯外部乘客输入下楼信号,"<<endl;cout<<"多个楼层用空格隔开,结束输入0:";while(true){cin>>floor;if(floor==0){break;}else{if((floor>LowerLayers) && (floor<=UpperLayers) && (floor!=States[1])) {if(floor<0)//地下{OuterDownButton[floor-LowerLayers] = 1;}else//地上{OuterDownButton[floor-LowerLayers-1] = 1;//没有楼}}}cout<<endl;//按开电梯按钮int direction = 0;cout<<"电梯将要关闭,等人请按打开按钮!"<<endl;cout<<"输入1表示按,表示0不按:";cin>>direction;cout<<endl;if(direction==1){OpenElevator();for(int i=0;i<50;i++);//延时CloseElevator();}//按关电梯按钮cout<<"按关电梯按钮吗?输入1表示按,表0不按:";cin>>direction;cout<<endl;if(direction==0){for(int i=0;i<50;i++);//延时CloseElevator();}else{CloseElevator();}}void CElevator::run(){while(true){if(States[0]==0){cout<<"电梯停在"<<States[1]<<"层!"<<endl;if(States[2]==0)//向上{if(States[1]<0)//地下{OuterUpButton[States[1]-LowerLayers] = 0;//将记录电梯States[1]层有向上的标志取消DigitalButton[States[1]-LowerLayers] = 0;//将记录电梯在States[1]层停靠的标志取消else//地上{OuterUpButton[States[1]-LowerLayers-1] = 0;//将记录电梯States[1]层有向上的标志取消DigitalButton[States[1]-LowerLayers-1] = 0;//将记录电梯在States[1]层停靠的标志取消}}else//向下{if(States[1]<0)//地下{OuterDownButton[States[1]-LowerLayers] = 0;//将记录电梯States[1]层有向下的标志取消DigitalButton[States[1]-LowerLayers] = 0;//将记录电梯在States[1]层停靠的标志取消}else//地上{OuterDownButton[States[1]-LowerLayers-1] = 0;//将记录电梯States[1]层有向下的标志取消DigitalButton[States[1]-LowerLayers-1] = 0;//将记录电梯在States[1]层停靠的标志取消}}if(States[1]==1){cout<<"终止电梯程序运行吗?终止输入1,继续运行输入0:";int temp = 0;cin>>temp;if(temp==1){exit(0);}}cout<<endl;UserOperate();States[0] = 1;}else{if(States[2]==0)//向上{States[1]++;if(States[1]==0){States[1]++;//没有层}else{cout<<"电梯向上运行,将要到达"<<States[1]<<"层!"<<endl<<endl;if(States[1]==UpperLayers)//向上到最顶,必定要停,且方向变为向下{States[2] = 1;//变方向States[0] = 0;}else{if(OuterUpButton[States[1]-LowerLayers-1]==0 && DigitalButton[States[1]-LowerLayers-1]==0) {cout<<"没有乘客在"<<States[1]<<"层上下,电梯继续向上运行!"<<endl<<endl;}else{States[0] = 0;}}}}else//向下{States[1]--;if(States[1]==0){States[1] = -1;//没有层}else{cout<<"电梯向下运行,将要到达"<<States[1]<<"层!"<<endl<<endl;if(States[1]==LowerLayers)//向下到最底,必定要停,且方向变为向上{States[2] = 0;//变方向States[0] = 0;}else{if(OuterDownButton[States[1]-LowerLayers-1]==0 && DigitalButton[States[1]-LowerLayers-1]==0) {cout<<"没有乘客在"<<States[1]<<"层上下,电梯继续向下运行!"<<endl<<endl;}else{States[0] = 0;}}}}}}}三:main.cpp主函数文件内容#include <iostream>#include "CElevator.h"using namespace std;#include "CElevator.h"void main(){CElevator myElevator(8,-3); myElevator.run();}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《综合电子创新训练》研究报告研究题目: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 实验用电梯模型 (8)第三章与电梯模型相关的实验程序 (10)3.1数码管连续显示 (10)3.1.1 程序流程图 (10)3.1.2 功能简介 (10)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.2 功能简介 (14)3.3.3 功能实现过程 (14)3.3.4 问题的解决及收获 (15)3.4 外部按键上下行 (16)3.4.1 程序流程图 (16)3.4.2 功能简介 (16)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功能简介 (23)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.2功能简介 (28)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函数) (37)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 问题的解决及收获 (38)4.5 电梯开关门模块(openandclose函数) (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 单片机接口定义实验用单片机接口定义如图,其中A 口为输入,B 口为输出。

+—三层下四层下 一层到达二层到达 三层到达 四层到达开门关门+ —— +三层下灯四层下灯开门到位关门到位— — Figure 2 凌阳单片机接口定义2.1.3 I/O接口DATA控制命令表单片机A口DATA控制命令表单片机A口DATA控制命令表单片机接口属性设置:*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 0x2000#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 0x2000#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。

相关文档
最新文档