📄 main.c
字号:
#include <AT89X51.H>
//月亮微控 QQ:228939191
/*******************输入输出分配*****************************************
| 输入 | 输出 |
|X13 | Y13 |
|X12 门开关 | Y12 |
|X11 3楼到位 | Y11 |
|X10 2楼到位 | Y10 |
|X9 1楼到位 | Y9 |
|X8 到2楼 | Y8 |
|X7 到1楼 | Y7 |
|X6 3楼呼叫 | Y6 楼层报警 |
|X5 到3楼 | Y5 门报警 |
|X4 到1楼 | Y4 KM2电机上行 |
|X3 2楼呼叫 | Y3 KM1电机下行 |
|X2 到3楼 | Y2 三楼显示灯 |
|X1 到2楼 | Y1 二楼显示灯 |
|XO 1楼呼叫 | Y0 一楼显示灯 |
*/
/********P0*********/
sbit Y13 = 0x80;
sbit Y12 = 0x81;
sbit Y11 = 0x82;
sbit Y10 = 0x83;
sbit Y9 = 0x84;
sbit Y8 = 0x85;
sbit Y7 = 0x86;
sbit Y6 = 0x87;
/********P1*********/
sbit X13 = 0x90;
sbit X12 = 0x91;
sbit X11 = 0x92;
sbit X10 = 0x93;
sbit X9 = 0x94;
sbit X8 = 0x95;
sbit X7 = 0x96;
sbit X6 = 0x97;
/* P2 */
sbit Y0 = 0xA2;
sbit Y1 = 0xA3;
sbit Y2 = 0xA4;
sbit Y3 = 0xA5;
sbit Y4 = 0xA6;
sbit Y5 = 0xA7;
/********P3*********/
sbit X0 = 0xB2;
sbit X1 = 0xB3;
sbit X2 = 0xB4;
sbit X3 = 0xB5;
sbit X4 = 0xB6;
sbit X5 = 0xB7;
/*******辅助继电器***********/
bit M0=1;
bit M1=1;
bit M2=1;
bit M3=1;
bit M4=1;
bit M5=1;
bit M6=1;
bit M7=1;
bit M8=1;
bit M9=1;
bit M10=1;
/************************一楼呼叫***************************************/
void key1 (void)
{
//呼叫
if (!X0) //呼叫键按下
{
if (X12) Y5 = 0; //门没有关闭,报警灯亮
else (Y5 = 1);
if (!X10|!X11) //在二楼或者三楼,电梯下行
{
M0 = 0; //电梯下行信号
}
}
if ((M0 == 0 && Y4 == 1)&& !X12) //电梯下行信号,电梯没有上升,门开关OK
{
Y3 = 0; //电梯开始下降
if (X9 == 0) //电梯到位
{
Y3 = 1; //电梯停止下降
M0 = 1; //电梯下降信号停
}
}
//到二楼
if ((!X1 && !X12)&& !X9) //按到2楼 门开关OK 在1楼
{
M1 = 0; //电梯到二楼信号
if ( X10 == 1 && Y3 == 1)Y4 = 0; //电梯没有在二楼 电梯没有下降 电梯开始上升
}
if (M1 == 0 && !X10 ) //电梯上升2楼 限位到了
{
Y4 = 1; //电梯停止
M1 = 1; //电梯上升信号停止
}
//到三楼
if ((!X2 && !X12)&& !X9) //按到3楼 门开关OK 在1楼
{
M2 = 0; //电梯到3楼信号
if (X11 == 1 && Y3 == 1)Y4 = 0;//电梯没有在3楼 电梯没有下降 电梯开始上升
}
if (M2 == 0 && !X11) //电梯上升3楼 限位到了
{
Y4 = 1; //电梯停止
M2 = 1; //电梯上升信号停止
}
}
/************************二楼呼叫*****************************************/
void key2 (void)
{
//呼叫
if (!X3)
{
if (X12) Y5 = 0; //门没有关闭,报警
else (Y5 = 1);
if (!X9) //在1楼电梯上
{
M3 = 0; //电机上行信号
}
if (!X11) //在3楼电梯上
{
M4 = 0; //电机下行信号
}
}
if ((M3 == 0 && Y3 == 1)&& !X12) Y4 = 0; //一楼到二楼
if (M3 == 0 && X10 == 0)
{
Y4 = 1;
M3 = 1;
}
if ((M4 == 0 && Y4 == 1)&& !X12) Y3 = 0; //三楼到二楼
if (M4 == 0 && X10 == 0)
{
Y3 = 1;
M4 = 1;
}
//到一楼
if ((!X4 && !X12)&& !X10) M5 = 0;
if ((M5 == 0 && X9 == 1) && Y4 == 1)Y3 = 0;
if (M5 == 0 && !X9)
{
Y3 = 1;
M5 = 1;
}
//到三楼
if ((!X5 && !X12)&& !X10) M6 = 0;
if ((M6 == 0 && X11 == 1) && Y3 == 1) Y4 = 0;
if (M6 == 0 && !X11)
{
Y4 = 1;
M6 = 1;
}
}
/*****************************************************************************/
/************************三楼呼叫************************************/
void key3 (void)
{
//呼叫
if (!X6)
{
if (X12) Y5 = 0; //门没有关闭,报警
else (Y5 = 1);
if (!X9) //在1楼电梯上
{
M7 = 0; //电机上行信号
}
if (!X10) //在2楼电梯上
{
M8 = 0; //电机下行信号
}
}
if ((M7 == 0 && Y3 == 1)&& !X12) Y4 = 0; //一楼到3楼
if (M7 == 0 && X11 == 0)
{
Y4 = 1;
M7 = 1;
}
if ((M8 == 0 && Y3 == 1)&& !X12) Y4 = 0; //2楼到3楼
if (M8 == 0 && X11 == 0)
{
Y4 = 1;
M8 = 1;
}
//到一楼
if ((!X7 && !X12)&& !X11) M9 = 0;
if ((M9 == 0 && X9 == 1) && Y4 == 1)Y3 = 0;
if (M9 == 0 && !X9)
{
Y3 = 1;
M9 = 1;
}
//到三楼
if ((!X8 && !X12)&& !X11) M10 = 0;
if ((M10 == 0 && X10 == 1) && Y3 == 1) Y3 = 0;
if (M10 == 0 && !X10)
{
Y3 = 1;
M10 = 1;
}
}
/****主程序*********************************************/
void main(void)
{
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
while (1)
{
if (!X9)Y0 = 0;
else(Y0 = 1);
if (!X10)Y1 = 0;
else(Y1 = 1);
if (!X11)Y2 = 0;
else(Y2 = 1);
key1(); //*一楼呼叫
key2(); //*二楼呼叫
key3(); //*三楼呼叫
}
}
/*******************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -