中華廚具網(wǎng)
    手機版    二維碼   標簽云  廚具企業(yè)大全

用簡單的發(fā)光二極管,做不簡單的事,8*8*8光立方詳細制作過程

2024-05-14 22:03:34 來源:今日頭條 作者/編輯: 瀏覽次數(shù):5911 手機訪問 使用手機“掃一掃”以下二維碼,即可分享本文到“朋友圈”中。

光立方由若干個二極管led燈以立方體形式搭建,4*4*4、8*8*8、16*16*16甚至更多,又由單片機、鎖存器、譯碼器等電器元件驅(qū)動,形成立體動畫效果。其中8*8*8光立方最為常見。

例如:8*8*8光立方是由512個發(fā)光二極管按照立方體的方式搭建焊接起來的,有層共陰束共陽和層共陽束共陰兩種方案,每一層有8*8個發(fā)光二極管,共8層。用c語言編譯單片機程序使自定義動畫效果得以實現(xiàn)。

光立方工作原理

光立方簡單講就是用單片機控制很多規(guī)則排列的led的亮和滅。

1、單個led的控制方式

先了解單個led的控制方式,可以是將正極接電源,負極通過一個限流電阻連接至單片機的某個io口。io口輸出低電平時,led就亮,反之,led滅。

如果我們想驅(qū)動任意位置的led,我們只需要在該位置led所使用的列線接地,行線接上+v即可。

學過單片機的朋友們,都知道數(shù)碼管是怎么點亮的,其中有位選和段選之分,通過掃描來實現(xiàn)所有數(shù)碼管能正常工作以實現(xiàn)顯示我們想要的數(shù)字。

點陣也一樣,盡管是8*8的點陣,如果我們讓整體能隨意顯示圖案,那也需要用掃描的方式才能夠?qū)崿F(xiàn),否則,無法實現(xiàn)對其精準的控制。

所謂掃描,就是說,我們一次只能讓一行排或者一豎排的燈亮。每次只能這么點,8次為一個周期,從左至右依次點一次,那么循環(huán)起來,我們看到的就是完整的圖像了。

2、每一層led的控制方式

若按照單個led的控制方式,每個led需要占用單片機的一個io口,控制100個led就需要100個io口。那么,有沒有一種方式,可以用較少的io口,控制較多的led呢?答案是肯定的,這種方法,就是掃描驅(qū)動電路。

2*2掃描驅(qū)動電路

所以一般情況下,光立方的每一層雖然有64個燈,但是我們會有64跟線分別連接到這些燈上,從而實現(xiàn)一次性的對64個燈進行控制,通常單片機引腳較少,一般將采用74hc573,74hc595等芯片進行拓展。

3、(基于74hc573的)8*8*8光立方led的控制方式

數(shù)據(jù)通過并行的方式,分別打入每一個74hc573中,再控制器儲存這些數(shù)據(jù),從而實現(xiàn)一層64個燈同時的點亮。下面描述一下一個固定畫面的顯示,所需要硬件執(zhí)行的過程。

1)將第一層64個點的數(shù)據(jù)傳入8個74hc573中,控制uln2803層控制芯片打開第一層開關(guān),使第一層點亮,這個時候,其他層是滅的。

2)等待時間t。

3)熄滅第一層,開始向74hc573中傳輸?shù)诙拥臄?shù)據(jù),鎖存,開啟第二層總控制開關(guān),點亮第二層。

4)等待時間t。

。。。

熄滅第一層,將第八層的的數(shù)據(jù)傳進所有74hc573中,鎖存,開啟第八層總開關(guān),點亮第八層。

再回到第一步,循環(huán)下去。。

這樣,便實現(xiàn)了一個周期畫面的顯示,由于人眼的視覺暫留的特性,只要刷新的夠快,我們看到的就是光立方整體都在亮。便實現(xiàn)了我們想要的效果。為了畫面的穩(wěn)定,上面間隔點亮t要保持一致,否則會出現(xiàn)亮度不均的情況。

