新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于單片機的電梯控制程序

基于單片機的電梯控制程序

作者: 時間:2016-12-01 來源:網絡 收藏
if(dw1==0&&jb==1)
{ lch=1;fg=1;lc1=1; }
if((dw2x==0&&jb==1)||(sb==1&&dw2s==0))
{ lch=2;fg=1;lc2=1;dw2=0; }
else
dw2=1;
if((dw3x==0&&jb==1)||(sb==1&&dw3s==0))
{ lch=3;fg=1;lc3=1;dw3=0; }
else
dw3=1;
if(dw4==0&&sb==1)
{ lch=4;fg=1;lc4=1; }
if(dw1==0||dw2==0||dw3==0||dw4==0)
{ fg1=0;lch12=0;lch23=0;lch34=0; }
if(jylc!=0)
{
if(jylc>lch && fg1==0)
{ jd2=0;jd3=1; sb=1;jb=0; led=0; } //電梯上升
if(jylc
{ jd3=0;jd2=1; sb=0;jb=1; led=1;} //電梯下降
if(jylc==lch && fg1==0)
{ jd2=1;jd3=1; sb=0;jb=0;lc1=1;lc2=1;lc3=1;lc4=1; } //電梯停止
if(lch12==1)
{
if(jylc==1)
{ jd3=0;jd2=1; sb=0;jb=1; led=1; } //電梯下降
if(jylc>=2)
{ jd2=0;jd3=1; sb=1;jb=0; led=0; } //電梯上升
}
if(lch23==1)
{
if(jylc<=2)
{ jd3=0;jd2=1; sb=0;jb=1; led=1; } //電梯下降
if(jylc>=3)
{ jd2=0;jd3=1; sb=1;jb=0; led=0; } //電梯上升
}
if(lch34==1)
{
if(jylc<=3)
{ jd3=0;jd2=1; sb=0;jb=1; led=1; } //電梯下降
if(jylc>=4)
{ jd2=0;jd3=1; sb=1;jb=0; led=0; } //電梯上升
}
}
if(lch!=lch1||fg2==1)
{
fg2=0;
switch(lch)
{
case 1:
{
for(i=0;i<8;i++)
{
SCL=0;
Delay(1);
if(i==0||i==7)
SDA=1;
else
SDA=0;
SCL=1;
Delay(1);
}
} break;
case 2:
{
for(i=0;i<8;i++)
{
SCL=0;
Delay(1);
if(i==2||i==7)
SDA=0;
else
SDA=1;
SCL=1;
Delay(1);
}
} break;
case 3:
{
for(i=0;i<8;i++)
{
SCL=0;
Delay(1);
if(i==2||i==4)
SDA=0;
else
SDA=1;
SCL=1;
Delay(1);
}
} break;
case 4:
{
for(i=0;i<8;i++)
{
SCL=0;
Delay(1);
if(i==1||i==5||i==4)
SDA=0;
else
SDA=1;
SCL=1;
Delay(1);
}
} break;
}
lch1=lch;
}
}
}
/*------------------------------------------------
延時函數,含有輸入參數 unsigned int t,無返回值
unsigned int 是定義無符號整形變量,其值的范圍是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536-5000)/256; //重新賦值 5ms
TL0=(65536-5000)%256;
num++;
if(num<20)
{
led1=0;
if(jd2==1&&jd3==1&&mb==0)
led=0;
}
else
{
led1=1;
if(jd2==1&&jd3==1&&mb==0)
led=1;
}
if(mb==1)
{
if(num%10==0)
led=~led;
if(num==200)
led=1;
}
if(num==200)
{
num=0;
num2++;
if(num2==60)
{ num2=0;fg2=1; }
if(tz==0) // 長按停止鍵 關閉總電源
num1++;
else
num1=0;
if(num1>2)
jd1=0;
}
}
上一頁 1 2 下一頁

關鍵詞: 單片機電梯控

評論


技術專區(qū)

關閉