📄 xszkzqv12.c
字号:
sendall();
delay1s(speed);
}
}
//*******************************
//右百叶闭幕
//********************************
void ybybm(uchar speed)
{
uchar x,i;
for(i=3;i<254;i--)
{for(x=0;x<XX/4;x++)
{
dis_red[x*4+i]=0;
dis_grn[x*4+i]=0;
dis_blu[x*4+i]=0;
}
sendall();
delay1s(speed);
}
}
//*******************************
//从中间向两边展开
//*******************************
void mlrun(uchar speed)
{
uchar x;
for(x=0;x<X1;x++)
{
dis_red[x+X1]=x64cr[x+X1];dis_red[X1-x]=x64cr[X1-x];
dis_grn[x+X1]=x64cg[x+X1];dis_grn[X1-x]=x64cg[X1-x];
dis_blu[x+X1]=x64cb[x+X1];dis_blu[X1-x]=x64cb[X1-x];
sendall();
}
delay1s(speed);
}
//*******************************
//从中间向两边闭幕
//**********************************
void mlrco(uchar speed)
{
uchar x;
for(x=X1;x<XX;x++)
{
dis_red[x]=0;dis_red[XX-1-x]=0;
dis_grn[x]=0;dis_grn[XX-1-x]=0;
dis_blu[x]=0;dis_blu[XX-1-x]=0;
sendall();
}
delay1s(speed);
}
//*******************************
//两边向中间展开
//**********************************
void lrmun(uchar speed)
{
uchar x;
for(x=XX-1;x>X1;x--)
{
dis_red[x]=x64cr[x];dis_red[XX-1-x]=x64cr[XX-1-x];
dis_grn[x]=x64cg[x];dis_grn[XX-1-x]=x64cg[XX-1-x];
dis_blu[x]=x64cb[x];dis_blu[XX-1-x]=x64cb[XX-1-x];
sendall();
}
delay1s(speed);
}
//*******************************
//两边向中间闭幕
//**********************************
void lrmco(uchar speed)
{
uchar x;
for(x=0;x<X1;x++)
{
dis_red[x]=0;dis_red[XX-1-x]=0;
dis_grn[x]=0;dis_grn[XX-1-x]=0;
dis_blu[x]=0;dis_blu[XX-1-x]=0;
sendall();
}
delay1s(speed);
}
//*******************************
//中间向两边移出
//**********************************
void mlrmov(uchar speed)
{
uint i,x;
uchar code *ROMP;
ROMP=0x2000;
for(x=0;x<XX;x++)
{
dis_red[x]=0;//清屏
dis_grn[x]=0;//清屏
dis_blu[x]=0;//清屏
}
for(i=0;i<XX/2;i++)
{
for(x=XX-1;x>X1;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[X1]=*ROMP;ROMP++;
dis_grn[X1]=*ROMP;ROMP++;
dis_blu[X1]=*ROMP;ROMP++;
for(x=0;x<X1-1;x++)
{
dis_red[x]=dis_red[x+1];
dis_grn[x]=dis_grn[x+1];
dis_blu[x]=dis_blu[x+1];
}
dis_red[X1-1]=*ROMP;ROMP++;
dis_grn[X1-1]=*ROMP;ROMP++;
dis_blu[X1-1]=*ROMP;ROMP++;
sendall();
}
delay1s(speed);
}
//***********************************
//多彩流动
//***************************************
void qcld(uchar speed)
{
uint j,x;
uchar rs,gs,bs;
for(j=0;j<XX;j++)
{for(x=XX-1;x>0;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[0]=x64cr[j];
dis_grn[0]=x64cg[j];
dis_blu[0]=x64cb[j];
sendall();
delay(speed);
}
delay1s(speed);
for(j=0;j<256;j++)
{
rs=dis_red[XX-1];
gs=dis_grn[XX-1];
bs=dis_blu[XX-1];
for(x=XX-1;x>0;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[0]=rs;
dis_grn[0]=gs;
dis_blu[0]=bs;
sendall();
delay(speed);
}
//*******************************************
for(j=0;j<XX;j++)
{for(x=XX-1;x>0;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[0]=0;
dis_grn[0]=0;
dis_blu[0]=0;
sendall();
delay(speed);
}
}
//***********************************
//七彩流动 一条一种颜色
//***************************************
void colld(uchar speed)
{
uint j,x;
uchar rs,gs,bs;
for(j=0;j<XX;j++)
{for(x=XX-1;x>0;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[0]=col7cr[x];
dis_grn[0]=col7cg[x];
dis_blu[0]=col7cb[x];
sendall();
delay(speed);
}
delay1s(speed);
for(j=0;j<256;j++)
{
rs=dis_red[XX-1];
gs=dis_grn[XX-1];
bs=dis_blu[XX-1];
for(x=XX-1;x>0;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[0]=rs;
dis_grn[0]=gs;
dis_blu[0]=bs;
sendall();
delay(speed);
}
//*******************************************
for(j=0;j<XX;j++)
{for(x=XX-1;x>0;x--)
{
dis_red[x]=dis_red[x-1];
dis_grn[x]=dis_grn[x-1];
dis_blu[x]=dis_blu[x-1];
}
dis_red[0]=0;
dis_grn[0]=0;
dis_blu[0]=0;
sendall();
delay(speed);
}
}
//------------------------------
void msk_data(uchar r0,g0,b0,r1,g1,b1)
{
uchar i;
for(i=0;i<XX/4;i++)
{
dis_red[i]=r0;
dis_grn[i]=g0;
dis_blu[i]=b0;
dis_red[i+1]=r1;
dis_grn[i+1]=g1;
dis_blu[i+1]=b1;
dis_red[i+2]=r0;
dis_grn[i+2]=g0;
dis_blu[i+2]=b0;
dis_red[i+3]=r1;
dis_grn[i+3]=g1;
dis_blu[i+3]=b1;
//------------------------------
dis_red[i+4]=r1;
dis_grn[i+4]=g1;
dis_blu[i+4]=b1;
dis_red[i+5]=r0;
dis_grn[i+5]=g0;
dis_blu[i+5]=b0;
dis_red[i+6]=r1;
dis_grn[i+6]=g1;
dis_blu[i+6]=b1;
dis_red[i+7]=r0;
dis_grn[i+7]=g0;
dis_blu[i+7]=b0;
}
}
//************************************
//马赛克
//*************************************
void msk(uchar speed)
{
msk_data(255,0,0,0,255,0);
sendall();
delay1s(speed);
msk_data(0,255,0,0,0,255);
sendall();
delay1s(speed);
msk_data(0,0,255,255,0,0);
sendall();
delay1s(speed);
msk_data(255,255,0,0,255,255);
sendall();
delay1s(speed);
msk_data(255,0,255,0,255,255);
sendall();
delay1s(speed);
msk_data(255,255,0,0,0,255);
sendall();
delay1s(speed);
}
//******************************
//发送显示内存数据到各灯管
//*******************************
void sendall(void)
{
uchar j;
for(j=0;j<XX-1;j++)
{TB81=1;
SBUF1=j+1;while(!TI1);TI1=0;
TB81=0;
send_del(50);
//send red
SBUF1=dis_red[j];
while(!TI1);TI1=0;
send_del(50);
//send greed
SBUF1=dis_grn[j];
while(!TI1);TI1=0;
send_del(50);
//***********bluer
SBUF1=dis_blu[j];
while(!TI1);TI1=0;
send_del(50);
}
led=!led;
}
//**********************************
//延时
//*******************************
void delay1s(uint j)
{
//uint i;
while(j!=0)
{
while(timer!=10)
{
if(frameok){save();frameok=0;}
}
timer=0;
j--;
}
}
//*******************************
void delay(uint j)
{
while(j!=0)
{
j--;if(frameok){save();frameok=0;}
}
}
//-------------------------------------
void send_del(uchar j)
{
while(j!=0)
{
j--;
if(frameok){save();frameok=0;}
}
}
//*******************************
void send_delay(void)
{
uchar j;
j=12;
while(j!=0)
{
j--;
}
}
//********************************************
void main()
{
uchar i,j;
uchar idata *p;
SM0=1;
SM1=1;
SM2=0;
T2CON=0X30;
ES=0;
RCAP2H=0XFF;
TH2=0XFF;
RCAP2L=0Xdc; //bps19200 0xdc
TL2=0Xdc; //bps=38400bps 256-(22.1184*10^6/32/38400)
TR2=1;
ES=1;
REN=1;
TMOD=0x25; //timer 1 dps timer sync
SCON1=0xc0; //serial prot 1
TH1=0xfd;
TL1=0xfd; //256-(22.1184*10~6/32/12/3/38400*2)
senden=0;//rev
senden1=1;
TL0=0xff; //timer 0 is ac sync
TH0=0xff;
TR0=1;
ET0=1;
TR1=1;
ET1=0;
//ES1=1;
EA=1;
PMR=PMR|0x01; //enable on-chip RAM
XX=20; //dz 162 pcs
X1=10;
while(1)
{
p=&iic_buf[0];
Read24c02(p,0,128);
if(iic_buf[0]==0xaa)
{
for(i=0;i<iic_buf[1];i++)
{
switch(iic_buf[i*3+2])
{
case 0:
for(j=0;j<iic_buf[i*3+3];j++)
col7(iic_buf[i*3+4]);
break;//七彩渐变
case 1:
for(j=0;j<iic_buf[i*3+3];j++)
{zbyzk(iic_buf[i*3+4]);
zbybm(iic_buf[i*3+4]);
ybyzk(iic_buf[i*3+4]);
ybybm(iic_buf[i*3+4]);
}
break; //百叶
case 2:
for(j=0;j<iic_buf[i*3+3];j++)
qcld(iic_buf[i*3+4]);
break;//七彩流水
case 3:
for(j=0;j<iic_buf[i*3+3];j++)
{duun(iic_buf[i*3+4]);clear();}
break;//向左展开
case 4:
for(j=0;j<iic_buf[i*3+3];j++)
{lrmun(iic_buf[i*3+4]);
lrmco(iic_buf[i*3+4]);
}
break;//左右中间展开
case 5:
for(j=0;j<iic_buf[i*3+3];j++)
{mlrun(iic_buf[i*3+4]);
mlrco(iic_buf[i*3+4]);
}
break;//中间向两边展开
case 6:
for(j=0;j<iic_buf[i*3+3];j++)
{mlrmov(iic_buf[i*3+4]);
mlrun(iic_buf[i*3+4]);
}
break;//中间向两边流动
case 7:
for(j=0;j<iic_buf[i*3+3];j++)
colld(iic_buf[i*3+4]);
break;//七彩流动,
case 8:
for(j=0;j<iic_buf[i*3+3];j++)
qczk(iic_buf[i*3+4]);
break;
case 9:
for(j=0;j<iic_buf[i*3+3];j++)
msk(iic_buf[i*3+4]);
break;//马赛克
default:break;
}
}
}
else
{
col7(10);
zbyzk(120/XX);
zbybm(120/XX);
ybyzk(120/XX);
ybybm(120/XX);
qcld(120/XX);
duun(120/XX);
clear();
lrmun(120/XX);
lrmco(120/XX);
mlrun(120/XX);
mlrco(120/XX);
colld(120/XX);
mlrmov(120/XX);
mlrun(120/XX);
qczk(10);
}//end if 0xaa
}
}
//*****************************************
// 串口中断服务程序
//*****************************************
void send(void) interrupt 4
{
uchar d;
if(!TI && RI && !frameok)
{RI=0;
d=SBUF;
if(pointer==0)
{if(d==ADD)
{
subchk=d;send_buf[0]=d;TB8=1;senden=1;
send_delay();SBUF=d;while(!TI);TI=0;send_delay();
senden=0;
SM2=0;TB8=0;
pointer++;}//71
else if(d==0x00)
{subchk=d;SM2=0;pointer++;}
}
else
{if(pointer==127)
{//send_buf[pointer]=d;
if(d==subchk)
{
senden=1;send_delay();SBUF=subchk;while(!TI);send_delay();senden=0;TI=0;
frameok=1;pointer=0;SM2=1;}
// else
// {senden=1;send_delay();SBUF=~subchk;while(!TI);send_delay();TI=0;senden=0;}
// SM2=1;pointer=0;
}
else
{send_buf[pointer]=d;subchk+=d;pointer++;}
}
}//end if
}
//*************************************
void timer1() interrupt 1
{
TL0=0xff;
TH0=0xff;
timer++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -