我的账户
中国电子DIY

科技成就未来

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

【光立方】初级教程,含 原理图+源代码+经验

  [复制链接]
爱上科技 发表于 2015-5-2 09:28:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

光立方,我在三年前从一个国外网站上就见到了。那时候刚开始玩电子,就心血一热,开始做光立方。费了一个星期的功夫才把主题的LED显示体搭建完成了,而且当时的焊接功底实在不敢恭维。(后面有图为证)

后来由于毕业的缘故,没有继续做下去,光立方被我当做装饰品放再书桌上。

今年上半年的时候,看到了很多人的作品,想起我那个光立方。回忆起当年的时光,决定将它继续做完。

很顺利,不管是硬件搭建还是软件编程。

我看了很多教程,相比来说,我最开始看的老外的比较好。他们用的元件并不是我们常用的元件,但是上面的理论讲解很重要。

如果真的想做好,必须懂得原理,而不是一味的仿造。不知道有哪些朋友已经做过很好的教程,我把我的想法分享出来,供大家参考借鉴。

概要

首先,我的作品并没有完成多么炫的效果,我只是搭建了一个设计的平台。尤其是比较容易修改的显示程序,要炫的效果,完全可以大家自己设计!!!!

第二,硬件上,可能与平时大家所见的不同(受多个设计方案的影响,没选好一个方案),但我会介绍如何元件替代(包含单片机、行列驱动芯片的替换)。

第三,内容写得比较抽象,希望大家仔细看,并且多看别人作品,多看程序代码,先思考了再问,不是说不想回答,只是不想回答没有思考过的问题。

第四,设计属于睡神耗子自己所想的,所以和你以前见过的光立方可以不一样的架构。一位网友给我看了另一种电路,确实是设计精妙。不过本设计对于设计程序,以及理解是比较容易的。可以作为初级的教程来看。

第五,设计使用了大量网络的上图片资源。由于自己在制作的时候没有留下照片,而且说实话,做得挺难看的!所以不多配自己的图了。

作品展示

111.jpg

设计的挺难看,各位大侠就别计较了,各位菜鸟就知道有这么几个部分组成就可以了。






这是我仿造的杜洋的光立方显示效果(懒,未仿造全部,部分效果也不好)

以上只是说明我能造出来啊!!!

这是源文件(修正电路图的错误):

光立方.rar (275.37 KB, 下载次数: 231)

参与人数 3贡献 +8 刀币 +20 收起 理由
逆天小白兔 + 8 + 5
中心小学 + 5 赞一个!
diyhome + 10 支持DIY精神!

查看全部评分总评分 : 贡献 +8 刀币 +20

