久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 24012|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

8*8*8光立方設(shè)計(jì)與制作教程 附單片機(jī)源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424227 發(fā)表于 2018-11-10 20:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
摘要

之前在網(wǎng)上看了一些光立方的演示視頻,被它那些立體感吸引了。想到自己學(xué)單片機(jī)也這么久了,于是乎就想做一個(gè)玩玩,同時(shí)可以復(fù)習(xí)一學(xué)期以來(lái)自己的編程能力和動(dòng)手的能力,一舉兩得是一件很不錯(cuò)的事情。向朋友要了一些資料,就開(kāi)工了。

              光立方顧名思義就是一個(gè)立方體,采用的是8*8*8的模式,整個(gè)立方大概是16cm*16cm*18cm(長(zhǎng).寬.高)的樣子,主要分為三個(gè)模塊:主控模塊、驅(qū)動(dòng)模塊、顯示模塊;我所做的光立方,主控電路采用的主控芯片是STC12C5A60S2芯片,驅(qū)動(dòng)電路是采用我們常用的74HC573數(shù)字芯片,以及ULN2803達(dá)林頓管。



原理圖:
圖1.電路原理圖

元件的選擇

(1)由于光立方的程序量比較大,而且要求相對(duì)比較高,因此經(jīng)過(guò)考慮之后我們決定用51系列的增強(qiáng)型芯片STC12C5A60S2,選擇的理由:

1.無(wú)法解密,采用第六代加密技術(shù);

              2.超強(qiáng)抗干擾;

              3.內(nèi)部集成高可靠復(fù)位電路,外部復(fù)位可用可不用;

              4.速度快,比8051快8-12倍;

(2)由于燈的個(gè)數(shù)比較多,因此所需要的電流相對(duì)也比較大,所以選擇ULN2803,ULN2803是八重達(dá)林頓,1 至 8腳為8路輸入,18 到 11腳為8路輸出。驅(qū)動(dòng)能力 500MA \50V。應(yīng)用時(shí)9腳接地,要是驅(qū)動(dòng)感性負(fù)載,10腳接負(fù)載電源V+。輸入的電平信號(hào)為0,或5V。輸入0是,輸出達(dá)林頓管截止。輸入為5V電平時(shí),輸出達(dá)林頓飽和。輸出負(fù)載加在電源V+和輸出口上,當(dāng)輸入為高電平時(shí),輸出負(fù)載工作;

(3)由于在剛剛接觸鎖存器的時(shí)候,就接觸了74HC573,對(duì)它的使用也比較成熟,因此在驅(qū)動(dòng)部分使用了熟悉的74HC573,其優(yōu)點(diǎn)有:

1.高阻態(tài);就是輸出既不是高電平,也不是低電平,而是高阻抗的狀態(tài);在這種狀態(tài)下,可以多個(gè)芯片并聯(lián)輸出;

2.數(shù)據(jù)鎖存;當(dāng)輸入的數(shù)據(jù)消失時(shí),在芯片的輸出端,數(shù)據(jù)仍然保持;

3.數(shù)據(jù)緩沖; 加強(qiáng)驅(qū)動(dòng)能力;

(4)LED燈的選擇,出于外觀和整體的形狀美觀,個(gè)人推薦霧面藍(lán)光方型LED。但是由于當(dāng)時(shí)去電子市場(chǎng)沒(méi)有找到,最后用了霧面藍(lán)光草帽型的LED燈(結(jié)果問(wèn)題也是出了一大堆)。


電路的組裝與焊接
圖2.電路PCB圖
              這是布線完成的PCB板子,由于之前選錯(cuò)燈的原因,我后面又在每個(gè)573的輸出口加了1N4148二極管。原因是因?yàn)檫@種小燈的反向漏電流比較大,導(dǎo)致整個(gè)立方在不接負(fù)極的時(shí)候也會(huì)發(fā)光。加二極管之后,它們每個(gè)角輸出就都互不影響了。同時(shí),每片573的數(shù)據(jù)口是分別并聯(lián)到P1口的,板子上沒(méi)有布線,在這里我是用單股導(dǎo)線一條一條連上去的。
              下面是板子的制作過(guò)程:
圖3. 腐蝕好的PCB板子
              這塊板子跟上面的PCB圖有點(diǎn)出入,圖2是我調(diào)試完成之后在修改的,而圖3是之前的版本做好的。
              另外,沒(méi)有制作PCB板條件的朋友也可以自己用萬(wàn)能板焊,就是麻煩一點(diǎn)。
