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

QQ登錄

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

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

444光立方制作 附圖,單片機(jī)程序等資料

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
看著各位大神鼓搗光立方,閑著沒(méi)事也做了一個(gè)簡(jiǎn)單的4乘4乘4的光立方,直接上圖。制作過(guò)程沒(méi)有拍照只有成品照片,請(qǐng)各位見(jiàn)諒。
程序編譯完成,主要有縱向一層一層的掃描,橫向一層一層掃描,線(xiàn)掃描,點(diǎn)掃描,全部閃爍及隨機(jī)亮等功能;

原理圖最簡(jiǎn)單的就是這樣了





由于杜邦線(xiàn)用光了,臨時(shí)用線(xiàn)和接線(xiàn)端子制作的線(xiàn)連接。


51單片機(jī)最小系統(tǒng)


USB轉(zhuǎn)TTL模塊,網(wǎng)上買(mǎi)的用來(lái)給單片機(jī)刷程序及通訊;


  1. /****************************************Copyright Mr.Asia************************************/
  2. /****************************************Date 2019-05-01************************************/

  3. /*包含頭文件*/
  4. #include <STC12C5A60S2.h>                          //STC12C5A60S2頭文件
  5. #include <intrins.h>                                 //循環(huán)左移右移函數(shù)頭文件

  6. //#include <reg52.h>                  //使用89C51單片機(jī)使用該頭文件,注釋掉        STC12C5A60S2頭文件

  7. /*宏定義*/
  8. #define uint unsigned int
  9. #define uchar unsigned char


  10. /*數(shù)組定義*/
  11. uint code ceng[]={0x00,0x10,0x20,0x40,0x80,0xf0};                          //層數(shù)數(shù)組定義
  12. uint code num[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};           //LED IO口定義

  13. /*全局變量聲明*/
  14. uint i = 6000;                                                //延時(shí)函數(shù)參數(shù)

  15. /*函數(shù)聲明*/
  16. void Delay(uint z);                //ms延時(shí)函數(shù)

  17. void Init();                        //初始化函數(shù)
  18. void All();                                //光立方閃爍

  19. void Heng();                         //橫掃描
  20. void Lie_v();                          //V列掃描
  21. void Lie_h();                          //H列掃描

  22. void Shu();                            //豎線(xiàn)掃描
  23. void Heng_V();                        //橫V掃描
  24. void Heng_H();                    //橫H掃描

  25. void Dian();                        //點(diǎn)掃描

  26. void Suiji();                        //隨機(jī)豎線(xiàn)掃描
  27. void DianSuiji();                //隨機(jī)點(diǎn)掃描





  28. /*******************************************************************************
  29. * 名稱(chēng): void main()
  30. * 功能: 主函數(shù)
  31. * 形參: 無(wú)
  32. * 返回: 無(wú)
  33. * 說(shuō)明: 主函數(shù)
  34. ******************************************************************************/
  35. void main()
  36. {
  37.         while(1)
  38.         {
  39.                 Init();
  40.                 All();
  41.                 Heng();                         //橫掃描
  42.                 Lie_v();                  //V列掃描
  43.                 Lie_h();                  //H列掃描

  44.                 Shu();                    //豎線(xiàn)掃描
  45.                 Heng_V();                //橫V掃描
  46.                 Heng_H();            //橫H掃描

  47.                 Dian();                    //點(diǎn)掃描

  48.                 Suiji();                //隨機(jī)豎線(xiàn)掃描
  49.                 DianSuiji();                //隨機(jī)點(diǎn)掃描
  50.         }
  51. }



  52. /*******************************************************************************
  53. * 名稱(chēng): void Delay()
  54. * 功能: 延時(shí)函數(shù)
  55. * 形參: uint x, y, z;
  56. * 返回: 無(wú)
  57. * 說(shuō)明: 延時(shí)一定時(shí)間   單位為ms
  58. ******************************************************************************/
  59. void Delay(uint z)
  60. {
  61.         uint x;
  62.         uint y;
  63.         for(x = z; x > 0; x--)
  64.                 for(y = 120; y > 0 ; y--);
  65. }


  66. /*******************************************************************************
  67. * 名稱(chēng): void Init()
  68. * 功能: 初始化光立方
  69. * 形參: 無(wú)
  70. * 返回: 無(wú)
  71. * 說(shuō)明: 所有LED燈熄滅
  72. ******************************************************************************/
  73. void Init()
  74. {
  75.         P1 = ceng[0];
  76.         P0 = 0xff;
  77.         P2 = 0xff;
  78. }


  79. /*******************************************************************************
  80. * 名稱(chēng): void All()
  81. * 功能: 光立方
  82. * 形參: 無(wú)
  83. * 返回: 無(wú)
  84. * 說(shuō)明: 閃爍
  85. ******************************************************************************/
  86. void All()
  87. {
  88.         uchar k;
  89.         
  90.         P0 = 0x00;
  91.         P2 = 0x00;                                         //IO口置0

  92.         for(k=0;k<3;k++)
  93.         {
  94.         P1 = ceng[5];                                  //全亮
  95.         Delay(i-2000);
  96.         P1 = ceng[0];                                  //全滅
  97.         Delay(i-2000);        
  98.         }
  99. }


  100. /*******************************************************************************
  101. * 名稱(chēng): void Heng()
  102. * 功能: 層數(shù)上下掃描
  103. * 形參: uchar k
  104. * 返回: 無(wú)
  105. * 說(shuō)明: 層數(shù)上下滾動(dòng)掃描
  106. ******************************************************************************/
  107. void Heng()
  108. {
  109.         uchar k;
  110. /*層自下而上掃描*/
  111.         for(k=1;k<5;k++)
  112.         {
  113.                 P1 = ceng[k];
  114.                 P0 = 0x00;
  115.                 P2 = 0x00;
  116.                 Delay(i);
  117.         }
  118.                
  119. /*層自上而下掃描 */
  120.         for(k=3;k>0;k--)
  121.         {
  122.                 P1 = ceng[k];
  123.                 P0 = 0x00;
  124.                 P2 = 0x00;
  125.                 Delay(i);
  126.         }
  127.         Init();
  128. }


  129. /*******************************************************************************
  130. * 名稱(chēng): void lie_v()
  131. * 功能: 豎直v面掃描
  132. * 形參: 無(wú)
  133. * 返回: 無(wú)
  134. * 說(shuō)明: 豎直面掃描
  135. ******************************************************************************/
  136. void Lie_v()
  137. {
  138.         uchar k;
  139.         
  140.         P0 = 0xee;
  141.         P2 = 0xee;                        //P0、P2賦初值0x77,右移后分別是 0x77 --> 0xbb --> 0xdd --> 0xee
  142.         for(k=1;k<5;k++)
  143.         {
  144.         P1 = ceng[5];
  145.         P0 = _cror_(P0,1);
  146.         P2 = _cror_(P2,1);                //循環(huán)右移函數(shù)
  147.         Delay(i);
  148.         }
  149. //        Init();
  150. }


  151. /*******************************************************************************
  152. * 名稱(chēng): void lie_h()
  153. * 功能: 豎直h面掃描
  154. * 形參: 無(wú)
  155. * 返回: 無(wú)
  156. * 說(shuō)明: 豎直面掃描
  157. ******************************************************************************/
  158. void Lie_h()
  159. {
  160.         P1 = ceng[5];   //電源全部打開(kāi)

  161.         P0 = 0xf0;
  162.         Delay(i);
  163.         P0 = 0x0f;
  164.         Delay(i);
  165.         P0 = 0xff;          //將P0口置高關(guān)閉P0口LED燈

  166.         P2 = 0xf0;
  167.         Delay(i);
  168.         P2 = 0x0f;
  169.         Delay(i);

  170.         Init();
  171. }


  172. /*******************************************************************************
  173. * 名稱(chēng): void Shu()
  174. * 功能: 豎線(xiàn)面掃描
  175. * 形參: 無(wú)
  176. * 返回: 無(wú)
  177. * 說(shuō)明: 豎線(xiàn)掃描
  178. ******************************************************************************/
  179. void Shu()
  180. {
  181.         uchar k;
  182.         P1 = ceng[5];
  183.         P0 = 0xfe;
  184.         for(k=0;k<8;k++)
  185.         {
  186.                 P0 = _cror_(P0,1);                   //P0口循環(huán)右移1位
  187.                 Delay(i-1000);
  188.         }
  189.         P0 = 0xff;
  190.         P2 = 0xfe;
  191.         for(k=0;k<8;k++)
  192.         {
  193.                 P2 = _cror_(P2,1);                 //P2口循環(huán)右移1位
  194.                 Delay(i-1000);
  195.         }

  196.         Init();          //初始化函數(shù)
  197. }


  198. /*******************************************************************************
  199. * 名稱(chēng): void Heng_V()
  200. * 功能: 線(xiàn)V掃描
  201. * 形參: 無(wú)
  202. * 返回: 無(wú)
  203. * 說(shuō)明: 線(xiàn)V掃描
  204. ******************************************************************************/
  205. void Heng_V()
  206. {
  207.         uchar k;
  208.         for(k=1;k<5;k++)
  209.         {
  210.                 P1 = ceng[k];

  211.                 P0 = 0xf0;
  212.                 Delay(i);
  213.                 P0 = 0x0f;
  214.                 Delay(i);
  215.                 P0 = 0xff;

  216.                 P2 = 0xf0;
  217.                 Delay(i);
  218.                 P2 = 0x0f;
  219.                 Delay(i);
  220.                 P2 = 0xff;

  221.         }
  222.         Init();        
  223. }


  224. /*******************************************************************************
  225. * 名稱(chēng): void Heng_H()
  226. * 功能: 線(xiàn)H掃描
  227. * 形參: 無(wú)
  228. * 返回: 無(wú)
  229. * 說(shuō)明: 線(xiàn)H掃描
  230. ******************************************************************************/
  231. void Heng_H()
  232. {
  233.         uchar k,j;
  234.         for(k=1;k<5;k++)
  235.         {
  236.                 P1 = ceng[k];
  237.                 P0 = 0x77;
  238.                 P2 = 0x77;
  239.                 for(j=1;j<5;j++)
  240.                 {
  241.                  P0 = _cror_(P0,1);
  242.                  P2 = _cror_(P2,1);
  243.                  Delay(i);
  244.                 }
  245.                 P0 = 0xff;
  246.                 P2 = 0xff;
  247.         }
  248. }


  249. /*******************************************************************************
  250. * 名稱(chēng): void Suiji()
  251. * 功能:隨機(jī)掃描
  252. * 形參: 無(wú)
  253. * 返回: 無(wú)
  254. * 說(shuō)明: 數(shù)組隨機(jī)掃描
  255. ******************************************************************************/
  256. void Suiji()
  257. {
  258.         int rand();
  259.         uint k;
  260.         uchar j;
  261.         P1 = ceng[5];

  262.         for(j=0;j<9;j++)
  263.         {
  264.         k = rand();
  265.         P0 = num[k%9];
  266.         Delay(i);
  267.         P0 = 0xff;
  268.         P2 = num[k%9];
  269.         Delay(i);
  270.         P2 = 0xff;
  271.         }

  272. }


  273. /*******************************************************************************
  274. * 名稱(chēng): void Dian()
  275. * 功能:點(diǎn)掃描
  276. * 形參: 無(wú)
  277. * 返回: 無(wú)
  278. * 說(shuō)明: 點(diǎn)掃描
  279. ******************************************************************************/
  280. void Dian()
  281. {
  282.         uchar k,j;
  283.         for(k=1;k<5;k++)
  284.         {        
  285.                 P1 = ceng[k];

  286.                 P0 = 0x01;        
  287.                 for(j=1;j<9;j++)
  288.                 {        
  289.                         P0 = num[j];
  290.                         Delay(i);
  291.                 }
  292.                 P0 = 0xff;

  293.                 P2 = 0x01;
  294.                 for(j=1;j<9;j++)
  295.                 {
  296.                         P2 = num[j];
  297.                         Delay(i);
  298.                 }
  299.                 P2 = 0xff;
  300.         }
  301. }

  302. /*******************************************************************************
  303. * 名稱(chēng): void DianSuiji()
  304. * 功能:點(diǎn)隨機(jī)掃描
  305. * 形參: 無(wú)
  306. * 返回: 無(wú)
  307. * 說(shuō)明: 點(diǎn)隨機(jī)掃描
  308. ******************************************************************************/
  309. void DianSuiji()
  310. {
  311.         int rand();
  312.         uint k;
  313.         uchar j;        
  314.          
  315.         for(j=1;j<20;j++)
  316.         {        
  317.                 k = rand();
  318.                 P1 = ceng[k%5];
  319.                 P0 = num[k%9];
  320.                 Delay(i);
  321.                 P0 = 0xff;
  322.                 P2 = num[k%9];
  323.                 Delay(i);
  324.                 P2 = 0xff;
  325.         }

  326. }


