#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit Up_LED = P1^0; //上行LED定义
sbit Down_LED = P1^1; //下行LED定义
sbit Open_LED = P1^2; //开门状态LED
sbit First = P3^7; //1楼叫上按键
sbit Second_Down = P3^6; //2楼叫下按键
sbit Second_Up = P3^5; //2楼叫上按键
sbit Third_Down = P3^4; //3楼叫下按键
sbit Third_Up = P3^3; //3楼叫上按键
sbit Fourth = P3^2; //4楼叫下按键
sbit Container1 = P2^4; //电梯内1楼按键
sbit Container2 = P2^5; //电梯内2楼按键
sbit Container3 = P2^6; //电梯内3楼按键
sbit Container4 = P2^7; //电梯内4楼按键
sbit Arm = P1^3; //电梯内报警按钮
sbit Arm_Beep = P1^4; //电梯外报警器
sbit Moto1 = P2^0; //步进电机
sbit Moto2 = P2^1; //步进电机
sbit Moto3 = P2^2; //步进电机
sbit Moto4 = P2^3; //步进电机
uchar Key_Enable[10]; //按键存储
uchar code Tab[]={0x14,0xD7,0x32,0x52,0xD4,0x38}; //数码管数字定义
uchar Tab_Up[]={0,0,0}; //存储上行呼叫记录
uchar Tab_Down[]={0,0,0}; //存储下行呼叫记录
uchar Tab_Nei[]={0,0,0,0}; //存储电梯内部呼叫记录
uchar Now=1; //当前所在楼层
void delay_Arm(uint t) //延时函数
{
while(t--);
}
void Keyboard() //按键扫描函数
{
uchar i;
if(!Key_Enable[0])if(!First){Tab_Up[0]=1;} //1楼有人按下,存储到上行呼叫表
if(!Key_Enable[1])if(!Second_Up){Tab_Up[1]=1;} //2楼上行有人按下,存储到上行呼叫表
if(!Key_Enable[2])if(!Third_Up){Tab_Up[2]=1;} //3楼上行有人按下,存储到上行呼叫表
if(!Key_Enable[5])if(!Fourth){Tab_Down[2]=1; } //4楼有人按下,存储到下行呼叫表
if(!Key_Enable[4])if(!Third_Down){Tab_Down[1]=1;} //3楼下行有人按下,存储到下行呼叫表
if(!Key_Enable[3])if(!Second_Down){Tab_Down[0]=1;} //2楼下行有人按下,存储到下行呼叫表
if(!Key_Enable[6])if(!Container1){Tab_Nei[0]=1;} //1楼有人按下,存储到电梯内呼叫表
if(!Key_Enable[7])if(!Container2){Tab_Nei[1]=1;} //2楼有人按下,存储到电梯内呼叫表
if(!Key_Enable[8])if(!Container3){Tab_Nei[2]=1;} //3楼有人按下,存储到电梯内呼叫表
if(!Key_Enable[9])if(!Container4){Tab_Nei[3]=1;} //4楼有人按下,存储到电梯内呼叫表
First=!Tab_Up[0]; //如果有人按下就点亮对应LED
Second_Up=!Tab_Up[1]; //如果有人按下就点亮对应LED
Second_Down=!Tab_Down[0]; //如果有人按下就点亮对应LED
Third_Up=!Tab_Up[2]; //如果有人按下就点亮对应LED
Third_Down=!Tab_Down[1];//如果有人按下就点亮对应LED
Fourth=!Tab_Down[2]; //如果有人按下就点亮对应LED
Container1=!Tab_Nei[0]; //如果有人按下就点亮对应LED
Container2=!Tab_Nei[1]; //如果有人按下就点亮对应LED
Container3=!Tab_Nei[2]; //如果有人按下就点亮对应LED
Container4=!Tab_Nei[3]; //如果有人按下就点亮对应LED
if(!Arm)
{
P0=Tab[5];
delay_Arm(4000); //报警器延时
while(!Arm); //等待按键释放
delay_A