📄 led条屏控制器.c
字号:
{
P1=(P1&0xf1)|RowTab[hang];
E138=0;
}
else
{
P1=(P1&0xf1)|RowTab[hang-8];
E138=1;
}
Rclk=0;
Rclk=1;
Rclk=0;
XY=0;
//Delay(Speed);
if(StopFlag==1)
{
if(hang==15)
{
if(xflag==0)
{
x++;
WDTRST=0x1e;
WDTRST=0xe1;
}
}
if(x==StopTime*28)
{
xflag=1;
if(Col==0)
{
StopFlag=0;
x=0;
xflag=0;
}
}
}
}
WDTRST=0x1e;
WDTRST=0xe1;
}
if(StopFlag==0)
{
FirstAddress=FirstAddress+PingData;
}
StopFlag=1;
}
XY=1;
}
/*////////////////////////////////////////////////////////////////////////////////////*/
void GetCanShu(void)
{
uchar i=0;
while(i<ChangeNum)
{
ReadFromRom(0xa6,ReadEepRomBuff,0x10+4*i,4);
CE_RAM=1;
XBYTE[0x1fe1+4*i]=ReadEepRomBuff[0];
XBYTE[0x1fe1+4*i+1]=ReadEepRomBuff[1];
XBYTE[0x1fe1+4*i+2]=ReadEepRomBuff[2];
XBYTE[0x1fe1+4*i+3]=ReadEepRomBuff[3];
i++;
}
}
/*////////////////////////////////////////////////////////////////////////////////////*/
void main()
{
unsigned char k=0;
XY=1;
EA=1;
EX0=1; //开外部中断0
IT0=1; //下降沿触发
SCON=0X00; //串口模式0发数据
P3=0xff;
CE_RAM=1;
WDTRST=0x1e;
WDTRST=0xe1;
ReadFromRom(0xa6,ReadEepRomBuff,0x00,5);
PingCan=ReadEepRomBuff[0]; //开机读显示位数
Speed=ReadEepRomBuff[1]; //开机读速度
AllMoveWord=ReadEepRomBuff[2]*10+ReadEepRomBuff[3];
ChangeNum=ReadEepRomBuff[4]; //取出改变显示方式的总次数
WDTRST=0x1e;
WDTRST=0xe1;
PingData=2*PingCan;
GetHangDate();
GetCanShu();
getdata();
Data_To_Ram();
FirstAddress=0;
while(1)
{
RamAddress=0x6000;
for(k=0;k<ChangeNum;k++)
{
CE_RAM=1;
ChangeTab=XBYTE[0x1fe1+4*k];
StopTime=(XBYTE[0x1fe1+4*k+1] & 0x0f);
MoveWord=XBYTE[0x1fe1+4*k+2]*10+XBYTE[0x1fe1+4*k+3];
XY=0;
if(ChangeTab==0x31)
{
MoveLeftDisplay();
}
if(ChangeTab==0x32)
{
MoveUpDisplay();
}
if(ChangeTab==0x33)
{
MoveDownDisplay();
}
WDTRST=0x1e;
WDTRST=0xe1;
XY=1;
RamAddress=RamAddress+MoveWord+PingData;
}
}
}
/*//////////////////////////////////////////////////////*/
void DataTransmissiom(void) interrupt 0
{
uint i=0;
EX0=0;
for(i=0;i<800;i++);
SCON=0x71; //串口工作于模式1,REN允许接收
PCON=0x00; //波特率不加倍
TMOD=0x20; //定时器1方式2
ES=1;
TH1=0XFA; //11.0592晶振下4800波特率
TL1=0XFA;
TR1=1;
RI=0;
}
/*//////////////////////////////////////////////////////*/
void chuankou(void) interrupt 4 //串口接收程序
{
uint Count=0,i=0;
uchar temp=0,temp1=0;
uchar Song=0;
uchar StopFlagAddress=0; //存储显示方式标志地址偏移量
uint buchong=0; //补0xa1的个数
uchar ReceiveBuff=0x91; //串口接收数据
uchar Buff[6]={0,0,0,0,0,0};
EA=0;
XY=1;
WDTRST=0x1e;
WDTRST=0xe1;
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
Buff[0]=SBUF;
WDTRST=0x1e;
WDTRST=0xe1;
if(Buff[0]==0x21) //判断起始码0x21
{
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
Buff[1]=SBUF;
WDTRST=0x1e;
WDTRST=0xe1;
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
Buff[2]=SBUF;
WDTRST=0x1e;
WDTRST=0xe1;
if(Buff[1]==0x30 && Buff[2]==0x30) //判断显示屏号00
{
WDTRST=0x1e;
WDTRST=0xe1;
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
Buff[3]=SBUF;
WDTRST=0x1e;
WDTRST=0xe1;
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
Buff[4]=SBUF;
WDTRST=0x1e;
WDTRST=0xe1;
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
Buff[5]=SBUF;
WDTRST=0x1e;
WDTRST=0xe1;
while(ReceiveBuff!=0x7e)
{
WDTRST=0x1e;
WDTRST=0xe1;
while(RI==0)
{
WDTRST=0x1e;
WDTRST=0xe1;
}
RI=0;
ReceiveBuff=SBUF;
if(ReceiveBuff!=0x7e)
{
CE_RAM=1;
XBYTE[0x7e01+Count]=ReceiveBuff; //前3个字节为字数和速度控制,从0x7e01后为数据基内码
Count++; //记录接收数据的总数
}
WDTRST=0x1e;
WDTRST=0xe1;
}
WDTRST=0x1e;
WDTRST=0xe1;
temp=(((Buff[3]&0x0f)<<4) | (Buff[4]&0x0f));
temp1=(temp/16)*10+temp%16;
WDTRST=0x1e;
WDTRST=0xe1;
WriteOneByteToRom(0xa6,temp1,0x00); //存显示屏参数
PingCan=temp1;
WDTRST=0x1e;
WDTRST=0xe1;
temp=Buff[5]&0x0f;
WriteOneByteToRom(0xa6,temp,0x01); //存速度数据
Speed=temp;
WDTRST=0x1e;
WDTRST=0xe1;
/*////////////////////////////////////////////*/
ChangeNum=0;
CE_RAM=1;
if(XBYTE[0x7e01]==0x5B) //如果收到的第一个数据为“[”
{
WriteOneByteToRom(0xa6,XBYTE[0x7e02],0x10+StopFlagAddress);
StopFlagAddress++;
WriteOneByteToRom(0xa6,XBYTE[0x7e03],0x10+StopFlagAddress);
StopFlagAddress++;
ChangeNum++;
AllMoveWord=0;
MoveWord=0;
Count=Count-4;
for(temp1=0;temp1<2*PingCan;temp1++)
{
WriteOneByteToRom(0xa0,0xa1,0x00+AllMoveWord);
AllMoveWord++;
WDTRST=0x1e;
WDTRST=0xe1;
}
if(XBYTE[0x7e02]==0x31)
{
LeftMoveSign=1;
UpMoveSign=0;
}
if(XBYTE[0x7e02]==0x32)
{
LeftMoveSign=0;
UpMoveSign=1;
}
}
i=0;
while(i<Count) //将RAM中的数据存到24C08中
{
Song=XBYTE[0x7e05+i];
if(Song==0x0D)
{
i=i+2;
temp=XBYTE[0x7e05+i];
if(temp==0x5B) //检测到为切换显示的标志
{
if((UpMoveSign==1 && LeftMoveSign==0 && DownMoveSign==0 && MoveWord%(2*PingCan)!=0) ||(UpMoveSign==0 && LeftMoveSign==0&& DownMoveSign==1 && MoveWord%(2*PingCan)!=0))
{
buchong=2*PingCan+(2*PingCan-MoveWord%(2*PingCan));
MoveWord=MoveWord+(2*PingCan-MoveWord%(2*PingCan));
}
else if(UpMoveSign==0 && LeftMoveSign==1&& DownMoveSign==0 && MoveWord%2==1 )
{
buchong=2*PingCan+1;
MoveWord=MoveWord+1;
}
else
{
buchong=2*PingCan;
}
WriteOneByteToRom(0xa6,MoveWord/10,0x10+StopFlagAddress);
StopFlagAddress++;
WriteOneByteToRom(0xa6,MoveWord%10,0x10+StopFlagAddress);
StopFlagAddress++;
for(temp1=0;temp1<buchong;temp1++)
{
if(AllMoveWord<=255)
{
WriteOneByteToRom(0xa0,0xa1,0x00+AllMoveWord);
}
else if(255<AllMoveWord<=512)
{
WriteOneByteToRom(0xa2,0xa1,0x00+AllMoveWord-256);
}
else
{
WriteOneByteToRom(0xa4,0xa1,0x00+AllMoveWord-512);
}
AllMoveWord++;
WDTRST=0x1e;
WDTRST=0xe1;
}
if(XBYTE[0x7e05+i+1]==0x31)
{
LeftMoveSign=1;
UpMoveSign=0;
DownMoveSign=0;
}
if(XBYTE[0x7e05+i+1]==0x32)
{
LeftMoveSign=0;
UpMoveSign=1;
DownMoveSign=0;
}
if(XBYTE[0x7e05+i+1]==0x33)
{
LeftMoveSign=0;
UpMoveSign=0;
DownMoveSign=1;
}
WDTRST=0x1e;
WDTRST=0xe1;
WriteOneByteToRom(0xa6,XBYTE[0x7e05+i+1],0x10+StopFlagAddress);
StopFlagAddress++;
WriteOneByteToRom(0xa6,XBYTE[0x7e05+i+2],0x10+StopFlagAddress);
StopFlagAddress++;
i=i+4;
MoveWord=0;//每换一次方式总字数清零
ChangeNum++;
}
}
else
{
if(AllMoveWord<=255)
{
CE_RAM=1;
WriteOneByteToRom(0xa0,XBYTE[0x7e05+i],0x00+AllMoveWord);
}
else if(255<AllMoveWord<=512)
{
CE_RAM=1;
WriteOneByteToRom(0xa2,XBYTE[0x7e05+i],0x00+AllMoveWord-256);
}
else
{
CE_RAM=1;
WriteOneByteToRom(0xa4,XBYTE[0x7e05+i],0x00+AllMoveWord-512);
}
i++;
MoveWord++;
AllMoveWord++;
WDTRST=0x1e;
WDTRST=0xe1;
}
}
WDTRST=0x1e;
WDTRST=0xe1;
if((UpMoveSign==1 && LeftMoveSign==0 && DownMoveSign==0 && MoveWord%(2*PingCan)!=0) ||(UpMoveSign==0 && LeftMoveSign==0&& DownMoveSign==1 && MoveWord%(2*PingCan)!=0) )
{
buchong=2*PingCan+(2*PingCan-MoveWord%(2*PingCan));
MoveWord=MoveWord+(2*PingCan-MoveWord%(2*PingCan));
}
else if(UpMoveSign==0 && LeftMoveSign==1&& DownMoveSign==0 && MoveWord%2==1 )
{
buchong=2*PingCan+1;
MoveWord=MoveWord+1;
}
else
{
buchong=2*PingCan;
}
if((AllMoveWord+buchong)%2==1)
{
temp=buchong+1;
}
else
{
temp=buchong;
}
for(temp1=0;temp1<temp;temp1++)
{
if(AllMoveWord<=255)
{
WriteOneByteToRom(0xa0,0xa1,0x00+AllMoveWord);
}
else if(255<AllMoveWord<=512)
{
WriteOneByteToRom(0xa2,0xa1,0x00+AllMoveWord-256);
}
else
{
WriteOneByteToRom(0xa4,0xa1,0x00+AllMoveWord-512);
}
AllMoveWord++;
WDTRST=0x1e;
WDTRST=0xe1;
}
WriteOneByteToRom(0xa6,AllMoveWord/10,0x02);
WriteOneByteToRom(0xa6,AllMoveWord%10,0x03);
WriteOneByteToRom(0xa6,ChangeNum,0x04); //显示方式改变的总次数
WriteOneByteToRom(0xa6,MoveWord/10,0x10+StopFlagAddress); //存储最后一条信息的数量
StopFlagAddress++;
WriteOneByteToRom(0xa6,MoveWord%10,0x10+StopFlagAddress);
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -