/************************************* 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(); } } }