文件
- 仿真程序
- Protues原理图
说明
- 矩阵键盘模拟电梯控制按钮。
- 7段数码管显示当前电梯楼层,目标电梯楼层
- 数码管显示电梯上升和下降状态。
- LED模拟开门关门。
- 蜂鸣器控制声音。
演示
程序
void main() //主函数
{
uchar i=0,j=0;
smg1=0;smg2=0;smg3=0;smg4=0;smg5=0;smg6=0;
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
TH1=0XFd;
TL1=0XFd;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
TMOD|=0X01;//初始化定时器
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
disp();//显示
//电梯控制
if(fang==0)//停止状态
{
if(louceng<6)//上升判断
{
for(i=louceng-1;i<6;i++)
{
if((flag1[i]>0)||(flag3[i]>0)||(flag2[i]>0))
{
fang=1;
flag3[i]=1;
}
}
}
if(louceng>1)//下降判断
{
for(i=0;i<louceng-1;i++)
{
if((flag1[i]>0)||(flag3[i]>0)||(flag2[i]>0))
{
fang=2;
flag3[i]=1;
}
}
}
if((flag1[louceng-1]>0)||(flag3[louceng-1]>0)||(flag2[louceng-1]>0))//到达楼层
{
open();
flag1[louceng-1]=0;
flag2[louceng-1]=0;
flag3[louceng-1]=0;
}
}
if(fang==1)//上升控制
{
j=0;
if(louceng<5)//停止判断
{
for(i=louceng;i<5;i++)
{
if((flag1[i]>0)||(flag3[i]>0))
{
j=i;
next=i+1;
break;
}
}
if(j==0)
{
fang=0;
flag2[louceng-1]=0;
}
}
else
{
fang=0;
}
if(fang==1)
{
decline();
if(louceng<5)
louceng++;
if((flag1[louceng-1]>0)||(flag3[louceng-1]>0))//到达楼层
{
open();
flag1[louceng-1]=0;
flag3[louceng-1]=0;
}
}
}
if(fang==2)//下降控制
{
j=0;
if(louceng>1)//停止判断
{
for(i=louceng-1;i!=0xff;i--)
{
if((flag2[i]>0)||(flag3[i]>0))
{
j=1;
next=i+1;
break;
}
}
if(j==0)
{
fang=0;
flag1[louceng-1]=0;
}
}
else
{
fang=0;
}
if(fang==2)
{
rise();
if(louceng>1)
louceng--;
if((flag2[louceng-1]>0)||(flag3[louceng-1]>0))//到达楼层
{
open();
flag2[louceng-1]=0;
flag3[louceng-1]=0;
}
}
}
}
}
工程文件
shop.52dpj.com/191.html