精彩评论92

 楼主| 爱上科技 发表于 2015-5-2 09:29:07 | 显示全部楼层
  1. /* Extern Fuction -------------------------------------------------------------*/

  2. extern bool_t Display01(void);

  3. extern bool_t Display02(void);

  4. extern bool_t Display03(void);

  5. extern bool_t Display04(void);

  6. extern bool_t Display05(void);

  7. extern bool_t Display06(void);

  8. extern bool_t Display07(void);

  9. app.c文件中的void CubeBufReload()函数式调用显示函数的地方。

  10. /*Reload graphical or switch grahical*/

  11. switch(cubeGraphical)

  12. {

  13. case GRAPH_01:

  14. if( TRUE == Display01())

  15. {

  16. cubeGraphical = GRAPH_02;

  17. cubeStage = 0xFF;

  18. }

  19. break;

  20. case GRAPH_02:

  21. if( TRUE == Display02())

  22. {

  23. cubeGraphical = GRAPH_03;

  24. cubeStage = 0xFF;

  25. }

  26. break;

  27. case GRAPH_03:

  28. if( TRUE == Display03())

  29. {

  30. cubeGraphical = GRAPH_04;

  31. cubeStage = 0xFF;

  32. }

  33. break;

  34. case GRAPH_04:

  35. if( TRUE == Display04())

  36. {

  37. cubeGraphical = GRAPH_01;

  38. cubeStage = 0xFF;

  39. }

  40. break;

  41. case GRAPH_05:

  42. if( TRUE == Display05())

  43. {

  44. cubeGraphical = GRAPH_06;

  45. cubeStage = 0xFF;

  46. }

  47. break;

  48. case GRAPH_06:

  49. if( TRUE == Display06())

  50. {

  51. cubeGraphical = GRAPH_07;

  52. cubeStage = 0xFF;

  53. }

  54. break;

  55. case GRAPH_07:

  56. if( TRUE == Display07())

  57. {

  58. cubeGraphical = GRAPH_01;

  59. cubeStage = 0xFF;

  60. }

  61. break;

  62. default:

  63. cubeGraphical = GRAPH_01;

  64. cubeStage = 0xFF;

  65. break;

  66. }

  67. 函数很长,不用看这么多,看一个即可。

  68. case GRAPH_07:

  69. if( TRUE == Display07())

  70. {

  71. cubeGraphical = GRAPH_01;

  72. cubeStage = 0xFF;

  73. }

  74. break;

  75. 当前显示效果为DISPLAY07,如果显示完(TRUE==)成立,切换为显示效果GRAPH_01,cubeStage==0XFF指将显示阶段定位到:显示效果的第一个显示(显示效果是一连串的显示组成)。CubeStage==0xFF不懂得童鞋,就照抄就可以了。

  76. 继续,显示效果函数的格式也是好理解的,例如Display01()

  77. bool_t Display01(void)

  78. {

  79. uint8_t i,j;

  80. bool_t endFlag = FALSE;

  81. switch(cubeStage)

  82. {

  83. case 0: //Clear all

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

  85. {

  86. for(j=0;j<8;j++)

  87. {

  88. cubeBuf[i][j] = 0x00;

  89. }

  90. }

  91. break;

  92. case 1:

  93. cubeBuf[0][7] = 0x01;

  94. break;

  95. case 2:

  96. cubeBuf[0][6] = 0x01;

  97. break;

  98. case 3:

  99. cubeBuf[0][5] = 0x01;

  100. break;

  101. case 4:

  102. cubeBuf[0][4] = 0x01;

  103. cubeBuf[0][7] = 0x00;

  104. break;

  105. case 5:

  106. cubeBuf[0][3] = 0x01;

  107. cubeBuf[0][6] = 0x00;

  108. break;

  109. case 6:

  110. cubeBuf[0][2] = 0x01;

  111. cubeBuf[0][5] = 0x00;

  112. break;

  113. case 7:

  114. cubeBuf[0][1] = 0x01;

  115. cubeBuf[0][4] = 0x00;

  116. break;

  117. case 8:

  118. cubeBuf[0][0] = 0x01;

  119. cubeBuf[0][3] = 0x00;

  120. break;

  121. case 9:

  122. cubeBuf[1][0] = 0x01;

  123. cubeBuf[0][2] = 0x00;

  124. break;

  125. case 10:

  126. cubeBuf[2][0] = 0x01;

  127. cubeBuf[0][1] = 0x00;

  128. break;

  129. case 11:

  130. cubeBuf[3][0] = 0x01;

  131. cubeBuf[0][0] = 0x00;

  132. break;
  133. case 12:

  134. cubeBuf[4][0] = 0x01;

  135. cubeBuf[1][0] = 0x00;

  136. break;

  137. case 13:

  138. cubeBuf[5][0] = 0x01;

  139. cubeBuf[2][0] = 0x00;

  140. break;

  141. case 14:

  142. cubeBuf[6][0] = 0x01;

  143. cubeBuf[3][0] = 0x00;

  144. break;

  145. case 15:

  146. cubeBuf[7][0] = 0x01;

  147. cubeBuf[4][0] = 0x00;

  148. break;

  149. case 16:

  150. cubeBuf[7][0] = 0x03;

  151. cubeBuf[4][0] = 0x00;

  152. break;

  153. case 17:

  154. cubeBuf[7][0] = 0x07;

  155. cubeBuf[5][0] = 0x00;

  156. break;

  157. case 18:

  158. cubeBuf[7][0] = 0x0F;

  159. cubeBuf[6][0] = 0x00;

  160. break;

  161. case 19:

  162. cubeBuf[7][0] = 0x1F;

  163. break;

  164. case 20:

  165. cubeBuf[7][0] = 0x3F;

  166. break;

  167. case 21:

  168. cubeBuf[7][0] = 0x7F;

  169. break;

  170. case 22:

  171. cubeBuf[7][0] = 0xFF;

  172. break;

  173. case 25:

  174. endFlag = TRUE;

  175. break;

  176. default:

  177. break;

  178. }

  179. return endFlag;

  180. }