在實際使用上述電路的時候,最好給74hc573輸出的64個引腳分別加一個限流電阻,這樣能起到很好的二極管保護作用和整體功耗的限制以及亮度的調(diào)節(jié)。

仔細分析上述控制過程,可以發(fā)現(xiàn)進一步節(jié)約io口的數(shù)量方法。

以16×16的整列為例,若限定16列中,每次只亮一列,就可以用4根io線加一個4~16譯碼器替代。這樣,就變?yōu)?6+4只有20個io口了。而行還是保留16根,因為這樣做,可以一次控制1列中的多個led同時亮。加快掃描進度。

基于74hc573的8*8*8光立方電路圖

以上原理有了,可以開始動手了

(圖片很多 ,打開需要時間 請耐心等待。。。)

下面我們來搭建 光立方的點陣部分,

步驟:

1,先把512個led,負級全部彎成90度

2,擺到搭建模版上,進行負極 與 負極間的焊接,一共是8列。

3,歪曲正極90度,進焊接,一共7列。

到這led的點陣列就焊接完成了,像這樣的陣列一共要8片。

把led插的 模具上,將 led的負極彎成90度,備用等待焊接,一共要512個。

====》

所有的led全部變成這樣。

把彎好的 led 像圖上擺在模具上。

擺好后,準備進行焊接。

led的焊接,把2個led的 負極焊接在一起。 注意焊接時候速度要快,要不然溫度會損害led.還有就是led的負極不要 碰到正極。

焊接好的 led 負極 。要焊接這樣的led,為8列

led 陣列

焊接完成,8列l(wèi)ed。下面準備焊接,led的正極。

用一個高大約,5mm的尺子。用來墊在led下面方便,彎曲led正極的引腳。

把高5mm的尺子插到led陣列里,用按住led 另外一只手彎曲led的正極。

注意的是 彎曲的正極,要和負極間有一定的距離。

將全部的正極彎曲成 90度,至于負極的上層。 注意!只要彎曲7列就可以了最后一列不用彎曲。(最后用來連接層用的)

焊接led,正極與正極。

制作好8片,led陣列。

最后的組裝搭建。

1 測試焊接好的8點陣。

2把點陣插到底板上。

3連接層。

4用導電連接層與底板。

我這里把 1步和2步 測試和 插上底板一起完成,

直接把,焊接好的led點陣,插到底板上,然后上電測試。

紅色 的向下的箭頭 為 led的豎 也就是led的陰極 ,全部插在板上。

圖上示例插了1片, 搭建把剩下的 8片全部插好。 就變成下面圖的樣子。

剩下的 就全部都是led陽極了。看下圖

綠色的線 表示把層的陽極全部焊接 起來。 (就是 剛剛插好的8片剩下的陽極)

全部焊接后會剩下最左邊的一排 多余腳剪了就可以了。

層全部焊接好后,要進行層 共陽的連接。

底板與層陽極之間的連接。黑色的是我們連接時用的導線,紅色是我們畫的 給大家示意用的 。

層的連接是有順序的 從電源口這邊為最高層,依次向下, 用導線 把底板 和層連接起來。 每個層對應一個 銅柱。

下午是我們連接好層線,和把最后一排多余剪掉圖:

這樣就完成了 整個光立方的搭建了 。

物理層面處理完畢,我們就得開始寫代碼了:

#include;

#include;

#define uchar unsigned char

#define uint unsigned int

uchar display[8][8];

uchar code table_cha[8][8]={0x51,0x51,0x51,0x4a,0x4a,0x4a,0x44,0x44,0x18,0x1c,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0x66,0x30,0x18,0xc,0x6,0xf6,0x3c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,0x30,0x38,0x3c,0x3e,0x36,0x7e,0x30,0x30,0x3c,0x3c,0x18,0x18,0x18,0x18,0x3c,0x3c,0x66,0xff,0xff,0xff,0x7e,0x3c,0x18,0x18,0x66,0x66,0x66,0x66,0x66,0x66,0x7e,0x3c};