復(fù)制代碼

現(xiàn)在想做的是使用串口通訊來(lái)控制光立方,嘗試了很多次都沒(méi)有成功,望大神指點(diǎn)!使用串口調(diào)試助手接收數(shù)據(jù),然后通過(guò)switch來(lái)使用不同數(shù)據(jù)不同狀態(tài)!


全部資料51hei下載地址:
444光立方.rar (627.8 KB, 下載次數(shù): 76)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:352406 發(fā)表于 2020-5-28 23:03 | 只看該作者
借用你的原理圖。
回復(fù)

使用道具 舉報(bào)

板凳
ID:774575 發(fā)表于 2020-6-10 01:46 來(lái)自手機(jī) | 只看該作者
樓主,你的單片機(jī)可以換成c51嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:423828 發(fā)表于 2021-11-29 10:07 | 只看該作者
1462180291 發(fā)表于 2020-6-10 01:46
樓主,你的單片機(jī)可以換成c51嗎?

程序中有
//#include <reg52.h>                  //使用89C51單片機(jī)使用該頭文件,注釋掉 STC12C5A60S2頭文件
回復(fù)

使用道具 舉報(bào)

5#
ID:976767 發(fā)表于 2021-12-5 19:56 | 只看該作者
請(qǐng)問(wèn)如果用3v的發(fā)光二極管怎么做?另外我現(xiàn)在有的三極管型號(hào)為s8550,s9015,s9018,有沒(méi)有可以代替的?感謝回答
回復(fù)

使用道具 舉報(bào)

6#
ID:976767 發(fā)表于 2021-12-16 15:37 | 只看該作者
p0口不是低電平驅(qū)動(dòng)嗎為什么上拉電阻不可省?求解
回復(fù)

使用道具 舉報(bào)

7#
ID:1009304 發(fā)表于 2022-3-17 20:00 來(lái)自手機(jī) | 只看該作者
sxy4609 發(fā)表于 2021-12-16 15:37
p0口不是低電平驅(qū)動(dòng)嗎為什么上拉電阻不可省?求解

我有過(guò)類(lèi)似的問(wèn)題我老師給的回復(fù)是,為了確保單片機(jī)輸出為低電平
回復(fù)

使用道具 舉報(bào)

8#
ID:983617 發(fā)表于 2022-5-4 16:16 | 只看該作者
用什么焊接二極管?我在網(wǎng)上買(mǎi)的鐵絲焊不上

回復(fù)

使用道具 舉報(bào)

9#
ID:983617 發(fā)表于 2022-5-4 16:17 | 只看該作者
用什么焊接二極管?我在網(wǎng)上買(mǎi)的鐵絲焊接不上
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表