/*************************************
MCU:STC12C56 晶振:12MHZ
*************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define RGB_count 20
#define RGB_speed 30
sbit DIN=P1^2;
/*************0码*******************/
void DIN_bit_0()
{
uchar i;
DIN=1;
for(i=1;i>0;i--); //低速模式 1+3+4*3+1
_nop_();
DIN=0; //1+3+4*7
for(i=3;i>0;i--);
}
/*************1码*******************/
void DIN_bit_1()
{
uchar i;
DIN=1; //1+3+4*7+1
for(i=3;i>0;i--);
_nop_();
DIN=0;
for(i=1;i>0;i--); //1+3+4*3
}
/*************reset码*******************/
void reset()
{
uint i;
DIN=0;
for(i=250;i>0;i--);
}
/*************数据传输******************/
void send_dat(uchar dat) //高位先传
{
uchar i;
for(i=8;i>0;i--)
{
if(dat & 0x80) DIN_bit_1();
else DIN_bit_0();
dat <<=1;
}
}
/***************延时******************/
void delay(uchar t)
{
unsigned long j;
while(t--) for(j=0;j<1000;j++);
}
/*************主程序******************/
void main()
{
uchar i,n,num,t;
while(1)
{
/*************R渐亮*******************/
for(i=0;i<255;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(i);
send_dat(0);
send_dat(0);
}
reset();
delay(1);
}
/*************R渐灭*******************/
for(i=255;i>0;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(i);
send_dat(0);
send_dat(0);
}
reset();
delay(1);
}
/*************G渐亮*******************/
for(i=0;i<255;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(0);
send_dat(i);
send_dat(0);
}
reset();
delay(1);
}
/*************G渐灭*******************/
for(i=255;i>0;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(0);
send_dat(i);
send_dat(0);
}
reset();
delay(1);
}
/*************B渐亮*******************/
for(i=0;i<255;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(0);
send_dat(0);
send_dat(i);
}
reset();
delay(1);
}
/*************B渐灭*******************/
for(i=255;i>0;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(0);
send_dat(0);
send_dat(i);
}
reset();
delay(1);
}
/*************RG渐亮*******************/
for(i=0;i<255;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(i);
send_dat(i);
send_dat(0);
}
reset();
delay(1);
}
/*************RG渐灭*******************/
for(i=255;i>0;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(i);
send_dat(i);
send_dat(0);
}
reset();
delay(1);
}
/*************GB渐亮*******************/
for(i=0;i<255;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(0);
send_dat(i);
send_dat(i);
}
reset();
delay(1);
}
/*************GB渐灭*******************/
for(i=255;i>0;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(0);
send_dat(i);
send_dat(i);
}
reset();
delay(1);
}
/*************RB渐亮*******************/
for(i=0;i<255;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(i);
send_dat(0);
send_dat(i);
}
reset();
delay(1);
}
/*************RB渐灭*******************/
for(i=255;i>0;i++)
{
for(n=RGB_count;n>0;n--)
{
send_dat(i);
send_dat(0);
send_dat(i);
}
reset();
delay(1);
}
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
/*************B跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(0);
send_dat(0);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************B跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(0);
send_dat(0);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
/*************G跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(0);
send_dat(255);
send_dat(0);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************G跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(0);
send_dat(255);
send_dat(0);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
/*************R跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(0);
send_dat(0);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************R跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(0);
send_dat(0);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
/*************RG跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(255);
send_dat(0);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************RG跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(255);
send_dat(0);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
/*************GB跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(0);
send_dat(255);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************GB跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(0);
send_dat(255);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
/*************RB跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(0);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************RB跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(0);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
/*************RGB跑马灯增加*******************/
for(i=0;i<RGB_count;i++)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(255);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
}
/*************RGB跑马灯减少*******************/
for(i=RGB_count;i>0;i--)
{
for(num=0;num<i;num++)
{
send_dat(255);
send_dat(255);
send_dat(255);
}
reset();
for(t=RGB_speed;t>0;t--) delay(1);
/*************RGB全灭*******************/
for(num=RGB_count;num>0;num--)
{
send_dat(0);
send_dat(0);
send_dat(0);
}
reset();
}
}
}