?? 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 + -