51单片机实现8层楼电梯控制系统
#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code Table[]= { 0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,//0 0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,//1 0x00,0x7E,0x02,0x02,0x7E,0x40,0x40,0x7E,//2 0x00,0x7E,0x02,0x02,0x7E,0x02,0x02,0x7E,//3 0x00,0x48,0x48,0x48,0x7E,0x08,0x08,0x08,//4 0x00,0x7E,0x40,0x40,0x7E,0x02,0x02,0x7E,//5 0x00,0x7C,0x40,0x40,0x7C,0x44,0x44,0x7C,//6 0x00,0x7C,0x04,0x04,0x04,0x04,0x04,0x04,//7 0x00,0x7C,0x44,0x44,0x7C,0x44,0x44,0x7C,//8 0x00,0x7E,0x42,0x42,0x7E,0x2,0x2,0x7E,//9
}; uint r= 0; char offset = 0; uchar Current_Level = 1,Dest_Level=1,x=0,t =0;
void main()
{
P1 = 0x80;
Current_Level = 1;//设置初始楼层为1
TMOD = 0x21; //T0模式1, T1模式2
TH0 = -4000/256;//4ms
TL0 = -4000%256;
TR0=1;
SCON=0x50; //串口模式1
TH1=0xFD;TL1=0xFD;//设置波特率9600
TR1=1; //启动定时器1
IE = 0x92;//开启中断
EA =1;
while(1);
}
void Serial_Receive() interrupt 4 { //串口接收中断 unsigned char val=0; val=SBUF; P2=val; if (Dest_Level == Current_Level && val != 0xff) { if (val ==0x09)Dest_Level =9; if (val ==0x08)Dest_Level =8; if (val ==0x07)Dest_Level =7; if (val ==0x06)Dest_Level =6; if (val ==0x05)Dest_Level =5; if (val ==0x04)Dest_Level =4; if (val ==0x03)Dest_Level =3; if (val ==0x02)Dest_Level =2; if (val ==0x01)Dest_Level =1; } RI = 0;//清除接收中断标志位 }
void Led_Dispaly() interrupt 1 { uchar i; //发送当前楼层信息 if (Dest_Level == Current_Level) { SBUF = 0xff; //发送0xff } TH0 = -4000/256;//4ms TL0 = -4000%256; P1 =crol(P1,1); i = Current_Level *8 + r + offset+1; P0 = ~Table[i];
//电梯上升
if (Current_Level < Dest_Level )
{
if ( ++r ==8)
{//到达一个楼层
r =0;
if( ++x ==4)
{//到达4个楼层
x = 0;
if(++offset ==8)
{
offset = 0;
Current_Level++;
}
}
}
}
//电梯下降
else if(Current_Level > Dest_Level )
{
if ( ++r ==8)
{//到达一个楼层
r =0;
if( ++x ==4)
{//到达4个楼层
x = 0;
if(--offset == -8)
{
offset = 0;
Current_Level--;
}
}
}
}
//电梯停止
else
{
if ( ++r ==8) r =0;
}
}
原文地址: http://www.cveoy.top/t/topic/geEQ 著作权归作者所有。请勿转载和采集!