圖4.準(zhǔn)備焊接材料
圖5.已焊好的PCB板底層
              接下來(lái)我們要焊燈了。大工程啊!
              首先,我們把燈準(zhǔn)備好,烙鐵熱上
圖6.準(zhǔn)備好的LED燈
圖7.準(zhǔn)備好的LED燈
              在焊接之前,我覺(jué)得最好是檢測(cè)一下每一個(gè)燈是否會(huì)亮,不過(guò)也可以一排一排的測(cè)試,總之,一定要保證每個(gè)燈都會(huì)正常發(fā)光。
              接下來(lái),我們要對(duì)燈做一些工作:
圖8
              我們把所有的LED燈的負(fù)極,也就是短的一角統(tǒng)一朝一個(gè)方向彎曲并與正極垂直如上圖所示。
圖9
              我們可以借助一塊大一點(diǎn)的萬(wàn)能板,用記號(hào)筆在每一個(gè)點(diǎn)做好標(biāo)記,然后把弄好的燈正極朝下穿過(guò)萬(wàn)能板,再把這一排的燈的負(fù)極擺直了點(diǎn)上焊錫。如上圖所示。
圖10.焊接好的一排燈
圖11焊接好的一排燈
              照這種方法把所有的燈焊成一排一排的。
              接下來(lái)要仔細(xì)看了
圖12.焊接每一層
把焊接好的每一排凸出來(lái)的那個(gè)負(fù)極呢又統(tǒng)一朝著一個(gè)方向彎曲至90°,然后把每一排都按上圖的方式擺好,焊接。結(jié)果如下圖:
圖13
              這時(shí)候有朋友會(huì)問(wèn)了,這樣是不是不穩(wěn)啊,那你就把另外一端也用同樣的方法用粗一點(diǎn)的導(dǎo)線或者廢棄的元器件管腳連起來(lái)就好了。如下圖:
圖14
              如此,把每一層都焊好。如下圖:
圖15.焊接好的每一層
              接下來(lái)呢又要對(duì)每一層的正極做一下動(dòng)作了。如下圖:
圖16
              將每一層的正極的末端2mm左右向內(nèi)彎曲45°左右如上圖。留下最后一層不要?jiǎng)樱鳛樽畹讓印H缓笥帽M你所有的招式把每一層對(duì)應(yīng)的正極連起來(lái)。呵呵,也沒(méi)有什么好的方法推薦。下面是焊好的光立方:
圖17.18.焊接好的光立方
              
圖19
圖20


電路的調(diào)試和調(diào)試出現(xiàn)的問(wèn)題:

完工以后抱著很激動(dòng)的心情,編寫(xiě)了調(diào)試的程序,主要是檢查全部的燈是否會(huì)亮,但是單把程序燒寫(xiě)進(jìn)去之后,發(fā)現(xiàn)有兩列沒(méi)有點(diǎn)亮,還好兩列的都在邊上,進(jìn)而如果換燈也相對(duì)容易,我們用排除法來(lái)檢查電路,首先是檢查燈的線路是否虛焊,斷路,果真有一列的是斷路了,把它接上后這一列也亮了,還剩下另外一列,我們用同樣的方法來(lái)做,從驅(qū)動(dòng)電路到顯示的都沒(méi)有問(wèn)題,而且在輸入那一列的電壓也正常,我們就想不通了,是什么原因呢?我們懷疑是不是有燈壞了,我們又一個(gè)一個(gè)的檢查了這一列燈,但是全部都會(huì)亮,經(jīng)過(guò)很細(xì)心的檢查,發(fā)現(xiàn)有一個(gè)燈的亮度和其他的燈亮度完全不同,相對(duì)比較暗,于是我們把它換了下來(lái),接上另外一個(gè),果然是哪個(gè)燈的問(wèn)題,原來(lái)是由于燈的阻抗很大,把那一列的電平都拉低了,使燈無(wú)法亮起來(lái) ,在電路的調(diào)試中就出現(xiàn)了這些的問(wèn)題,相對(duì)來(lái)說(shuō)還是不錯(cuò)的。另外由于之前沒(méi)有選好燈,經(jīng)過(guò)不斷分析問(wèn)題,最后在74HC573的每一個(gè)輸出端都接一個(gè)二極管,問(wèn)題才得以解決。

