看著各位大神鼓搗光立方,閑著沒事也做了一個簡單的4乘4乘4的光立方,直接上圖。制作過程沒有拍照只有成品照片,請各位見諒。
編譯.jpg (120.82 KB, 下載次數: 75)
下載附件
編譯
2019-4-29 14:51 上傳
程序編譯完成,主要有縱向一層一層的掃描,橫向一層一層掃描,線掃描,點掃描,全部閃爍及隨機亮等功能;
原理圖.jpg (156.97 KB, 下載次數: 76)
下載附件
原理圖
2019-4-29 14:52 上傳
原理圖最簡單的就是這樣了
60076261.jpg (98.35 KB, 下載次數: 78)
下載附件
2019-4-29 14:58 上傳
1766985325.jpg (89.35 KB, 下載次數: 79)
下載附件
2019-4-29 14:58 上傳
由于杜邦線用光了,臨時用線和接線端子制作的線連接。
787092789.jpg (84.9 KB, 下載次數: 75)
下載附件
2019-4-29 14:58 上傳
51單片機最小系統
463854291.jpg (67.94 KB, 下載次數: 61)
下載附件
USB轉TTL
2019-4-29 14:58 上傳
USB轉TTL模塊,網上買的用來給單片機刷程序及通訊;
- /****************************************Copyright Mr.Asia************************************/
- /****************************************Date 2019-05-01************************************/
- /*包含頭文件*/
- #include <STC12C5A60S2.h> //STC12C5A60S2頭文件
- #include <intrins.h> //循環左移右移函數頭文件
- //#include <reg52.h> //使用89C51單片機使用該頭文件,注釋掉 STC12C5A60S2頭文件
- /*宏定義*/
- #define uint unsigned int
- #define uchar unsigned char
- /*數組定義*/
- uint code ceng[]={0x00,0x10,0x20,0x40,0x80,0xf0}; //層數數組定義
- uint code num[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED IO口定義
- /*全局變量聲明*/
- uint i = 6000; //延時函數參數
- /*函數聲明*/
- void Delay(uint z); //ms延時函數
- void Init(); //初始化函數
- void All(); //光立方閃爍
- void Heng(); //橫掃描
- void Lie_v(); //V列掃描
- void Lie_h(); //H列掃描
- void Shu(); //豎線掃描
- void Heng_V(); //橫V掃描
- void Heng_H(); //橫H掃描
- void Dian(); //點掃描
- void Suiji(); //隨機豎線掃描
- void DianSuiji(); //隨機點掃描
- /*******************************************************************************
- * 名稱: void main()
- * 功能: 主函數
- * 形參: 無
- * 返回: 無
- * 說明: 主函數
- ******************************************************************************/
- void main()
- {
- while(1)
- {
- Init();
- All();
- Heng(); //橫掃描
- Lie_v(); //V列掃描
- Lie_h(); //H列掃描
- Shu(); //豎線掃描
- Heng_V(); //橫V掃描
- Heng_H(); //橫H掃描
- Dian(); //點掃描
- Suiji(); //隨機豎線掃描
- DianSuiji(); //隨機點掃描
- }
- }
- /*******************************************************************************
- * 名稱: void Delay()
- * 功能: 延時函數
- * 形參: uint x, y, z;
- * 返回: 無
- * 說明: 延時一定時間 單位為ms
- ******************************************************************************/
- void Delay(uint z)
- {
- uint x;
- uint y;
- for(x = z; x > 0; x--)
- for(y = 120; y > 0 ; y--);
- }
- /*******************************************************************************
- * 名稱: void Init()
- * 功能: 初始化光立方
- * 形參: 無
- * 返回: 無
- * 說明: 所有LED燈熄滅
- ******************************************************************************/
- void Init()
- {
- P1 = ceng[0];
- P0 = 0xff;
- P2 = 0xff;
- }
- /*******************************************************************************
- * 名稱: void All()
- * 功能: 光立方
- * 形參: 無
- * 返回: 無
- * 說明: 閃爍
- ******************************************************************************/
- void All()
- {
- uchar k;
-
- P0 = 0x00;
- P2 = 0x00; //IO口置0
- for(k=0;k<3;k++)
- {
- P1 = ceng[5]; //全亮
- Delay(i-2000);
- P1 = ceng[0]; //全滅
- Delay(i-2000);
- }
- }
- /*******************************************************************************
- * 名稱: void Heng()
- * 功能: 層數上下掃描
- * 形參: uchar k
- * 返回: 無
- * 說明: 層數上下滾動掃描
- ******************************************************************************/
- void Heng()
- {
- uchar k;
- /*層自下而上掃描*/
- for(k=1;k<5;k++)
- {
- P1 = ceng[k];
- P0 = 0x00;
- P2 = 0x00;
- Delay(i);
- }
-
- /*層自上而下掃描 */
- for(k=3;k>0;k--)
- {
- P1 = ceng[k];
- P0 = 0x00;
- P2 = 0x00;
- Delay(i);
- }
- Init();
- }
- /*******************************************************************************
- * 名稱: void lie_v()
- * 功能: 豎直v面掃描
- * 形參: 無
- * 返回: 無
- * 說明: 豎直面掃描
- ******************************************************************************/
- void Lie_v()
- {
- uchar k;
-
- P0 = 0xee;
- P2 = 0xee; //P0、P2賦初值0x77,右移后分別是 0x77 --> 0xbb --> 0xdd --> 0xee
- for(k=1;k<5;k++)
- {
- P1 = ceng[5];
- P0 = _cror_(P0,1);
- P2 = _cror_(P2,1); //循環右移函數
- Delay(i);
- }
- // Init();
- }
- /*******************************************************************************
- * 名稱: void lie_h()
- * 功能: 豎直h面掃描
- * 形參: 無
- * 返回: 無
- * 說明: 豎直面掃描
- ******************************************************************************/
- void Lie_h()
- {
- P1 = ceng[5]; //電源全部打開
- P0 = 0xf0;
- Delay(i);
- P0 = 0x0f;
- Delay(i);
- P0 = 0xff; //將P0口置高關閉P0口LED燈
- P2 = 0xf0;
- Delay(i);
- P2 = 0x0f;
- Delay(i);
- Init();
- }
- /*******************************************************************************
- * 名稱: void Shu()
- * 功能: 豎線面掃描
- * 形參: 無
- * 返回: 無
- * 說明: 豎線掃描
- ******************************************************************************/
- void Shu()
- {
- uchar k;
- P1 = ceng[5];
- P0 = 0xfe;
- for(k=0;k<8;k++)
- {
- P0 = _cror_(P0,1); //P0口循環右移1位
- Delay(i-1000);
- }
- P0 = 0xff;
- P2 = 0xfe;
- for(k=0;k<8;k++)
- {
- P2 = _cror_(P2,1); //P2口循環右移1位
- Delay(i-1000);
- }
- Init(); //初始化函數
- }
- /*******************************************************************************
- * 名稱: void Heng_V()
- * 功能: 線V掃描
- * 形參: 無
- * 返回: 無
- * 說明: 線V掃描
- ******************************************************************************/
- void Heng_V()
- {
- uchar k;
- for(k=1;k<5;k++)
- {
- P1 = ceng[k];
- P0 = 0xf0;
- Delay(i);
- P0 = 0x0f;
- Delay(i);
- P0 = 0xff;
- P2 = 0xf0;
- Delay(i);
- P2 = 0x0f;
- Delay(i);
- P2 = 0xff;
- }
- Init();
- }
- /*******************************************************************************
- * 名稱: void Heng_H()
- * 功能: 線H掃描
- * 形參: 無
- * 返回: 無
- * 說明: 線H掃描
- ******************************************************************************/
- void Heng_H()
- {
- uchar k,j;
- for(k=1;k<5;k++)
- {
- P1 = ceng[k];
- P0 = 0x77;
- P2 = 0x77;
- for(j=1;j<5;j++)
- {
- P0 = _cror_(P0,1);
- P2 = _cror_(P2,1);
- Delay(i);
- }
- P0 = 0xff;
- P2 = 0xff;
- }
- }
- /*******************************************************************************
- * 名稱: void Suiji()
- * 功能:隨機掃描
- * 形參: 無
- * 返回: 無
- * 說明: 數組隨機掃描
- ******************************************************************************/
- void Suiji()
- {
- int rand();
- uint k;
- uchar j;
- P1 = ceng[5];
- for(j=0;j<9;j++)
- {
- k = rand();
- P0 = num[k%9];
- Delay(i);
- P0 = 0xff;
- P2 = num[k%9];
- Delay(i);
- P2 = 0xff;
- }
- }
- /*******************************************************************************
- * 名稱: void Dian()
- * 功能:點掃描
- * 形參: 無
- * 返回: 無
- * 說明: 點掃描
- ******************************************************************************/
- void Dian()
- {
- uchar k,j;
- for(k=1;k<5;k++)
- {
- P1 = ceng[k];
- P0 = 0x01;
- for(j=1;j<9;j++)
- {
- P0 = num[j];
- Delay(i);
- }
- P0 = 0xff;
- P2 = 0x01;
- for(j=1;j<9;j++)
- {
- P2 = num[j];
- Delay(i);
- }
- P2 = 0xff;
- }
- }
- /*******************************************************************************
- * 名稱: void DianSuiji()
- * 功能:點隨機掃描
- * 形參: 無
- * 返回: 無
- * 說明: 點隨機掃描
- ******************************************************************************/
- void DianSuiji()
- {
- int rand();
- uint k;
- uchar j;
-
- for(j=1;j<20;j++)
- {
- k = rand();
- P1 = ceng[k%5];
- P0 = num[k%9];
- Delay(i);
- P0 = 0xff;
- P2 = num[k%9];
- Delay(i);
- P2 = 0xff;
- }
- }
復制代碼
現在想做的是使用串口通訊來控制光立方,嘗試了很多次都沒有成功,望大神指點!使用串口調試助手接收數據,然后通過switch來使用不同數據不同狀態!
全部資料51hei下載地址:
444光立方.rar
(627.8 KB, 下載次數: 76)
2019-4-29 15:07 上傳
點擊文件名下載附件
程序和原理圖 下載積分: 黑幣 -5
|