uchar code table_id[40]={0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,0x00,0xff,0x89,0x89,0x00,0xf8,0x27,0x27,0xf8,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,0x81,0x81,0xff,0x00,0xff,0x09,0x09,0x09,0x01,0x0,0x01,0x01,0xff,0x01,0x01,0x00};

uchar code dat[128]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x6f,0x8f,0x93,0x73,0x6f,0x8f,0x93,0x73,0x4a,0x6a,0x8a,0xaa,0xae,0xb2,0xb6,0x96,0x76,0x56,0x52,0x4e,0x25,0x45,0x65,0x85,0xa5,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xb9,0x99,0x79,0x59,0x39,0x35,0x31,0x2d,0x29,0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4};

uchar code dat2[28]={0x0,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,0xdc,0xbc,0x9c,0x7c,0x5c,0x3c,0x1c,0x18,0x14,0x10,0xc,0x8,0x4};

uchar code dat3[24]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x65,0x64,0x63,0x62,0x61,0x60,0x50,0x40,0x30,0x20,0x10};

uchar code table_3p[3][8]={0xff,0x89,0xf5,0x93,0x93,0xf5,0x89,0xff,0x0e,0x1f,0x3f,0x7e,0x7e,0x3f,0x1f,0x0e,0x18,0x3c,0x7e,0xff,0x18,0x18,0x18,0x18};

void sinter()

{

ie=0x82;

tcon=0x01;

th0=0xc0;

tl0=0;

tr0=1;

}

void delay5us(void) //誤差 -0.026765046296us stc 1t 22.1184mhz

{

unsigned char a,b;

for(b=7;b>;0;b--)

for(a=2;a>;0;a--);

}

void delay(uint i)

{

while (i--){

delay5us();}//12t的mcu 注釋這個延時即可

}

uchar judgebit(uchar num,uchar b)

{

}

uchar abs(uchar a)

{

}

uchar abss(char a)

{

}

void max(uchar *a,uchar *b)

{

}

uchar maxt(uchar a,uchar b,uchar c)

{

}

void clear(char le)

{

}

void trailler(uint speed)

{

}

void point(uchar x,uchar y,uchar z,uchar le)

{

}

void type(uchar cha,uchar y)

{

}

void cirp(char cpp,uchar dir,uchar le)

{

}

void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le)

{

}

void box(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)

{

}

void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)

{

}

void poke(uchar n,uchar x,uchar y)

{

}

void boxtola(char i,uchar n)

{

}

void rolldisplay(uint speed)

{

}

void roll_apeak_yz(uchar n,uint speed)

{

}

void roll_apeak_xy(uchar n,uint speed)

{

}

void roll_3_xy(uchar n,uint speed)

{

}

void trans(uchar z,uint speed)

{

}

void tranoutchar(uchar c,uint speed)

{

}

void transss()

{

}

void flash_1()

{

}

void main()

{

sinter();

while(1){

// clear(0);

//flash_1();

clear(0);

flash_2();

flash_3();

flash_4();

flash_4();

flash_5();

flash_5();

flash_6();

flash_7();

flash_8();

flash_9();

flash_10();

clear (0);

flash_11();

flash_9();

flash_5();

flash_7();

flash_5();

flash_6();

flash_8();

flash_9();

flash_10();

}

}

//p0; //573 in

//p1; //uln2803

//p2; //573 le

void print() interrupt 1

{

uchar i;

static uchar layer=0;

p1=0;

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

{

p2=1<

delay(3);

p0=display[layer][i];

delay(3);

}

p1=1<

if (layer<7)

layer++;

else

layer=0;

th0=0xc0;

tl0=0;

}

一般不是很喜歡貼代碼,這部分太占地方,我把代碼簡化了,能看個大概的意思吧,具體有需要的朋友,咱們單獨再發(fā)。

