///***************
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();
相关文章