程序

到這里我們的硬件就已經(jīng)大功告成了,接下來(lái)呢就是軟件了。由于源程序代碼有2000多行,這里我就不將源程序代碼做到文檔里,而是打包在同一文件夾下,大家可以用keil查看整個(gè)工程。本項(xiàng)目完成速度比較快,在整體的電路上可以完成一下基本的演示,由于電路的限制,花樣不是很多,還有待提高。

本文檔足夠讓你獨(dú)立完成一個(gè)光立方的制作,一點(diǎn)也不難,只是需要毅力和耐心而已。

最后你可以發(fā)揮想象,編輯你想要的花樣把程序?qū)戇M(jìn)drive.c,并且在drive.h里面聲明一下,最后就可以直接在主函數(shù)里面調(diào)用了。如果對(duì)C語(yǔ)言不是很了解的朋友可以請(qǐng)教一下別人,不懂就問(wèn),沒(méi)什么不好意思的。這也是我的學(xué)習(xí)風(fēng)格。最后希望我們一起學(xué)習(xí)、一起進(jìn)步。

鄭重聲明:此文檔僅供學(xué)習(xí)參考,如有雷同,純屬巧合。

視頻連接:http://v.youku.com/v_show/id_XNTg2NDcxMTQ0.html



單片機(jī)源程序如下:
  1. #include "STC.h"         //STC12C5A60S2頭文件
  2. #include "MyType.h"      //常用數(shù)據(jù)類(lèi)型定義
  3. #include "Drive.h"         //LED驅(qū)動(dòng)頭文件
  4. #include "Delay.h"       //延時(shí)函數(shù)頭文件
  5. #include "picture.h"     //字模數(shù)據(jù)

  6. //int flag=0,flag1=0,a=0;
  7. void LEDIO_Init();
  8. //void PWM_init ();
  9. //void PWM0_set (uint8 set);
  10. //void Timer_INT();

  11. void main()
  12. {
  13.         uint8 i;
  14.         LEDIO_Init();
  15.         //PWM_init();
  16.         //Timer_INT();
  17.        
  18.                 /*  while(flag == 0)
  19.                         {   
  20.                         WAIT_LOG();
  21.                         }        */
  22.                
  23.         while(1)
  24.         {       
  25.                 for(i=0;i<3;i++)
  26.                 DOT_PWM(0,7,0,120);
  27.                 for(i=0;i<2;i++)
  28.                 {
  29.                         CUBE_LOG1();
  30.                         CUBE_LOG2();
  31.                         CUBE_LOG3();
  32.                        
  33.                         if(i==0)
  34.                         {
  35.                                 LOG11();
  36.                                 LOG5();
  37.                         }
  38.                         if(i==1)//scanf face
  39.                         {                                                                 
  40.                                 LOG6();
  41.                                 LOG7();
  42.                                 CUBE_LOG4();
  43.                                 LOG8();
  44.                                 LOG9();
  45.                                 CUBE_LOG5();
  46.                                 shalou1();
  47.                                 catercorner();//邊角的三角形
  48.                                 LOG5();
  49.                         }

  50.                         LOG1(); //small cube
  51.                        
  52.                        
  53.                         if(i==0)
  54.                         {
  55.                                 CUBE_LOG6(NUM2,3);// 3 2 1
  56.                                 CUBE_LOG13();//一二三四五六九一一
  57.                                 CUBE_LOG7(CHAR_CUBE8,88);//cube8 TeanFoo
  58.                                 CUBE_LOG7(CHAR_GLF,24);//光立方 3x8=24
  59.                         }

  60.                         if(i==1)
  61.                         {
  62.                                 CUBE_LOG6(NUM1,3);//i love u  
  63.                                 CUBE_LOG7(CHAR_DZXH,32);//電子協(xié)會(huì) 4x8=32
  64.                         }
  65.                         if(i==0)
  66.                         shalou();
  67.                         if(i==1)
  68.                         LOG12();
  69.                         LOG10();
  70.                         CUBE_LOG8();//螺旋上升
  71.                         LOG3(); //前后面
  72.                         CUBE_LOG9();//雨過(guò)天晴       
  73.                         CUBE_LOG10();//音樂(lè)律動(dòng)
  74.                         CUBE_LOG11();//豎直表面順時(shí)針環(huán)繞
  75.                         CUBE_LOG12();//橫向表面逆時(shí)針環(huán)繞
  76.                        
  77.                         if(i==0)
  78.                         {
  79.                                 LOG4();
  80.                                 LIST_LOG();                //
  81.                                 LOG13();
  82.                                 lightbug();
  83.                         }
  84.                
  85.                         if(i==1)
  86.                         {
  87.                                 CUBE_LOG7(CHAR_SNTU,136);//通信與電子學(xué)院 電子協(xié)會(huì)20周年 330

  88.                                 LOG2(4,4);
  89.                                 FIRE(1,2);
  90.                                 FIRE(3,3);
  91.                                 LOG2(3,4);
  92.                                 FIRE(6,3);
  93.                                 FIRE(2,5);
  94.                                 LOG2(4,3);
  95.                                 FIRE(3,5);       
  96.                        
  97.                                 CUBE_LOG7(CHAR_OFF,18);//OFF
  98.                                 LAST_LOG();
  99.                         }
  100.                 }       
  101.         }       
  102. }


  103. void LEDIO_Init()
  104. {
  105.         P0M0 = 0xff;
  106.         P0M1 = 0x00;
  107.         P1M0 = 0x00;
  108.         P1M1 = 0x01;
  109.         P2M0 = 0xff;
  110.         P2M1 = 0x00;
  111.         P3M0 = 0xff;
  112.         P3M1 = 0x00;
  113.        
  114.         X = 0xff;//鎖存
  115.         Y = 0x00;//數(shù)據(jù)
  116.         X = 0x00;
  117.         Z = 0x00;//平面  
  118. }

  119. /*
  120. void PWM_init () //PWM初始化函數(shù),PWM模式,接P1.3接口(PWM0),強(qiáng)上拉.
  121. {                  
  122.         CMOD=0x00;       //設(shè)置PCA定時(shí)器0x00~0x03;
  123.         CL=0xef;
  124.         CH=0xef;
  125.         CCAPM0=0x42;     //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
  126.         CCAP0L=0xef;     //設(shè)置PWM0初始值與CCAP0H相同
  127.         CCAP0H=0xff;     // PWM0初始時(shí)為0
  128.        
  129.         CR=1;            //啟動(dòng)PCA定時(shí)器
  130. }

  131. void PWM0_set (uint8 set)           //PWM0占空比設(shè)置函數(shù)        (0x00~0xFF)
  132. {
  133.         CCAP0L= set; //設(shè)置值寫(xiě)入CCAP0L
  134.         CCAP0H= set; //設(shè)置值寫(xiě)入CCAP0H
  135. }  

  136. void Timer_INT()
  137. {
  138.         TMOD = 0x11; //高4位控制T/C1
  139.         EA = 1;             //開(kāi)總中斷
  140.         TH1 = 0x00;  //16位計(jì)數(shù)寄存器T1高8位
  141.         TL1 = 0x00;  //16位計(jì)數(shù)寄存器T1低8位
  142.         ET1 = 1;     //T/C1中斷開(kāi)
  143.         //TR1 = 1;   //T/C1啟動(dòng)
  144.         TR1 = 0;     //T/C1關(guān)閉
  145. }       


  146. void LED_PWM() interrupt 3  
  147. {
  148. //  static uint16 x=0;                  
  149. //  static uint8 flag1=1;

  150.   TL1 = 0x55;  //重裝定時(shí)計(jì)數(shù)器      
  151.   TH1 = 0xe0;            

  152.   if((P1&0x02) == 0)
  153.   {
  154.     Delayms(10);
  155.         if((P1&0x02) == 0)
  156.         {
  157.       flag1 = 1;  //按下標(biāo)志
  158.         }
  159.   }

  160.   if(((P1&0x04) == 0) && flag1)  //觸摸按鍵被觸摸
  161.   {
  162.     a++;       //觸摸按鍵消抖
  163.     if((a==20) && ((P1&0x04) == 0) && flag1)  //觸摸按鍵的確被觸摸
  164.     {
  165.           flag++;  //菜單切換
  166.           if(flag == 4) flag = 0;  
  167.           flag1 = 0;            
  168.           a=0;
  169.     }  
  170.   }
  171.   else if((P1&0x04) !=0)
  172.     a=0;

  173.   if(flag1)
  174.   {
  175.         if(++x==0xff)               
  176.           flag1=0;                               
  177.   }
  178.   else
  179.   {
  180.         if(--x==0x00)               
  181.           flag1=1;                       
  182.   }                
  183.   PWM0_set(x);                
  184. }          
  185. */
