51 单片机电梯显示系统:基于串行通讯的楼层显示
#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,0x02,0x02,0x7E,//9
}; uint r= 0; char offset = 0; uchar Current_Level = 1,Dest_Level=1,x=0,t =0;
void main() { Current_Level = 1;//?1???? TMOD = 0x01; //T0???? TH0 = -4000/256;//4ms//?????8?? TL0 = -4000%256; TR0=1; IE = 0x82; EA =1; while(1); }
void Led_Dispaly() interrupt 1 { uchar i; //??????,???????,??????? if (RI) { // 根据接收到的数据设置目标楼层 switch (SBUF) { case 0x01: Dest_Level = 1; break; case 0x02: Dest_Level = 2; break; case 0x03: Dest_Level = 3; break; case 0x04: Dest_Level = 4; break; case 0x05: Dest_Level = 5; break; case 0x06: Dest_Level = 6; break; case 0x07: Dest_Level = 7; break; case 0x08: Dest_Level = 8; break; case 0x09: Dest_Level = 9; break; default: break; } RI = 0; // 清除接收中断标志位 } TH0 = -4000/256;//4ms TL0 = -4000%256; i = Current_Level *8 + r + offset; P0 = ~Table[i];
// 电梯上升
if (Current_Level < Dest_Level )
{
if ( ++r ==8)
{
r =0;
if( ++x ==4)
{
x = 0;
if(++offset ==8)
{
offset = 0;
Current_Level++;
}
}
}
}
// 电梯下降
else if(Current_Level > Dest_Level )
{
if ( ++r ==8)
{
r =0;
if( ++x ==4)
{
x = 0;
if(--offset == -8)
{
offset = 0;
Current_Level--;
}
}
}
}
// 电梯停止,显示当前楼层
else
{
if ( ++r ==8) r =0;
offset = 0;
}
原文地址: https://www.cveoy.top/t/topic/k5QL 著作权归作者所有。请勿转载和采集!