找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6824|回复: 8
收起左侧

444光立方制作 附图,单片机程序等资料

  [复制链接]
ID:423828 发表于 2019-4-29 15:07 | 显示全部楼层 |阅读模式
看着各位大神鼓捣光立方,闲着没事也做了一个简单的4乘4乘4的光立方,直接上图。制作过程没有拍照只有成品照片,请各位见谅。

编译

编译

程序编译完成,主要有纵向一层一层的扫描,横向一层一层扫描,线扫描,点扫描,全部闪烁及随机亮等功能;

原理图

原理图

原理图最简单的就是这样了
60076261.jpg

1766985325.jpg


由于杜邦线用光了,临时用线和接线端子制作的线连接。
787092789.jpg

51单片机最小系统

USB转TTL

USB转TTL


USB转TTL模块,网上买的用来给单片机刷程序及通讯;


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

  3. /*包含头文件*/
  4. #include <STC12C5A60S2.h>                          //STC12C5A60S2头文件
  5. #include <intrins.h>                                 //循环左移右移函数头文件

  6. //#include <reg52.h>                  //使用89C51单片机使用该头文件,注释掉        STC12C5A60S2头文件

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


  10. /*数组定义*/
  11. uint code ceng[]={0x00,0x10,0x20,0x40,0x80,0xf0};                          //层数数组定义
  12. uint code num[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};           //LED IO口定义

  13. /*全局变量声明*/
  14. uint i = 6000;                                                //延时函数参数

  15. /*函数声明*/
  16. void Delay(uint z);                //ms延时函数

  17. void Init();                        //初始化函数
  18. void All();                                //光立方闪烁

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

  22. void Shu();                            //竖线扫描
  23. void Heng_V();                        //横V扫描
  24. void Heng_H();                    //横H扫描

  25. void Dian();                        //点扫描

  26. void Suiji();                        //随机竖线扫描
  27. void DianSuiji();                //随机点扫描





  28. /*******************************************************************************
  29. * 名称: void main()
  30. * 功能: 主函数
  31. * 形参: 无
  32. * 返回: 无
  33. * 说明: 主函数
  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();                    //竖线扫描
  45.                 Heng_V();                //横V扫描
  46.                 Heng_H();            //横H扫描

  47.                 Dian();                    //点扫描

  48.                 Suiji();                //随机竖线扫描
  49.                 DianSuiji();                //随机点扫描
  50.         }
  51. }



  52. /*******************************************************************************
  53. * 名称: void Delay()
  54. * 功能: 延时函数
  55. * 形参: uint x, y, z;
  56. * 返回: 无
  57. * 说明: 延时一定时间   单位为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. * 名称: void Init()
  68. * 功能: 初始化光立方
  69. * 形参: 无
  70. * 返回: 无
  71. * 说明: 所有LED灯熄灭
  72. ******************************************************************************/
  73. void Init()
  74. {
  75.         P1 = ceng[0];
  76.         P0 = 0xff;
  77.         P2 = 0xff;
  78. }


  79. /*******************************************************************************
  80. * 名称: void All()
  81. * 功能: 光立方
  82. * 形参: 无
  83. * 返回: 无
  84. * 说明: 闪烁
  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. * 名称: void Heng()
  102. * 功能: 层数上下扫描
  103. * 形参: uchar k
  104. * 返回: 无
  105. * 说明: 层数上下滚动扫描
  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. * 名称: void lie_v()
  131. * 功能: 竖直v面扫描
  132. * 形参: 无
  133. * 返回: 无
  134. * 说明: 竖直面扫描
  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);                //循环右移函数
  147.         Delay(i);
  148.         }
  149. //        Init();
  150. }


  151. /*******************************************************************************
  152. * 名称: void lie_h()
  153. * 功能: 竖直h面扫描
  154. * 形参: 无
  155. * 返回: 无
  156. * 说明: 竖直面扫描
  157. ******************************************************************************/
  158. void Lie_h()
  159. {
  160.         P1 = ceng[5];   //电源全部打开

  161.         P0 = 0xf0;
  162.         Delay(i);
  163.         P0 = 0x0f;
  164.         Delay(i);
  165.         P0 = 0xff;          //将P0口置高关闭P0口LED灯

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

  170.         Init();
  171. }


  172. /*******************************************************************************
  173. * 名称: void Shu()
  174. * 功能: 竖线面扫描
  175. * 形参: 无
  176. * 返回: 无
  177. * 说明: 竖线扫描
  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口循环右移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口循环右移1位
  194.                 Delay(i-1000);
  195.         }

  196.         Init();          //初始化函数
  197. }


  198. /*******************************************************************************
  199. * 名称: void Heng_V()
  200. * 功能: 线V扫描
  201. * 形参: 无
  202. * 返回: 无
  203. * 说明: 线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. * 名称: void Heng_H()
  226. * 功能: 线H扫描
  227. * 形参: 无
  228. * 返回: 无
  229. * 说明: 线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. * 名称: void Suiji()
  251. * 功能:随机扫描
  252. * 形参: 无
  253. * 返回: 无
  254. * 说明: 数组随机扫描
  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. * 名称: void Dian()
  275. * 功能:点扫描
  276. * 形参: 无
  277. * 返回: 无
  278. * 说明: 点扫描
  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. * 名称: void DianSuiji()
  304. * 功能:点随机扫描
  305. * 形参: 无
  306. * 返回: 无
  307. * 说明: 点随机扫描
  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. }


复制代码

现在想做的是使用串口通讯来控制光立方,尝试了很多次都没有成功,望大神指点!使用串口调试助手接收数据,然后通过switch来使用不同数据不同状态!


全部资料51hei下载地址:
444光立方.rar (627.8 KB, 下载次数: 74)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:352406 发表于 2020-5-28 23:03 | 显示全部楼层
借用你的原理图。
回复

使用道具 举报

ID:774575 发表于 2020-6-10 01:46 来自手机 | 显示全部楼层
楼主,你的单片机可以换成c51吗?
回复

使用道具 举报

ID:423828 发表于 2021-11-29 10:07 | 显示全部楼层
1462180291 发表于 2020-6-10 01:46
楼主,你的单片机可以换成c51吗?

程序中有
//#include <reg52.h>                  //使用89C51单片机使用该头文件,注释掉 STC12C5A60S2头文件
回复

使用道具 举报

ID:976767 发表于 2021-12-5 19:56 | 显示全部楼层
请问如果用3v的发光二极管怎么做?另外我现在有的三极管型号为s8550,s9015,s9018,有没有可以代替的?感谢回答
回复

使用道具 举报

ID:976767 发表于 2021-12-16 15:37 | 显示全部楼层
p0口不是低电平驱动吗为什么上拉电阻不可省?求解
回复

使用道具 举报

ID:1009304 发表于 2022-3-17 20:00 来自手机 | 显示全部楼层
sxy4609 发表于 2021-12-16 15:37
p0口不是低电平驱动吗为什么上拉电阻不可省?求解

我有过类似的问题我老师给的回复是,为了确保单片机输出为低电平
回复

使用道具 举报

ID:983617 发表于 2022-5-4 16:16 | 显示全部楼层
用什么焊接二极管?我在网上买的铁丝焊不上

回复

使用道具 举报

ID:983617 发表于 2022-5-4 16:17 | 显示全部楼层
用什么焊接二极管?我在网上买的铁丝焊接不上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表