有了代碼,后面就可以開始各種測試了

當然,對于學技術(shù)的我們,更要注重diy的作品本身的知識。(溫馨提示:焊接的過程中要注意烙鐵的溫度以及焊接時間,led很容易壞,要不斷的測試,別等全都焊好了卻發(fā)現(xiàn)里面有壞的led,修起來很費事的)

節(jié)選一段高難度的動畫作為收尾

來源:今日頭條

以上是網(wǎng)絡信息轉(zhuǎn)載,信息真實性自行斟酌。

 
本條標題:用簡單的發(fā)光二極管,做不簡單的事,8*8*8光立方詳細制作過程
本條信息網(wǎng)址:
文本助手 資訊搜索 分享好友 打印本文 關(guān)閉窗口
閱讀關(guān)鍵詞
  • 手機瀏覽本文

    手機應用中掃描本文二維碼,即可瀏覽本文或分享到您的社交網(wǎng)絡中。

  • 微信公眾號

    掃描二維碼,關(guān)注中華廚具網(wǎng)微信公眾號,實時了解行業(yè)最新動態(tài)。

版權(quán)/免責聲明:
一、本文圖片及內(nèi)容來自網(wǎng)絡,不代表本站的觀點和立場,如涉及各類版權(quán)問題請聯(lián)系及時刪除。
二、凡注明稿件來源的內(nèi)容均為轉(zhuǎn)載稿或由企業(yè)用戶注冊發(fā)布,本網(wǎng)轉(zhuǎn)載出于傳遞更多信息的目的;如轉(zhuǎn)載稿涉及版權(quán)問題,請作者聯(lián)系我們,同時對于用戶評論等信息,本網(wǎng)并不意味著贊同其觀點或證實其內(nèi)容的真實性。
三、轉(zhuǎn)載本站原創(chuàng)文章請注明來源:中華廚具網(wǎng)

0相關(guān)評論
今日熱點文章更多
品牌聚焦更多
推薦品牌更多
熱門頻道
關(guān)閉廣告
合作伙伴:
中華廚具網(wǎng) 魯ICP備2021046805號         魯公網(wǎng)安備 37162502000363號 (c)2018-2025SYSTEM All Rights Reserved 投資有風險 加盟需謹慎
關(guān)閉廣告
關(guān)閉廣告
久久久无码精品亚洲日韩蜜臀浪潮 | 久久久久亚洲AV片无码下载蜜桃| 久久91精品国产91| 久久丫精品国产亚洲av不卡| 伊人久久综在合线亚洲2019| 久久久精品波多野结衣| 久久亚洲精品成人无码网站| 久久亚洲私人国产精品vA| 精品久久久久久无码国产| 亚洲婷婷国产精品电影人久久| 日韩久久久久久中文人妻| 久久精品国产福利国产琪琪| 亚洲女久久久噜噜噜熟女| 久久久久亚洲AV无码专区桃色| 精品国产乱码久久久久软件| 久久久精品午夜免费不卡| 久久人人爽人人爽人人爽| 一本伊大人香蕉久久网手机| 久久国产色av免费看| 久久中文精品无码中文字幕| 久久久久免费看成人影片| 国产99久久久国产精免费| 亚洲综合日韩久久成人AV| 久久亚洲国产成人影院网站| 国产午夜精品理论片久久影视| 三级三级久久三级久久| 一本久久综合亚洲鲁鲁五月天| 亚洲天堂久久精品| 国内精品久久国产大陆| 久久久亚洲欧洲日产国码二区| 蜜臀久久99精品久久久久久| 国内精品久久久久久久影视麻豆| 色综合久久精品中文字幕首页| 69SEX久久精品国产麻豆| 久久精品国产亚洲AV无码娇色| 亚洲人成网亚洲欧洲无码久久| 无码乱码观看精品久久| 免费一级欧美大片久久网| 久久久久国产精品嫩草影院| segui久久国产精品| 久久精品无码一区二区日韩AV|