///***************
VCC=9V,VDD
电阻=5.1K,VDD=5.5V,33M晶振,高速,“0码”高电平
120ns
#include
#include
#define uchar unsigned char
#define uint
unsigned int
#define nop() _nop_()
#define Red 1
#define Green 2
#define Blue 3
#define Write 4
#define High 1
#define Low 0
sbit DIO=P1^0;
bdata uchar a;
sbit a7=a^7;
sbit LED=P2^2;
uchar show[12],color=1,temp=0xff;
void delay_ms(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*void write(uchar date) //低速,33M,高速时两倍
{
uchar i;
for(i=0;i<8;i++)
{
if(date&0x80)
{
DIO=1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
date<<=1;
}
}*/
void write(uchar date) //高速,0码500n,1码1000n (33M)
{
uchar i;
for(i=0;i<8;i++)
{
if(date&0x80)
{
DIO=1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
//最少14个nop,550NS可用,
nop();
nop();
nop();
nop();//多无限
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();//27个nop可用.940NS
DIO=0;
}
else
{
DIO=1;//120NS
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();//10个nop可用,420NS
//
nop();
//
nop(); //最少单单一个DIO=1;120nS,可用
//
nop(); //最多13个nop,520NS可用
//nop();//1812.0921D加这一个nop,不可用
DIO=0;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
date<<=1;
}
}
void display()
{
uchar i,j;
for(j=0;j<3;j++)//芯片个数
for(i=0;i<12;i++)//1812就是3*4=12,1809就是3*3=9,1803、4就是3*1=3
write(show[i]);
}
void load()
{
uchar i;
for(i=0;i<4;i++)
//载入灯组数,1812则载入4组灯,1809则载入3组灯,1803、4则有1
{
if(color==Red)
{
show[i*3+0]=temp;
show[i*3+1]=0x00;
show[i*3+2]=0x00;
}
if(color==Green)
{
show[i*3+0]=0x00;
show[i*3+1]=temp;
show[i*3+2]=0x00;
}
if(color==Blue)
{
show[i*3+0]=0x00;
show[i*3+1]=0x00;
show[i*3+2]=temp;
}
if(color==Write)
{
show[i*3+0]=temp;
show[i*3+1]=temp;
show[i*3+2]=temp;
}
}
}
void show_3()
{
for(color=1;color<5;color++) //五种颜色;依次变化R、G、B、W
{
for(temp=0;temp<255;temp++)//256级灰度从'0x00'到0xff''
{
load();
//载入相应颜色和灰度
display();
delay_ms(50);
//灰度保持时间,可以控制颜色变化速度
}
for(temp=255;temp>0;temp--)//256级灰度从'0xff'到0x00''
{
load();
display();
delay_ms(50);
}
}
}
void show_1()//四组灯依次红绿蓝
{
uchar i;
for(i=0;i<2;i++)
{
write(0xff);
write(0x00);
write(0xaa);
write(0xff);
write(0x00);
write(0xaa);
write(0xff);
write(0x00);
write(0xaa);
write(0xff);
write(0xff);
write(0x00);
}
}
void main()
{
uchar i,j;
for(j=0;j<4;j++)
for(i=0;i<3;i++)
write(0xff);
delay_ms(50);
while(1)
{
show_3();
//show_1();
/*for(j=0;j<4;j++)
for(i=0;i<3;i++)
write(0xaa);*/
//delay_ms(50);
/*
nop(); nop();
nop();
nop();
nop(); nop(); nop();
nop();
nop();
nop();//300NS
nop(); nop();
nop();
nop();
nop(); nop(); nop();
nop();
nop();
nop();
//600
nop(); nop();
nop();
nop();
nop(); nop(); nop();
nop();
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。