找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22209|回复: 33
收起左侧

4*4*4光立方原理图及参考代码与实物制作

  [复制链接]
ID:230901 发表于 2017-9-7 17:07 | 显示全部楼层 |阅读模式

焊接实物图


3.1
单片机资源分配情况

将4*4*4的LED光立方分层4层,分别由单片机的P2.0,P2.1,P2.2,P2.3,四个口来控制每一层,且给低电平有效,再有P0口和P1的总共16个口来控制16列,给高电平有效,P0和P1口加上位排阻,再给每一列加三极管放大,三极管的基极接单片机的P0和P1口,集电极接5V电源,发射极接每一列。这样就可以通过控制每个口的输出信号来控制每个的亮灭。

  • 2复位电路

     通过某种方式,是单片机内部各类寄存器的值变为出事状态的操作称为复位。单片机的复位是通过外部电路来实现的,复位引脚RET通过一个施密特触发器与复位电路相连接,施密特触发器用作噪声抑制,伟哥机器周期的S5P2时刻,复位电路采样一次施密特输出电平,获得内部复位操作所需要的信号。单片机的时钟电路正常工作后,CPU在RET/VPD引脚上连续采集到两个机器周期的高电平后就可以完成复位操作了,但实际应用时,复位电平的脉冲宽度一般大于1ms。复位电路通常采用上电复位、手动按键复位和看门狗复位三种方式,本次采用的是上电复位方式。



3.3时钟电路

    单片机的各个功能部件的运行都是是时钟控制信号为基准,一拍一拍的工作。因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的可靠性和稳定性。常用的时钟电路设计为内部时钟方式,单片机内部有一个由反向放大器构成的震荡电路,芯片上的XTAL1和XTAL2分别为震荡电路的输入和输出端。只要在这两个引脚上接一个石英晶体振荡器和两个微调电容就构成内部方式的振荡器电路,有振荡器产生自激振荡,便构成一个完整的震荡信号发生器。

一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。本系统的C1、C2的值为33pf。

单片机在工作时,有内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,f表示。图2中的时钟频率为12MHz,即f=12MHz,则时钟周期为1/12us。

附注: 三极管可以不接,只是会影响光源亮度。

3.4系统的工作原理图
  光立方一、二层:

光立方三、四层:



单片机口点连接:

三极管放大电路:




总原理图:
元器件清单:

名称
数量
大LED灯
70个
AT89S52
1片
按键
1
9013
16个
102排阻
2个
1K电阻
16个
20pF瓷片电容
2个
12MHz晶振
1个
10uF电容
1个
330电阻
1个
4.7K电阻
1个