復(fù)制代碼

所有資料51hei提供下載:
光立方設(shè)計(jì)與制作.zip (10.07 MB, 下載次數(shù): 319)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:471573 發(fā)表于 2019-1-22 15:18 | 只看該作者
好漂亮!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:617518 發(fā)表于 2019-9-28 11:25 | 只看該作者
支持支持 我也想做一個(gè)
回復(fù)

使用道具 舉報(bào)

地板
ID:620762 發(fā)表于 2019-10-8 21:29 | 只看該作者
獨(dú)特的特點(diǎn)
回復(fù)

使用道具 舉報(bào)

5#
ID:622000 發(fā)表于 2019-10-10 22:30 | 只看該作者
帥到爆炸,感覺(jué)可以加一個(gè)小喇叭來(lái)個(gè)藍(lán)牙模塊放個(gè)音樂(lè)啥的
回復(fù)

使用道具 舉報(bào)

6#
ID:620993 發(fā)表于 2019-10-11 11:09 | 只看該作者
我也想做一個(gè),下來(lái)學(xué),謝謝
回復(fù)

使用道具 舉報(bào)

7#
ID:629801 發(fā)表于 2019-10-25 07:52 | 只看該作者
支持支持!
回復(fù)

使用道具 舉報(bào)

8#
ID:637833 發(fā)表于 2019-11-7 23:36 | 只看該作者
我也想做一個(gè),挺好看的
回復(fù)