复制代码
至于显示效果的设计,修改displayxx.c文件即可。每一个文件中都只有一个bool_t Display01(void)程序,其中序号01对应displayxx.c文件的序号。该函数名一定要在display.h中声明,这样app.c文件才能调用。

这个有25个显示面组成的。

也就是每一个显示面都停留100ms,当然,你可以让多个显示面显示一个效果。

注意的是最后一个显示面一定要有这句话endFlag = TRUE;,这是说明这个显示效果结束了。

这样,程序我就解释完了,不过很抽象,大家想理解,就多研究程序,不懂就问。

我稍讲一下编译的问题,很多童鞋经常问为什么编译不出来,其实IDE已经告知的很清楚了。不懂就去网上搜搜,再不懂留言,至于像undefined这种编译错误最好不要问了。。。

还有很多人找不到代码的位置——啥,用搜索啊!KEIL工具栏有个望远镜的哪里有个输入框就是,windows下的程序基本上都是ctrl+F键可以直接调用搜索的!还有,跟踪函数,你看到一个函数,不知道函数体在哪里?点击到函数名中,右击选“go to define……”就可以了。睡神耗子先帮你到这了。

还有一个关键的地方,做显示库。也就是如何给cubeBuf[][]赋值。大家自己去研究下,看看显示出来什么样子就可以了。我写的显示函数是对应视频的显示效果。

可以确定的是cubeBuf[][]所有元素赋值为0xFF,就是光立方全亮,都是0x01就只显示一层,最上层或最下层,都是0x00,光立方全熄灭。

附件中有取模软件,兼容我的程序。有点抽象。大家要好好培养自己的立体感。。。
回复

使用道具 举报

安尚科技 发表于 2015-5-2 09:42:26 | 显示全部楼层
楼主帖子含金量高,支持一下
回复

使用道具 举报

zsoop 发表于 2015-5-2 10:46:47 | 显示全部楼层
感觉没什么用啊
只有一点观赏效果
回复

使用道具 举报

1399109998 发表于 2015-5-2 14:21:41 | 显示全部楼层
谢谢楼主分享、、、、、、、、、、、、、、、、、、、
回复

使用道具 举报

sdlcwhg 发表于 2015-5-2 14:29:47 | 显示全部楼层
高手作品,庞大的工程,欣赏。
回复

使用道具 举报

 楼主| 爱上科技 发表于 2015-5-2 14:32:54 | 显示全部楼层
zsoop 发表于 2015-5-2 10:46
感觉没什么用啊
只有一点观赏效果

现在很多东西都是用来欣赏的,
回复

使用道具 举报

a383793621 发表于 2015-5-2 15:29:43 | 显示全部楼层
大赞,高手!感谢分享
回复

使用道具 举报

电子爱好者6 发表于 2015-5-2 21:37:17 | 显示全部楼层
谢谢楼主分享
                 
回复

使用道具 举报

逆天小白兔 发表于 2015-5-2 23:53:05 | 显示全部楼层
赞赞赞脏1234567890每次都要编写字麻烦
回复

使用道具 举报

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

本版积分规则

关注0

粉丝2

帖子7

发布主题
最新发布
推荐阅读
关注我们
中国电子DIY官方微信

客服电话:000-000-0000

客服邮箱:776513803@qq.com

周一至周五 9:00-18:00

公司地址:深圳市南山区美丽湾大厦B座

Powered by Discuz! X3.4@ 2001-2013 Comsenz Inc.