单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char

  3. unsigned char code smg[] = {0x50,0x61};
  4. void delay100ms(uchar data1ms)
  5. {uchar i,j,m;
  6.    for(i=0;i<data1ms;i++)
  7.      for(j=0;j<110;j++)
  8.             for(m=0;m<100;m++);
  9. }
  10. void disp(uchar ceng,uchar lie1,uchar lie2 )
  11. {
  12.   delay100ms(7);
  13. P1=ceng;
  14. P2=lie1;
  15. P0=lie2;


  16. }


  17. void main(void)
  18. {unsigned char hang,shu1;

  19. unsigned char code C1[][16]={
  20. {0x07,0x0B,0x0D,0x0E,0x0E,0x0C,0x08,0x00,0x00,0x08,0x0C,0x0E,0x0C,0x08,0x00,0x00},
  21. {0x08,0x0C,0x0E,0x0C,0x08,0x00,0x00,0x08,0x0C,0x0E,0x0C,0x08,0x00,0x00,0x08,0x0C},
  22. {0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E},
  23. {0x0C,0x08,0x00,0x00,0x08,0x0C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  24. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0C,0x0E,0x0F,0x0E,0x0C,0x08,0x00},
  25. {0x00,0x00,0x00,0x00,0x00,0x0D,0x0D,0x0D,0x05,0x09,0x09,0x09,0x0D,0x0D,0x0D,0x05},
  26. {0x09,0x09,0x09,0x00,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09},
  27. {0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09}
  28. };
  29.   unsigned char code L1[][16]={
  30. {0xFF,0xFF,0xFF,0xFF,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x96,0x96,0x96,0x96,0x96},
  31. {0x96,0x96,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC},
  32. {0x01,0x03,0x07,0x0F,0x8E,0x8C,0x88,0x80,0x00,0x00,0x00,0x10,0x30,0x70,0x70,0x60},
  33. {0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xCC,0x0F,0x33,0x66,0xCC,0xF0,0x33,0x66,0xCC},
  34. {0x66,0x33,0xF0,0xCC,0x66,0x33,0xF0,0xCC,0xCC,0xCC,0xCC,0xCC,0x60,0x60,0x60,0x60},
  35. {0xE8,0x74,0x32,0x11,0x00,0x06,0x66,0x60,0x60,0x60,0x00,0x00,0x06,0x66,0x60,0x60},
  36. {0x60,0x00,0x00,0x00,0x80,0x40,0x20,0x20,0x20,0x60,0x62,0x60,0x30,0x10,0x80,0xC0},
  37. {0x60,0x60,0x60,0x60,0x64,0x60,0x30,0x10}
  38. //  {0x01,0x02,0x04,0x08,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//列扫描
  39.      };
  40.   
  41.   unsigned char code L2[][16]={
  42.   {0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x69,0x69,0x69,0x69,0x69},
  43.   {0x69,0x69,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x33,0x33,0x33,0x33,0x33,0x33,0x33},
  44.   {0x00,0x00,0x00,0x00,0x00,0x08,0x88,0xC8,0xE8,0xF0,0x71,0x31,0x11,0x10,0x04,0x06},
  45.   {0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x33,0xF0,0xCC,0x66,0x33,0x0F,0xCC,0x66,0x33},
  46.   {0x66,0xCC,0x0F,0x33,0x66,0xCC,0x0F,0x33,0x33,0x33,0x33,0x33,0x06,0x06,0x06,0x06},
  47.   {0x8E,0x47,0x23,0x11,0x00,0x00,0x00,0x06,0x06,0x06,0x66,0x60,0x00,0x00,0x06,0x06},
  48.   {0x06,0x66,0x60,0x00,0x08,0x0C,0x06,0x66,0x06,0x06,0x06,0x06,0x03,0x01,0x00,0x08},
  49.   {0x04,0x64,0x06,0x06,0x06,0x06,0x03,0x01}
  50. //  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x80,0x40,0x20,0x10}
  51.   };
  52. while(1)
  53. {
  54. for(hang=0;hang<8;hang++)
  55. {for(shu1=0;shu1<16;shu1++)
  56. disp(C1[hang][shu1],L1[hang][shu1],L2[hang][shu1]);
  57. ……………………

  58. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png

所有资料51hei提供下载:
444光立方.zip (1.08 MB, 下载次数: 348)

评分

参与人数 2黑币 +59 收起 理由
LYS# + 9 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:368302 发表于 2018-8-26 00:37 | 显示全部楼层
Starway 发表于 2018-8-23 12:33
1. 文章中写的是P2控制层 但是代码和图片中是P1控制 是文章错了吗?
2. 另外 为什么只有P0 口有排阻呢?
...

1. 文章错了,以电路图为准

2. 你看过P0口的结构你就知道了,开漏形式输出没有输出高的能力(只能实现灌电流,不能实现拉电流)。简单的说就是没有上拉电阻,没有办法输出“1”,
流水灯的那个排阻是限流!如果只是为了点共阳极连接方式的LED的话,上拉电阻是可以省掉的(个人认为)。

3. 水平方向层叠

4. 电路图抄到ISIS里面可以直接运行

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:337280 发表于 2018-6-3 21:15 来自手机 | 显示全部楼层
如果实物图不接三极管会有什么影响?
回复

使用道具 举报

ID:337280 发表于 2018-6-7 17:18 | 显示全部楼层
admin大佬   这个 4*4*4的光立方  实物接线  如果不接三极管会有什么影响啊 ?
回复

使用道具 举报

ID:333549 发表于 2018-6-8 19:51 | 显示全部楼层
弓长张 发表于 2018-6-7 17:18
admin大佬   这个 4*4*4的光立方  实物接线  如果不接三极管会有什么影响啊 ?

灯的亮度会很底
回复

使用道具 举报

ID:352673 发表于 2018-6-15 20:59 来自手机 | 显示全部楼层
三极管起放大电路的作用
回复

使用道具 举报

ID:365823 发表于 2018-7-13 14:53 | 显示全部楼层
学习了
回复

使用道具 举报

ID:89938 发表于 2018-7-13 16:17 | 显示全部楼层
厉害的小伙子
回复

使用道具 举报

ID:368302 发表于 2018-8-23 12:33 | 显示全部楼层
1. 文章中写的是P2控制层 但是代码和图片中是P1控制 是文章错了吗?
2. 另外 为什么只有P0 口有排阻呢?
3. 楼主在焊接灯的时候是水平方向是层 还是垂直方向是层呢?

最后 问一下 那个设计图加入hex程序之后能直接运行出结果吗?

谢谢楼主分享
回复

使用道具 举报

ID:389243 发表于 2018-8-23 13:47 | 显示全部楼层
Starway 发表于 2018-8-23 12:33
1. 文章中写的是P2控制层 但是代码和图片中是P1控制 是文章错了吗?
2. 另外 为什么只有P0 口有排阻呢?
...

在51芯片的内部是没有加上拉电阻的,所以外部需要接排阻,
回复

使用道具 举报

ID:368302 发表于 2018-8-23 16:15 | 显示全部楼层
小小斑鸠 发表于 2018-8-23 13:47
在51芯片的内部是没有加上拉电阻的,所以外部需要接排阻,

但是为什么只有P0口有排阻呢?P2口没有啊
在需求原件里面是写了两个102排阻的 但是电路图里面没有
回复

使用道具 举报

ID:353988 发表于 2018-8-23 18:27 来自手机 | 显示全部楼层
不错,值得学习
回复

使用道具 举报

ID:373410 发表于 2018-9-11 16:38 | 显示全部楼层
Starway 发表于 2018-8-23 16:15
但是为什么只有P0口有排阻呢?P2口没有啊
在需求原件里面是写了两个102排阻的 但是电路图里面没有
[em ...

P0口作为I/O口输出的时候时,输出低电平为0 输出高电平为高阻态。P0 口不能真正的输出高电平。由于单片机P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。
回复

使用道具 举报

ID:368302 发表于 2018-9-24 22:36 | 显示全部楼层
mayday555 发表于 2018-9-11 16:38
P0口作为I/O口输出的时候时,输出低电平为0 输出高电平为高阻态。P0 口不能真正的输出高电平。由于单片机 ...

谢谢 明白了
回复

使用道具 举报

ID:449653 发表于 2018-12-19 10:41 来自手机 | 显示全部楼层
要怎么才能下载?
回复

使用道具 举报

ID:449653 发表于 2018-12-19 11:16 来自手机 | 显示全部楼层
leleluo123 发表于 2018-7-13 16:17
厉害的小伙子

想知道是怎么下载的,我也想下载,谢谢
回复

使用道具 举报

ID:433348 发表于 2018-12-20 20:48 来自手机 | 显示全部楼层
三极管起放大电路的作用。如果实物图不接三极管会有什么影响?
回复

使用道具 举报

ID:358930 发表于 2019-1-8 19:31 来自手机 | 显示全部楼层
liuyanghe 发表于 2018-12-20 20:48
三极管起放大电路的作用。如果实物图不接三极管会有什么影响?

这里也是放大电流,不接电流太小,轻的说不很亮,重的说就很不亮。
回复

使用道具 举报

ID:465531 发表于 2019-1-10 12:55 | 显示全部楼层
nice啊兄弟
回复

使用道具 举报

ID:446674 发表于 2019-1-11 09:33 | 显示全部楼层
不错学到了
回复

使用道具 举报

ID:472771 发表于 2019-1-25 11:34 | 显示全部楼层
很强!赞赞赞!
回复

使用道具 举报

ID:550434 发表于 2019-5-29 18:24 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:548920 发表于 2019-6-6 12:54 | 显示全部楼层
不错
回复

使用道具 举报

ID:598870 发表于 2019-8-19 15:55 | 显示全部楼层
谢谢分享,学到了。
回复

使用道具 举报

ID:48413 发表于 2019-8-20 19:24 | 显示全部楼层
楼主太牛了学习一下
回复

使用道具 举报

ID:663581 发表于 2019-12-18 10:16 | 显示全部楼层
楼主,一开始没用程序时很亮,用了程序之后就不怎么亮了
回复

使用道具 举报

ID:834810 发表于 2020-10-26 18:34 | 显示全部楼层
怎么没有proteus 工程文件
回复

使用道具 举报

ID:966918 发表于 2021-10-14 17:21 | 显示全部楼层
想问问代码中的数组里面的0xXX代表什么?起什么作用?需要涉及哪些知识?
回复

使用道具 举报

ID:976767 发表于 2021-12-5 19:57 | 显示全部楼层
yufen 发表于 2021-10-14 17:21
想问问代码中的数组里面的0xXX代表什么?起什么作用?需要涉及哪些知识?

是一个16进制数,需要转换成2进制,控制P口输出
回复

使用道具 举报

ID:988330 发表于 2021-12-5 20:04 | 显示全部楼层
强啊 楼主
回复

使用道具 举报

ID:228452 发表于 2022-6-3 03:50 | 显示全部楼层

buzz about P0
Schematic has RP1 as pullup ...
回复

使用道具 举报

ID:1042173 发表于 2022-9-11 22:34 来自手机 | 显示全部楼层
灯光效果怎取模?
回复

使用道具 举报

ID:1050704 发表于 2022-11-6 11:49 | 显示全部楼层
三极管起放大电路的作用
回复

使用道具 举报

ID:1106556 发表于 2023-12-26 21:46 | 显示全部楼层
弓长张 发表于 2018-6-3 21:15
如果实物图不接三极管会有什么影响?

电流过大,可能会烧坏单片机
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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