/*************************************
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--);
}
/*************數(shù)據(jù)傳輸******************/
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();
}
}
}