微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于单片机的电梯控制程序

基于单片机的电梯控制程序

时间:12-01 来源:互联网 点击:
#include //包含头文件,一般情况不需要改动,

//头文件包含特殊功能寄存器的定义

sbit SCL=P2^0;

sbit SDA=P2^1;

sbit led=P2^2;

sbit led1=P1^5;

sbit tz=P2^3; //停止按钮

sbit lc1=P2^4; //一层楼按钮

sbit lc2=P2^5; //二层楼按钮

sbit lc3=P2^6; //三层楼按钮

sbit lc4=P2^7; //四层楼按钮

sbit mb=P0^0; //门保险传感器处理

sbit dw1=P0^1; //一层楼到位处理

sbit dw2x=P0^2; //一层楼到位处理

sbit dw2s=P0^3; //一层楼到位处理

sbit dw3x=P0^4; //一层楼到位处理

sbit dw3s=P0^5; //一层楼到位处理

sbit dw4=P0^6; //一层楼到位处理

sbit jd1=P3^5; // 停止总电源常闭继电器

sbit jd2=P3^6; //上升继电器

sbit jd3=P3^7; //下降继电器

bit fg,fg1,fg2; //位处理

bit sb,jb; // 上升标志位 下降标志位

bit dw2,dw3; //二楼 三楼到位标志

bit lch12; // 1-2楼层之间标志

bit lch23; // 2-3楼层之间标志

bit lch34; // 3-4楼层之间标志

unsigned char num,num1,num2;

unsigned char jylc; // 记忆层号变量

void Delay(unsigned int t); //函数声明

void Init_Timer0(void);

/*------------------------------------------------

主函数

------------------------------------------------*/

void main (void)

{

char i,a;

char lch,lch1; // 楼层号变量 ,lch1 用在数码管扫描时只扫描一次

SDA=0;

lch=2; fg=1;

Delay(60);

if(dw1==0)

{ lch=1;fg=1;lc1=1; }

if(dw2x==0||dw2s==0)

{ lch=2;fg=1;lc2=1;}

if(dw3x==0||dw3s==0)

{ lch=3;fg=1;lc3=1;}

if(dw4==0)

{ lch=4;fg=1;lc4=1; }

Init_Timer0(); //定时器初始化

while (1) //主循环

{

if(lc1==1&&lc2==1&&lc3==1&&lc4==1)

a=1;

if(lc1==0&&a==1&&dw1!=0) //楼层选择

{ a=0;jylc=1;lc1=0; }

if(lc2==0&&a==1&&dw2!=0)

{ a=0;jylc=2;lc2=0; }

if(lc3==0&&a==1&&dw3!=0)

{ a=0;jylc=3;lc3=0; }

if(lc4==0&&a==1&&dw4!=0)

{ a=0;jylc=4;lc4=0; }

if(tz==0||mb==1) //停止按钮按下

{

lc1=1;lc2=1;lc3=1;lc4=1; //楼层按钮复位

jylc=0; //记忆楼层复位

if(lch12==0&&lch23==0&&lch34==0&&(sb==1||jb==1))

{

fg1=1;

if(lch==1&&sb==1)

lch12=1;

if(lch==2&&sb==1)

lch23=1;

if(lch==2&&jb==1)

lch12=1;

if(lch==3&&sb==1)

lch34=1;

if(lch==3&&jb==1)

lch23=1;

if(lch==4&&jb==1)

lch34=1;

}

jd2=1;jd3=1; // 继电器停止通电 电梯停止

}

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>

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top