|
平時(shí)看到的螢火蟲大多是黃綠色的
timg (2).jpg (131.78 KB, 下載次數(shù): 69)
下載附件
2020-2-8 20:22 上傳
但還有一種螢火蟲,藍(lán)色的。
timg.jpg (25.99 KB, 下載次數(shù): 62)
下載附件
2020-2-8 20:22 上傳
u=2614420400,1707533523&fm=26&gp=0.jpg (22.24 KB, 下載次數(shù): 76)
下載附件
2020-2-8 20:22 上傳
是不是覺(jué)得藍(lán)色的螢火蟲更好看?
那就用單片機(jī)制作一個(gè)。
用stc15f104w 8腳單片機(jī)來(lái)做一個(gè)6led藍(lán)色螢火蟲瓶。當(dāng)然也可以用同樣用這個(gè)單片機(jī),采用查理復(fù)用來(lái)實(shí)現(xiàn)6個(gè)腳驅(qū)動(dòng)更多l(xiāng)ed,但編程更麻煩。也可以用stc15w204s 16腳封裝來(lái)做,那個(gè)單片機(jī)寬電壓,就比stc15f104w貴兩毛錢。
接線就是6個(gè)i/o 口接led正極,負(fù)極都接地,不用限流二極管,因?yàn)樯侠疃?0mA,led受得了。如果覺(jué)得暗,自己在程序里改推挽輸出,強(qiáng)上拉20mA,要加限流電阻
下面開(kāi)始制作
IMG_20190922_102522.jpg (2.44 MB, 下載次數(shù): 63)
下載附件
2020-2-8 20:21 上傳
準(zhǔn)備漆包線
IMG_20190922_165524.jpg (1.9 MB, 下載次數(shù): 57)
下載附件
2020-2-8 20:21 上傳
焊上藍(lán)色貼片led
IMG_20190922_165532.jpg (3.91 MB, 下載次數(shù): 60)
下載附件
2020-2-8 20:21 上傳
焊6個(gè)
IMG_20190922_165601.jpg (3.17 MB, 下載次數(shù): 74)
下載附件
2020-2-8 20:21 上傳
洞洞板上焊8pin芯片座
IMG_20191117_171923.jpg (2.11 MB, 下載次數(shù): 69)
下載附件
2020-2-8 20:21 上傳
焊上led和燒寫程序的排針
IMG_20191117_171937.jpg (2.27 MB, 下載次數(shù): 65)
下載附件
2020-2-8 20:21 上傳
背面
IMG_20191117_172123.jpg (2.11 MB, 下載次數(shù): 68)
下載附件
2020-2-8 20:21 上傳
找一個(gè)果醬玻璃瓶
IMG_20191117_172135.jpg (2.35 MB, 下載次數(shù): 76)
下載附件
2020-2-8 20:21 上傳
瓶蓋貼膠帶絕緣
IMG_20191117_172159.jpg (2.43 MB, 下載次數(shù): 79)
下載附件
2020-2-8 20:22 上傳
找一截usb線
IMG_20191117_173155.jpg (2.39 MB, 下載次數(shù): 64)
下載附件
2020-2-8 20:22 上傳
瓶蓋打孔
IMG_20191117_174536.jpg (2.38 MB, 下載次數(shù): 72)
下載附件
2020-2-8 20:22 上傳
焊上
IMG_20191117_174936.jpg (2.64 MB, 下載次數(shù): 63)
下載附件
2020-2-8 20:22 上傳
固定
IMG_20191117_174944.jpg (2.4 MB, 下載次數(shù): 74)
下載附件
2020-2-8 20:22 上傳
里面
IMG_20191117_175848.jpg (2.66 MB, 下載次數(shù): 61)
下載附件
2020-2-8 20:22 上傳
裝好,不錯(cuò)吧
IMG_20191117_175858.jpg (2.67 MB, 下載次數(shù): 56)
下載附件
2020-2-8 20:22 上傳
亮燈
IMG_20191117_175915.jpg (2.77 MB, 下載次數(shù): 63)
下載附件
2020-2-8 20:22 上傳
挺省電的7mA
IMG_20191117_180104.jpg (1.57 MB, 下載次數(shù): 54)
下載附件
2020-2-8 20:22 上傳
關(guān)燈效果
程序我寫了一個(gè),只是能用,非常繁瑣,大家見(jiàn)效了。
用一個(gè)定時(shí)器產(chǎn)生一個(gè)小定時(shí),到了就計(jì)數(shù),然后調(diào)整占空比來(lái)實(shí)現(xiàn)呼吸,每個(gè)led頻率不一樣來(lái)實(shí)現(xiàn)不同步的隨機(jī)
還有一個(gè)定時(shí)器用來(lái)切換模式,隨便寫了兩個(gè)模式,各50秒左右,一個(gè)是單個(gè)亮,一個(gè)是6個(gè)各自頻率呼吸
- #include <stc15.h>
- #define ufloat unsigned float
- #define uchar unsigned char
- #define uint unsigned int
- #define s0 200
- #define s1 130
- #define s2 145
- #define s3 174
- #define s4 160
- #define s5 190 //設(shè)置每個(gè)呼吸時(shí)間長(zhǎng)度
- uchar z0,z1,z2,z3,z4,z5, t0,t1,t2,t3,t4,t5;
- bit flag1, flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag10,flag11,flag12; //flag1 3 5 7 9 11占空比標(biāo)志位, flag2 4 6 8 10 12占空比方向標(biāo)志位(0自增, 1自減);
- int a=0,b=0,d;
- sbit led0 = P3^0; //輸出口;
- sbit led1 = P3^1;
- sbit led2 = P3^2;
- sbit led3 = P3^3;
- sbit led4 = P3^4;
- sbit led5 = P3^5;
- void init ();
- void display ();
- //***************1ms延時(shí)@12mhz***************
- void delay(unsigned int c){
- unsigned int i;
- while(c--!=0){
- for(i=0;i<600;i++);
- }
- }
- //***************延時(shí)程序**************************
- void delay1(unsigned int f){
- while(f--!=0){
- }
- }
- /*****************定時(shí)器2中斷*******************/
- void timer2(void) interrupt 12
- {
- T2H = 0;
- T2L = 0;
- a++;
- if(a==10000){
- b++;
- a=0;
- if(b==2){b=0;}
- }
- }
- int main (void)
- {
- init();
- while (1)
- {
- if(b==1){
- ET0 = 1; //開(kāi)定時(shí)器0中斷;
- display (); //演示模式1
- }
- if(b==0){
- ET0 = 0; //關(guān)定時(shí)器0中斷; //以下都是演示模式2
- for(d=0;d<1000;d++){
- P3=0x01;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
-
- for(d=1000;d>0;d--){
- P3=0x01;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
- for(d=0;d<1000;d++){
- P3=0x02;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
-
- for(d=1000;d>0;d--){
- P3=0x02;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
- for(d=0;d<1000;d++){
- P3=0x04;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
-
- for(d=1000;d>0;d--){
- P3=0x04;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
- for(d=0;d<1000;d++){
- P3=0x08;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
-
- for(d=1000;d>0;d--){
- P3=0x08;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
- for(d=0;d<1000;d++){
- P3=0x10;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
-
- for(d=1000;d>0;d--){
- P3=0x10;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
- for(d=0;d<1000;d++){
- P3=0x20;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
-
- for(d=1000;d>0;d--){
- P3=0x20;
- delay1(d);
- P3=0x00;
- delay1(1000-d);
- }
- }
- }
- return 0;
- }
- /**********----------**********/
- void init () //初始化子函數(shù)
- {
- TMOD = 0x01; //定時(shí)器0模式;
- TH0 = (65536-50)/256; //附高8位初值(0.05ms);
- TL0 = (65536-50)%256; //附底8位初值(0.05ms);
- EA = 1; //開(kāi)總中斷;
- ET0 = 1; //開(kāi)定時(shí)器0中斷;
- TR0 = 1; //開(kāi)啟定時(shí)器0;
- AUXR |= 0x04; //定時(shí)器2時(shí)鐘1T模式
- T2L = 0x00; //設(shè)置定時(shí)2初值
- T2H = 0x00; //設(shè)置定時(shí)2初值
- AUXR |= 0x10; //定時(shí)器2開(kāi)始計(jì)時(shí)
- IE2 |= 0x04; //定時(shí)器2允許中斷
- }
- /**********----------**********/
- void display () //占空比子函數(shù);
- {
- //*******************************led0*********************************//
- if (flag1 == 1) //占空比標(biāo)志起始;
- {
- flag1 = 0; //復(fù)位占空比標(biāo)志位;
- if (flag2 == 0) //占空比自增標(biāo)志;
- {
- z0++;
- if (z0 == s0) //占空比最大值;
- {
- flag2 = 1; //占空比進(jìn)入自減標(biāo)志位開(kāi)啟;
- }
- }
- else //占空比自減開(kāi)始;
- {
- z0--;
- if (z0 == 0) //占空比最小值;
- {
- flag2 = 0; //占空比進(jìn)入自增標(biāo)志位開(kāi)啟;
- }
- }
- }
- //*******************************led1*********************************//
- if (flag3 == 1) //占空比標(biāo)志起始;
- {
- flag3 = 0; //復(fù)位占空比標(biāo)志位;
- if (flag4 == 0) //占空比自增標(biāo)志;
- {
- z1++;
- if (z1 == s1) //占空比最大值;
- {
- flag4 = 1; //占空比進(jìn)入自減標(biāo)志位開(kāi)啟;
- }
- }
- else //占空比自減開(kāi)始;
- {
- z1--;
- if (z1 == 0) //占空比最小值;
- {
- flag4 = 0; //占空比進(jìn)入自增標(biāo)志位開(kāi)啟;
- }
- }
- }
- //*******************************led2*********************************//
- if (flag5 == 1) //占空比標(biāo)志起始;
- {
- flag5 = 0; //復(fù)位占空比標(biāo)志位;
- if (flag6 == 0) //占空比自增標(biāo)志;
- {
- z2++;
- if (z2 == s2) //占空比最大值;
- {
- flag6 = 1; //占空比進(jìn)入自減標(biāo)志位開(kāi)啟;
- }
- }
- else //占空比自減開(kāi)始;
- {
- z2--;
- if (z2 == 0) //占空比最小值;
- {
- flag6 = 0; //占空比進(jìn)入自增標(biāo)志位開(kāi)啟;
- }
- }
- }
- //*******************************led3*********************************//
- if (flag7 == 1) //占空比標(biāo)志起始;
- {
- flag7 = 0; //復(fù)位占空比標(biāo)志位;
- if (flag8 == 0) //占空比自增標(biāo)志;
- {
- z3++;
- if (z3 == s3) //占空比最大值;
- {
- flag8 = 1; //占空比進(jìn)入自減標(biāo)志位開(kāi)啟;
- }
- }
- else //占空比自減開(kāi)始;
- {
- z3--;
- if (z3 == 0) //占空比最小值;
- {
- flag8 = 0; //占空比進(jìn)入自增標(biāo)志位開(kāi)啟;
- }
- }
- }
- //*******************************led4*********************************//
- if (flag9 == 1) //占空比標(biāo)志起始;
- {
- flag9 = 0; //復(fù)位占空比標(biāo)志位;
- if (flag10 == 0) //占空比自增標(biāo)志;
- {
- z4++;
- if (z4 == s4) //占空比最大值;
- {
- flag10 = 1; //占空比進(jìn)入自減標(biāo)志位開(kāi)啟;
- }
- }
- else //占空比自減開(kāi)始;
- {
- z4--;
- if (z4 == 0) //占空比最小值;
- {
- flag10 = 0; //占空比進(jìn)入自增標(biāo)志位開(kāi)啟;
- }
- }
- }
- //*******************************led5*********************************//
- if (flag11 == 1) //占空比標(biāo)志起始;
- {
- flag11 = 0; //復(fù)位占空比標(biāo)志位;
- if (flag12 == 0) //占空比自增標(biāo)志;
- {
- z5++;
- if (z5 == s5) //占空比最大值;
- {
- flag12 = 1; //占空比進(jìn)入自減標(biāo)志位開(kāi)啟;
- }
- }
- else //占空比自減開(kāi)始;
- {
- z5--;
- if (z5 == 0) //占空比最小值;
- {
- flag12 = 0; //占空比進(jìn)入自增標(biāo)志位開(kāi)啟;
- }
- }
- }
- }
- //*****************************定時(shí)器中斷****************************//
- void timer0() interrupt 1
- {
- TH0 = (65536-50)/256;
- TL0 = (65536-50)%256;
- t0++;
- t1++;
- t2++;
- t3++;
- t4++;
- t5++;
- //*******************************led0*********************************//
- if (t0 <= z0) //未到占空比數(shù)值輸出為0;
- {
- led0 = 1;
- }
- else
- {
- led0 = 0; //到達(dá)占空比數(shù)值輸出為1;
- }
- if (t0 == s0) //一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
- {
- t0 = 0;
- led0 = 0;
- flag1 = 1; //占空比標(biāo)志再次開(kāi)啟;
- }
- //***********************************led1**********************************//
- if (t1 <= z1) //未到占空比數(shù)值輸出為0;
- {
- led1 = 1;
- }
- else
- {
- led1 = 0; //到達(dá)占空比數(shù)值輸出為1;
- }
- if (t1 == s1) //一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
- {
- t1 = 0;
- led1 = 0;
- flag3 = 1; //占空比標(biāo)志再次開(kāi)啟;
- }
- //**********************************led2***********************************//
- if (t2 <= z2) //未到占空比數(shù)值輸出為0;
- {
- led2 = 1;
- }
- else
- {
- led2 = 0; //到達(dá)占空比數(shù)值輸出為1;
- }
- if (t2 == s2) //一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
- {
- t2 = 0;
- led2 = 0;
- flag5 = 1; //占空比標(biāo)志再次開(kāi)啟;
- }
- //*********************************led3**************************************//
- if (t3 <= z3) //未到占空比數(shù)值輸出為0;
- {
- led3 = 1;
- }
- else
- {
- led3 = 0; //到達(dá)占空比數(shù)值輸出為1;
- }
- if (t3 == s3) //一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
- {
- t3 = 0;
- led3 = 0;
- flag7 = 1; //占空比標(biāo)志再次開(kāi)啟;
- }
- //*******************************led4*********************************//
- if (t4 <= z4) //未到占空比數(shù)值輸出為0;
- {
- led4 = 1;
- }
- else
- {
- led4 = 0; //到達(dá)占空比數(shù)值輸出為1;
- }
- if (t4 == s4) //一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
- {
- t4 = 0;
- led4 = 0;
- flag9 = 1; //占空比標(biāo)志再次開(kāi)啟;
- }
- //*******************************led5*********************************//
- if (t5 <= z5) //未到占空比數(shù)值輸出為0;
- {
- led5 = 1;
- }
- else
- {
- led5 = 0; //到達(dá)占空比數(shù)值輸出為1;
- }
- if (t5 == s5) //一旦到達(dá)總周期,動(dòng)態(tài)計(jì)數(shù)器t0累加值清零,進(jìn)入下個(gè)循環(huán);
- {
- t5 = 0;
- led5 = 0;
- flag11 = 1; //占空比標(biāo)志再次開(kāi)啟;
- }
-
- }
復(fù)制代碼
|
|