使用道具 舉報(bào)

9#
ID:454729 發(fā)表于 2019-12-29 09:54 | 只看該作者
沒(méi)有PCB啊
回復(fù)

使用道具 舉報(bào)

10#
ID:853282 發(fā)表于 2020-12-2 18:03 | 只看該作者
需要幾個(gè)單片機(jī)幾個(gè)鎖存器幾個(gè)達(dá)林頓管啊
還有是買(mǎi)貼片的還是直插的
回復(fù)

使用道具 舉報(bào)

11#
ID:689425 發(fā)表于 2020-12-5 21:24 | 只看該作者
學(xué)習(xí)一下,有空時(shí)做一個(gè)
回復(fù)

使用道具 舉報(bào)

12#
ID:878640 發(fā)表于 2021-1-20 14:55 | 只看該作者
我也想做
回復(fù)

使用道具 舉報(bào)

13#
ID:704585 發(fā)表于 2021-1-24 16:37 | 只看該作者
8*8*8光立方設(shè)計(jì)與制作教程 附單片機(jī)源碼
回復(fù)

使用道具 舉報(bào)

14#
ID:42468 發(fā)表于 2021-2-3 21:49 | 只看該作者
正在尋找光立方資料,謝謝啦
回復(fù)

使用道具 舉報(bào)

15#
ID:691527 發(fā)表于 2021-2-7 23:02 來(lái)自手機(jī) | 只看該作者
剛好符合我的心意   謝謝
回復(fù)

使用道具 舉報(bào)

16#
ID:601243 發(fā)表于 2021-4-18 18:56 | 只看該作者
感謝樓主,不知道現(xiàn)在學(xué)還有沒(méi)有用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清国产一区在线 | 精品免费| 超碰国产在线 | 日韩av一区二区在线观看 | 中文字幕成人在线 | 中文字幕在线视频精品 | 久久精品国产久精国产 | h片在线看 | 毛片.com | 黄频视频 | 欧美一区视频 | 国产精品av久久久久久久久久 | 亚洲日韩第一页 | 国产污视频在线 | 羞羞视频在线观看免费观看 | 超碰免费观看 | 成人黄页在线观看 | 国产精品福利网站 | 国产一级片91 | 久久久激情视频 | 久久99久久99久久 | 一区二区三区亚洲 | 日韩精品久久一区二区三区 | 欧美日韩在线一区二区 | 日韩一级一区 | 全部免费毛片在线播放网站 | 成人性生交大片免费看r链接 | 久久久涩| 精品久久久久久久人人人人传媒 | 亚洲综合大片69999 | 国产精品日韩在线 | 欧美日韩在线综合 | 美女久久 | 亚洲视频免费播放 | 国产91综合一区在线观看 | 99国产欧美| 三区四区在线观看 | 亚洲三区在线观看 | 日韩视频在线观看一区二区 | 欧美精品区 | av网站免费观看 |