光立方制作+程序讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
光立方教程
今天,给大家带来光立方的制作教程,基于本人制作的经验,给各位想要做的朋友分享制作过程。
对于第一次制作的朋友,我们要先制作好一个日程表,如下图:
我们要弄好一个计划,就好像单片机运行程序一样。
当然,废话少说。接下来,我们需要一份购买材料的清单
如上图所示,我们需要购买的万能板需要购买18*30的规格。这样子才有足够的空间去安装我们的电子元件。
首先,我们需要用万能板作为骨架,每2cm*2cm就要焊接一个排针,上下左右间隔一样。不过对于初学者来说,一次性焊接64颗排针有点困难,所以我们需
要用胶布把每一颗排针固定好,然后上焊,当然这是一个快捷的方法,也适合所有的初学者
当我们把排针固定好后,我们只需要把板子翻过来焊接就可以了。
接下来,我们要把每一颗led灯折弯后侧着放置在排针中。从左到右,从上至下
的安放,安放好后,我们只需要把他们的脚焊接即可。折弯时记住使用镊子折弯。效果图如下图所示
显而易见,这是非常需要考焊功的活,各位制作时候要注意节点与节点之间的间距,并且注意焊点不要点太多的锡,会影响做出来的效果与美观。接下来,我们
把弄好的8排led插在万能板上,注意:我们要注意每排之间的间隔。
下一步,我们需要在把每排led的共阴极连接在一起,一共8层,每层都要连接好,当我们把每层连接好后,我们要在每层的末端或者初始端接一条输出线,作为共阴极连接UNL2803。
当然,我们连接UNL2803的前提是先把芯片接好。小编我直接把芯片焊接在板子上,这种方法对于初学者来说不可取,需要弄芯片底座,不然芯片烧掉了就很
难拆下来了。
接下来我们要按照电路图接线路了(是不是很开心,终于可以接线路了,好戏在后头),下面是74HC573集成电路的接法:
首先我们先分析一下原理图:74HC573的1D~8D都连接在一起,然后再接到单片机的P0.0~P0.7端口;1Q~8Q分别连接每排的共阳里,就是焊接在电路板上的光立方引脚;至于LE要分别接到单片机的P2.0~P2.7。
当然上图是我的接线实物图,是不是很乱 ,当然,只要我们可以把思路可以理
清楚就可以。
接下来,我们来接UNL2803的线与单片机的外设电路,下面是原理图:
UNL2803输入口是OUT1~OUT8,接光立方的共阴极,输入前先加一个220欧的电阻,输出口是IN1~IN8,这8个引脚接到单片机的P1.0~P1.7口。
其次,最重要的就是把单片机的外围电路接好,按照上面的电路图接法,我们可
以直接按照它摆放的位置摆放元件
接下来,我们要为音频功放做电路做准备,下图为原理图:
如图,我们需要以TDA2030为主芯片做一个功放电路,该电路对于新手来说可能有点复杂,所以各位新手可以按照原理图的排版来布置元件(其实我也是这样),如下图,这是我布线的图片。
最后,我们需要制作一个硬件电路
我们要接一个max232来作为电平转换,串口下载线可以自己选择。下面是完成后的焊接图
接下来,就要公布一下程序文件了
#include
#include"STC12C5A60S2.H" //芯片头文件
#include"FFT.H" //FFT(快速傅里叶变换)功能头文件
#include"key.h" //按键扫描头文件
#include"zimo.h" //
#include"hc573.h" //hc573驱动
#include"flash.h" //
//定义ULN2803数据端口
#define anum P3
//指示用LED(未使用)
sbit LED =P1^3;
//变量区分定时器0功能(0:用于音乐频谱,1:用于动画)uchar flag1;
//uchar COUNT=15;
//uchar COUNT1=0;
uchar ADC_Count=0,LINE=15,G=0,T;
//uchar code tablew[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //uchar code tablew[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //uchar code tablew[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
uchar code tablew[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE};
uchar G;
uchar buffer[8];
//功能初始化
void Init()
{
//IO口默认状态
P0 = 0x00; //74HC573数据口
P2 = 0x00; //74HC573位选端
P3 = 0x00; //ULN2803数据口
//IO口模式初始化
P3M0 = 0xff; //ULN2803输出口设置为推挽输出
P3M1 = 0x00;
P0M0 = 0xff; //P0、P2用于控制74HC573,推挽输出P0M1 = 0x00;
P2M0 = 0xff;
P2M1 = 0x00;
P4M0 = 0x00; //P4端口接有按键,设置为输入
P4M1 = 0xff;
//573初始化
initial573();
//----- ADC初始化------------------------------------------------------------------------------
P1ASF = 0x02; //0000,0010, 将P1.1 置成模拟口
AUXR1 &=0xFB; //1111,1011, 令ADRJ=0
EADC =1; //AD中断打开
ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ADC_START | channel; //1110 1001 1打开A/D (ADC_POWER)转换电源;11速度为90周期一次;
//0中断标志清零;1启动adc(ADC_START);001AD通道打开(这里为P1.1);
//----- 定时器初始化------------------------------------------------------------------------------
//TMOD=0X12;
//TH0=0xf0;
//TL0=0xf0;
//TH1=0xfe;
//TL1=0Xd4;
ET0 = 1; //定时器0中断启用
TR0 = 0; //定时器0 关闭
ET1 = 1; //定时器1中断启用
TR1 = 0; //定时器1 关闭