第一次做光立方,走了些彎路,但好在做出來了,效果還不錯。
材料清單:5mm霧狀燈珠64個,9x15cm洞洞板,STC12C5A60S2單片機,20p插針兩個,5VDC電源座一個,開關一個,導線若干。
IMG_20181116_222645.jpg (4.88 MB, 下載次數: 80)
下載附件
2018-11-16 22:39 上傳
直接用單片機驅動,不用任何其他芯片。燈一定不要貪小便宜,之前買的30塊錢1000個3mm的燈珠,用之前是好的,焊成一排后發現很多都不亮,第一次做還以為因為沒上電,結果焊到板子上還是不亮,耽誤了幾天,跟客服還吵了一架,郁悶 。
IMG_20181116_225012.jpg (4.14 MB, 下載次數: 79)
下載附件
2018-11-16 22:51 上傳
采用層共陰束共陽接法,未用P0口驅動小燈,用P1和P3口控制束,P2口控制層。
IMG_20181116_222743.jpg (5.83 MB, 下載次數: 80)
下載附件
2018-11-16 22:52 上傳
寫程序就容易多了,人眼的視覺暫留嘛,簡單說就是把自己想要的動畫分成幀,每一時幀后加延時就好了。
221309owjoy70ggwe2ro3a.jpg (164.96 KB, 下載次數: 95)
下載附件
原理圖
2018-11-16 23:16 上傳
原理圖
單片機源程序如下:
- #include<reg51.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit led1=P2^4;
- sbit led2=P2^5;
- sbit led3=P2^6;
- sbit led4=P2^7;
- sbit gongyin1=P2^3; //最頂層
- sbit gongyin2=P2^2; //第三層
- sbit gongyin3=P2^1; //第二層
- sbit gongyin4=P2^0; //最底層
- uchar wei1[]={1,0,1,0,1,0,1,0,1};
- uchar wei2[]={0,1,1,1,0,1,1,1};
- uchar wei3[]={0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1};
- uchar gongyang10[]={0x0f,0x8e,0x8c,0x88,0x80,0x00,0x00,0x00,0x10,0x11,0x60,0x40,0x00,0x20};
- uchar gongyang30[]={0x00,0x00,0x08,0x88,0xc8,0xe8,0xf0,0x71,0x31,0x11,0x00,0x04,0x06,0x02};
- uchar gongyang11[]={0x01,0x33,0x77,0xff,0xe0,0x00,0x00,0x08,0xcc,0xee,0xff,0x70,0x00,0x00};
- uchar gongyang31[]={0x00,0x00,0x07,0xff,0xee,0xcc,0x80,0x00,0x00,0x0e,0xff,0x77,0x33,0x10};
- uchar gongyang12[]={0x48,0x44,0x22,0x21,0x30,0xc0};
- uchar gongyang32[]={0x12,0x22,0x44,0x84,0x0c,0x03};
- uchar gongyang13[]={0x0f,0x8e,0x8c,0x88,0x80,0x00,0x00,0x00,0x10,0x11,0x12,0x17};
- uchar gongyang33[]={0x00,0x00,0x08,0x88,0xc8,0xe8,0xf0,0x71,0x31,0x11,0x01,0x00};
- void delay(uint time) //延時函數
- {
- unsigned int i,j;
- for(i=0;i<time;i++)
- for(j=0;j<250;j++);
- }
- void display1() //動畫1:全亮并閃爍
- {
- uchar i,j;
- j=10;
- while(j--)
- {
- for(i=0;i<2;i++)
- {
- gongyin1=wei1[i];
- gongyin2=wei1[i+2];
- gongyin3=wei1[i+4];
- gongyin4=wei1[i+6];
- P1=0XFF;
- P3=0XFF;
- delay(350);
- }
- }
- }
- void display2() //動畫2:上下每層閃動
- {
- uint i,j;
- j=5;
- while(j--)
- {
- for(i=0;i<4;i++)
- {
- gongyin1=wei2[i];
- gongyin2=wei2[i+3];
- gongyin3=wei2[i+2];
- gongyin4=wei2[i+1];
- P1=0XFF;
- P3=0XFF;
- delay(800);
- }
- }
- }
- void display3() //動畫3:從上旋轉而下,一直有四個燈亮
- {
- uint i,j;
- for(i=0;i<4;i++)
- {
- gongyin1=wei2[i];
- gongyin2=wei2[i+3];
- gongyin3=wei2[i+2];
- gongyin4=wei2[i+1];
- for(j=0;j<9;j++)
- {
- P1=gongyang10[j];
- P3=gongyang30[j];
- delay(300);
- }
- }
- }
- void display4() //動畫4:四面循環,由外向內
- {
- uint i,j;
- j=3;
- while(j--)
- {
- for(i=0;i<14;i++)
- {
- gongyin1=0;
- gongyin2=0;
- gongyin3=0;
- gongyin4=0;
- P1=gongyang10[i];
- P3=gongyang30[i];
- delay(350);
- }
- delay(200);
- }
- }
- void display5() //動畫5:由外角向內點亮
- {
- uchar i=10;
- while(i--)
- {
- gongyin1=0;
- gongyin2=1;
- gongyin3=1;
- gongyin4=0;
- P1=0x09;
- P3=0x90;
- delay(450);
- gongyin1=1;
- gongyin2=0;
- gongyin3=0;
- gongyin4=1;
- P1=0x60;
- P3=0x06;
- delay(450);
- }
- }
- void display6() //動畫6:角對角
- {
- uint i,j,k;
- k=1;
- while(k--)
- {
- for(i=0;i<14;i++)
- {
- gongyin1=wei3[i];
- gongyin2=wei3[i+6];
- gongyin3=wei3[i+5];
- gongyin4=wei3[i+4];
- P1=gongyang11[i];
- P3=gongyang31[i];
- delay(500);
- }
- for(j=13;j>0;j--)
- {
- gongyin1=wei3[j];
- gongyin2=wei3[j+6];
- gongyin3=wei3[j+5];
- gongyin4=wei3[j+4];
- P1=gongyang11[j];
- P3=gongyang31[j];
- delay(500);
- }
- delay(200);
- }
- }
- void display7() //動畫7:一豎排旋轉
- {
- uint i,j=
- j=5;
- while(j--)
- {
- for(i=0;i<6;i++)
- {
- gongyin1=0;
- gongyin2=0;
- gongyin3=0;
- gongyin4=0;
- P1=gongyang12[i];
- P3=gongyang32[i];
- delay(350);
- }
- delay(200);
- }
- }
- void display8() //動畫8:豎排左右
- {
- uint a=2;
- while(a--)
- {
- …………
- …………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- delay(70);
- }
- z3=3;
- while(z3--)
- {
- gongyin1=0;
- gongyin2=1;
- gongyin3=1;
- gongyin4=1;
- P1=0xff;
- P3=0xff;
- delay(15);
- gongyin1=1;
- gongyin2=1;
- gongyin3=1;
- gongyin4=0;
- P1=0x09;
- P3=0x00;
- delay(70);
- }
- z4=3;
- while(z4--)
- {
- gongyin1=0;
- gongyin2=1;
- gongyin3=1;
- gongyin4=1;
- P1=0xff;
- P3=0xff;
- delay(70);
- }
- }
- }
- void main()
- {
- while(1)
- {
- led1=1;
- led2=1;
- led3=1;
- led4=1;
- display1(); //動畫1:全亮并閃爍
- display2(); //動畫2:上下每層閃動
- display3(); //動畫3:從上旋轉而下,一直有四個燈亮
- display4(); //動畫4:四面循環,由外向內
- display5(); //動畫5:由外角向內點亮
- display6(); //動畫6:角對角
- display7(); //動畫7:一豎排旋轉
- display16(); //動畫16:四側面循環
- display17(); //動畫17:四底面循環-兩排
- display8(); //動畫8:豎排左右
- display9(); //動畫9:左右波浪
- display10(); //動畫10:前后波浪
- display18(); //動畫18:四底面循環 -單排
- display11(); //動畫11:X字形前后左右
- display6(); //動畫6:角對角
- display19(); //動畫19:隨機下落
- display12(); //動畫12:正方體大小變換
- display13(); //動畫13:方框大小變換
- display14(); //動畫14:方塊隨機移動
- display15(); //動畫15:方塊形成大方塊
-
- }
- }
復制代碼
所有資料51hei提供下載:
程序2.zip
(109.32 KB, 下載次數: 126)
2018-11-16 23:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|