您的位置:首頁>設計>正文

帶聲控的心形流水燈,隨音樂擺動(電路,源碼)

電路圖

如果大家嫌電路圖看不清, 可到文末查看高清電路圖獲取方式

實物圖

心形流水燈控制晶片使用單片機STC12C5A60S2.可通過一個按鍵切換花樣,

有兩種聲控模式。

看著像不像某寶買的, 其實我想應該不是的, 應該是作者自己設計投板製造的。

部分源碼

程式名:心形流水燈

編寫人:劉金昊

編寫時間:2016年7月第一版, 2017年2月第二版

硬體支援:STC12C5A60S2

說明:低電平點亮

/*********************************************************************************************/

#include

#include

#define key_t 50 //按鍵去抖延時時間設置

sbit key=P3 ^ 3; //花樣切換按鍵定義

unsigned char volatile a=1;//功能表標誌位元, 用volatile聲明防止編譯器優化此變數, 使其可在中斷中改變

sbit LED1=P0^0;

sbit LED2=P0^1;

sbit LED3=P0^2;

sbit LED4=P0^3;

sbit LED5=P0^4;

sbit LED6=P0^5;

sbit LED7=P0^6;

sbit LED8=P0^7;

sbit LED9=P2^7;

sbit LED10=P2^6;

sbit LED11=P2^5;

sbit LED12=P2^4;

sbit LED13=P2^3;

sbit LED14=P2^2;

sbit LED15=P2^1;

sbit LED16=P2^0;

sbit LED17=P4^0;

sbit LED18=P4^1;

sbit LED19=P4^2;

sbit LED20=P4^3;

sbit LED21=P4^4;

sbit LED22=P4^5;

sbit LED23=P4^6;

sbit LED24=P4^7;

/*********************************************************************************************/

void delay (unsigned int a) //毫秒級CPU延時函數, 用於花樣閃爍延時

{

unsigned int i;

while( a-- != 0)

{

for(i = 0; i < 600; i++);

if(key==0)break;

}

}

/*********************************************************************************************/

void key_delay (unsigned int a) //按鍵去抖動延時函數

{

unsigned int i;

while( a-- != 0)

{

for(i = 0; i < 600; i++);

}

}

/*********************************************************************************************/

void pwm_delay(unsigned int t) //pwm專用延時函數

{

unsigned int tt;

tt=10*t;

while(--tt);

}

/*********************************************************************************************/

void INT1(void) interrupt 2 using 3 //INT1中斷函數

{

a++;

if(a>13)

{

a=1;

}

}

/*********************************************************************************************/

void m1(void) //相鄰兩燈呼吸點亮

{

unsigned int i;

unsigned char code led=0xaa,led1=0x55; //led首位不亮, led1首位亮

for(i=1;i<400;i++)

{

if(key==0)break;

P2=0xff;

P0=0xff;

P4=0xff;

pwm_delay(i);

P2=led1;

P0=led;

P4=led;

pwm_delay(400-i);

}

P2=0xff;

P0=0xff;

P4=0xff;

for(i=399;i>0;i--)

{

if(key==0)break;

P2=0xff;

P0=0xff;

P4=0xff;

pwm_delay(i);

P2=led;

P0=led1;

P4=led1;

pwm_delay(400-i);

}

P2=led;

P0=led1;

P4=led1;

for(i=1;i<400;i++)

{

if(key==0)break;

P2=0xff;

P0=0xff;

P4=0xff;

pwm_delay(i);

P2=led;

P0=led1;

P4=led1;

pwm_delay(400-i);

}

P2=0xff;

P0=0xff;

P4=0xff;

for(i=399;i>0;i--)

{

if(key==0){key_delay(key_t);if(key==0){a++;break;}}

P2=0xff;

P0=0xff;

P4=0xff;

pwm_delay(i);

P2=led1;

P0=led;

P4=led;

pwm_delay(400-i);

}

P2=led1;

P0=led;

P4=led;

}

/*********************************************************************************************/

void m2(void) //單個led順時針旋轉

{

unsigned char code led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED從低位往高位移

unsigned char code led1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //LED從高位往低位移

unsigned char i;

for(i=0;i<=7;i++)

{

P0=led[i];

delay(50);

if(key==0)break;

}

P0=0xff;

for(i=0;i<=7;i++)

{

P2=led1[i];

delay(50);

if(key==0)break;

}

P2=0xff;

for(i=0;i<=7;i++)

{

P4=led[i];

delay(50);

if(key==0){key_delay(key_t);if(key==0){a++;break;}}

}

P4=0xff;

}

/*********************************************************************************************/

void m3(void) //相鄰兩燈交替點亮流水效果

{

unsigned char code led=0xaa,led1=0x55; //led首位不亮, led1首位亮

P2=led;

P0=led1;

P4=led1;

delay(200);

P2=led1;

P0=led;

P4=led;

delay(200);

if(key==0){key_delay(key_t);if(key==0)a++;}

}

/*********************************************************************************************/

void m4(void) //對稱上下點亮熄滅

{

unsigned char i;

unsigned char code led[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00},t=100; //由低位元向高位點亮

unsigned char code led1[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; //由高位向低位元點亮

unsigned char code led2[]={0x3e,0x1c,0x08,0x00}; //LED9~16自上到下點亮

unsigned char code led3[]={0xf7,0xe3,0xc1,0x80,}; //LED9~16自下到上點亮

P4=0xff;

P2=0xff;

P0=0xff;

for(i=0;i<8;i++)

{

P0=led[i+1];

P4=led1[i];

delay(t);

if(key==0)break;

}

P2=0x7f;

P4=0x00;

delay(t);

for(i=0;i<4;i++)

{

P2=led2[i];

delay(t);

if(key==0)break;

}

for(i=0;i<8;i++)

{

P0=~led[i+1];

P4=~led1[i];

delay(t);

if(key==0)break;

}

P2=~0x7f;

P4=~0x00;

delay(t);

for(i=0;i<4;i++)

{

P2=~led2[i];

delay(t);

if(key==0)break;

}

for(i=0;i<4;i++)

{

P2=led3[i];

delay(t);

if(key==0)break;

}

P2=0x00;

P4=0xfe;

delay(t);

for(i=0;i<8;i++)

{

P0=led1[i+1];

P4=led[i+1];

delay(t);

if(key==0)break;

}

for(i=0;i<4;i++)

{

P2=~led3[i];

delay(t);

if(key==0)break;

}

P2=~0x00;

P4=~0xfe;

delay(t);

for(i=0;i<8;i++)

{

P0=~led1[i+1];

P4=~led[i+1];

delay(t);

if(key==0){key_delay(key_t);if(key==0){a++;break;}}

}

}

高清電路圖及餘下麻煩大家前往”51黑電子論壇“下載, 直達連結---//www.51hei.com/bbs/dpj-91376-1.html----

Next Article
喜欢就按个赞吧!!!
点击关闭提示