基于51单片机的16层电梯控制系统(16)原理图、流程图、物料清单、仿真图、源代码
基于51单片机的电梯(16)
简易电梯
1、模拟16层电梯工作,实现上下行指示,楼层显示
2、使用矩阵键盘输入要去的楼层
3、电梯进行红外检测,如果红外被遮挡则停止运行。
【说明:按多个楼层以后,LED会出现比较严重的闪烁】
#include <reg52.h> //调用单片机头文件
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
bit flag_100ms,flag_1s;
bit flag_stop = 0; //用做到了相应的楼停下
sbit beep = P2^2;
sbit xia = P2^5;
sbit zhong = P2^6;
sbit shang = P2^7;
sbit hw = P2^3; //红外
uchar time1=0;
uchar value2;
uchar dt_1=0; //1楼电梯标志位
uchar dt_2=0; //2楼电梯标志位
uchar dt_3=0; //3楼电梯标志位
uchar dt_4=0; //4楼电梯标志位
uchar dt_5=0; //5楼电梯标志位
uchar dt_6=0; //6楼电梯标志位
uchar dt_7=0; //7楼电梯标志位
uchar dt_8=0; //8楼电梯标志位
uchar dt_9=0; //9楼电梯标志位
uchar dt_10=0; //10楼电梯标志位
uchar dt_11=0; //11楼电梯标志位
uchar dt_12=0; //12楼电梯标志位
uchar dt_13=0; //13楼电梯标志位
uchar dt_14=0; //14楼电梯标志位
uchar dt_15=0; //15楼电梯标志位
uchar dt_16=0; //16楼电梯标志位
uchar dt_value = 1; //电梯到哪一层的变量
uchar dt_s_x ; //电梯上下的标志位
数码管段选定义 0 1 2 3 4 5 6 7 8 9
uchar smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
// A B C D E F 不显示
0x37,0x7C,0x39,0x5E,0x5E,0x71,0}; //断码
//数码管位选定义
sbit smg_we1 = P2^0; //数码管位选定义
sbit smg_we2 = P2^1;
uchar dis_smg[4] = {0};
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/***********************1蜂鸣器函数*****************************/
void beep_on()
{
beep=0;
delay_1ms(1000);
beep=1;
}
/***********************数码显示函数*****************************/
/*void display()
{
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
}*/
/********************独立按键程序*****************/
uchar key_can; //按键值
void key() //独立按键程序
{
uchar i,j;
i=0;
j=0;
P1=0xf0;
switch(P1)
{
case 0xe0:i=0;break;
case 0xd0:i=1;break;
case 0xb0:i=2;break;
case 0x70:i=3;
}
P1=0x0f;
switch(P1)
{
case 0x0e:j=13;break;
case 0x0d:j=9;break;
case 0x0b:j=5;break;
case 0x07:j=1;
}
while(P1!=0x0f);
key_can=i+j;
}
void key_with() //设置楼层标志
{
if(key_can == 1)
{
dt_1 = 1; //
}
if(key_can == 2)
{
dt_2 = 1;
}
if(key_can == 3)
{
dt_3 = 1;
}
if(key_can == 4)
{
dt_4 = 1;
}
if(key_can == 5)
{
dt_5 = 1;
}
if(key_can == 6)
{
dt_6 = 1;
}
if(key_can == 7)
{
dt_7 = 1;
}
if(key_can == 8)
{
dt_8 = 1;
}
if(key_can == 9)
{
dt_9 = 1; //
}
if(key_can == 10)
{
dt_10 = 1;
}
if(key_can == 11)
{
dt_11 = 1;
}
if(key_can == 12)
{
dt_12 = 1;
}
if(key_can == 13)
{
dt_13 = 1;
}
if(key_can == 14)
{
dt_14 = 1;
}
if(key_can == 15)
{
dt_15 = 1;
}
if(key_can == 16)
{
dt_16 = 1;
}
}
/****************电梯向上、做最后的判断是否还要继续向上****************/
void dt_shang_guan()
{
uchar value;
if(dt_s_x == 1) //电梯向上 做最后的判断是否还要继续向上
{
if(dt_value == 1) //在第1层
{
value = dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 2) //在第2层
{
value = dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 3) //在第3层
{
value = dt_4 + dt_5 + dt_6 + dt_7 + dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 4) //在第4层
{
value = dt_5 + dt_6 + dt_7 + dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 5) //在第5层
{
value = dt_6 + dt_7 + dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 6) //在第6层
{
value = dt_7 + dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 7) //在第7层
{
value = dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 8) //在第8层
{
value = dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 9) //在第9层
{
value = dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 10) //在第10层
{
value = dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 11) //在第11层
{
value = dt_12+dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 12) //在第12层
{
value = dt_13+dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 13) //在第13层
{
value = dt_14+dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 14) //在第14层
{
value = dt_15+dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 15) //在第15层
{
value = dt_16;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 16) //在第16层
{
dt_s_x = 0; //电梯停下不动了
shang = 1; //关闭上字
zhong = 1;
}
}
}
/****************电梯向下、做最后的判断是否还要继续向下****************/
void dt_xia_guan()
{
uchar value;
if(dt_s_x == 2) //电梯向下 做最后的判断是否还要继续向下
{
if(dt_value == 1) //在第1层
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭上字
zhong = 1;
flag_stop = 1;
}
else if(dt_value == 2) //在第2层
{
value = dt_1;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 3) //在第3层
{
value = dt_1 + dt_2;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 4) //在第4层
{
value = dt_1 + dt_2 + dt_3;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 5) //在第5层
{
value = dt_1 + dt_2 + dt_3 + dt_4;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 6) //在第6层
{
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 7) //在第7层
{
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5+ dt_6;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 8) //在第8层
{
value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 9) //在第9层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 10) //在第10层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 11) //在第11层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 12) //在第12层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 13) //在第13层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 14) //在第14层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 15) //在第15层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
else if(dt_value == 16) //在第16层
{
value = dt_1 + dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15;
if(value == 0) //说明上面没有人按下
{
dt_s_x = 0; //电梯停下不动了
xia = 1; //关闭下字
zhong = 1;
}else
flag_stop = 1;
}
}
}
/***********************电梯处理函数************************/
void td_dis()
{
uchar value;
value = dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value != 0)
{ //100ms
if(flag_stop == 1) //到相应的楼了 要停下
{
/***************************向上走电梯***********************************/
if(dt_s_x != 0) //向上走电梯
{
if(dt_s_x == 1) //向上走电梯
{
dt_value ++;
shang = 0; //显示上字
zhong = 0;
}
if(dt_s_x == 2) //向下走电梯
{
dt_value --;
xia = 0; //显示下字
zhong = 0;
}
if(dt_value == 1) //当到了第一层的时候
{
if(dt_1 == 1)
{
dt_1 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 2) //当到了第二层的时候
{
if(dt_2 == 1)
{
dt_2 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 3) //当到了第3层的时候
{
if(dt_3 == 1)
{
dt_3 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 4) //当到了第4层的时候
{
if(dt_4 == 1)
{
dt_4 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 5) //当到了第5层的时候
{
if(dt_5 == 1)
{
dt_5 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 6) //当到了第6层的时候
{
if(dt_6 == 1)
{
dt_6 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 7) //当到了第7层的时候
{
if(dt_7 == 1)
{
dt_7 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 8) //当到了第8层的时候
{
if(dt_8 == 1)
{
dt_8 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 9) //当到了第9层的时候
{
if(dt_9 == 1)
{
dt_9 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 10) //当到了第10层的时候
{
if(dt_10 == 1)
{
dt_10 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 11) //当到了第11层的时候
{
if(dt_11 == 1)
{
dt_11 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 12) //当到了第12层的时候
{
if(dt_12 == 1)
{
dt_12 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 13) //当到了第13层的时候
{
if(dt_13 == 1)
{
dt_13 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 14) //当到了第14层的时候
{
if(dt_14 == 1)
{
dt_14 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 15) //当到了第15层的时候
{
if(dt_15 == 1)
{
dt_15 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
else if(dt_value == 16) //当到了第16层的时候
{
if(dt_16 == 1)
{
dt_16 = 0; //清零电机在的标志
flag_stop = 0; //到停下
beep_on(); //打开蜂鸣器
}
}
}
}
}
if(flag_stop == 0)
{
value2 ++;
if(value2 % 5 == 0)
{
if(dt_s_x == 1) //上
{
shang = ~shang;
zhong = ~zhong;
}
if(dt_s_x == 2) //下
{
zhong = ~zhong;
xia = ~xia;
}
}
if(value2 >= 10) //1.0s
{
beep = 1; //关闭蜂鸣器
value2 = 0;
}
dt_shang_guan(); //电梯向上 做最后的判断是否还要继续向上
dt_xia_guan(); //电梯向下 做最后的判断是否还要继续向下
}
}
/*************定时器0初始化程序***************/
void time_init()
{
EA = 1; //开总中断
TMOD = 0X01; //定时器0、工作方式1
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
ET0 = 1; //开定时器0中断
TR0 = 1; //允许定时器0定时
}
void led_dong()
{
if(dt_1)
{
P3 = 0xee; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_2)
{
P3 = 0xde; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_3)
{
P3 = 0xbe; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_4)
{
P3 = 0x7e; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_5)
{
P3 = 0xed; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_6)
{
P3 = 0xdd; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_7)
{
P3 = 0xbd; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_8)
{
P3 = 0x7d; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_9)
{
P3 = 0xeb; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_10)
{
P3 = 0xdb; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_11)
{
P3 = 0xbb; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_12)
{
P3 = 0x7b; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_13)
{
P3 = 0xe7; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_14)
{
P3 = 0xd7; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
if(dt_15)
{
P3 = 0xb7; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 0; smg_we2 = 1;
P0 = dis_smg[0]; //段选
delay_1ms(1);
if(dt_16)
{
P3 = 0x77; //灯亮
}
P0 = 0x00; //消隐
smg_we1 = 1; smg_we2 = 0;
P0 = dis_smg[1];
delay_1ms(1);
}
/******************电梯启动**********************/
void start()
{
uchar value;
switch(dt_value)
{
case 1:value=dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
{
dt_s_x=1;
}
break;
case 2:value=dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1;
if(value)
dt_s_x=2;
}
break;
case 3:value=dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2;
if(value)
dt_s_x=2;
}
break;
case 4:value=dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3;
if(value)
dt_s_x=2;
}
break;
case 5:value=dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4;
if(value)
dt_s_x=2;
}
break;
case 6:value=dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5;
if(value)
dt_s_x=2;
}
break;
case 7:value=dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6;
if(value)
dt_s_x=2;
}
break;
case 8:value=dt_9+dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7;
if(value)
dt_s_x=2;
}
break;
case 9:value=dt_10+dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8;
if(value)
dt_s_x=2;
}
break;
case 10:value=dt_11+dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9;
if(value)
dt_s_x=2;
}
break;
case 11:value=dt_12+dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10;
if(value)
dt_s_x=2;
}
break;
case 12:value=dt_13+dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11;
if(value)
dt_s_x=2;
}
break;
case 13:value=dt_14+dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12;
if(value)
dt_s_x=2;
}
break;
case 14:value=dt_15+dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13;
if(value)
dt_s_x=2;
}
break;
case 15:value=dt_16;
if(value)
dt_s_x=1;
else
{
value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14;
if(value)
dt_s_x=2;
}
break;
case 16:value=dt_1+dt_2+dt_3+dt_4+dt_5+dt_6+dt_7+dt_8+dt_9+dt_10+dt_11+dt_12+dt_13+dt_14;
if(value)
dt_s_x=2;
if(dt_s_x)
flag_stop=1;
}
}
/******************主程序**********************/
void main()
{
time_init(); //定时器初始化
while(1)
{
if(hw == 0) //正常工作
{
key(); //按键程序
key_with();
dis_smg[1] = smg_du[dt_value % 10]; //显示楼层
dis_smg[0] = smg_du[dt_value / 10]; //显示楼层
led_dong();
//display(); //数码管显示函数
if(flag_100ms == 1)
{
flag_100ms = 0;
td_dis(); //电梯处理函数
if(flag_stop==0)
start(); //启动电梯
}
}
else // 红外防夹 禁止工作
{
beep = 0;
delay_1ms(100);
beep = 1;
delay_1ms(100);
}
}
}
/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
if(time1<20)
time1++;
else
{
time1=0;
flag_100ms = 1 ;
}
}