首页天道酬勤光立方视频,光度立体法三维重建

光立方视频,光度立体法三维重建

张世龙 05-12 22:06 128次浏览

请注明出处。 http://blog.csdn.net/ruoyunliufeng/article/details/37903899

这个4*4*4的三色光立方是我第一次学习单片机时做的小项目。 适用于单片机和开始学c语言的学生练手,效果较好。 今天,看看这个代码,虽然有很多不规范的地方,但是硬件已经给人了,不能继续调试了。 我想让伙伴们告诫我。 这篇文章主要是想让大家知道它的原理,当然知道该怎么做,知道为什么要这么做也很重要。

效果展示: http://v.youku.com/v _ show/id _ xnjaymtkwode2. html

一.综述

光立方是什么? 光立方是指把格子折叠起来再立起来。 单片机完全可以遵循这一思路:点亮小灯-点亮流水灯-点阵显示-点亮光立方。 其中有联系。 谈谈那个原理吧。

点亮小灯:没什么好说的。 将IO控制在高低水平。

点亮流水灯:这也很简单。 是控制几个IO的高低水平。

点阵显示:这看起来很难,但其实并不难。 核心是“扫描”这个字。 首先知道字符图案的数据,然后显示一列,然后在极短的时间内显示下一列,知道整个点阵的显示结束了。 由于人眼的暂时停留效果,看起来是静态的。 其实液晶屏也很像,暂且不谈。

点亮光立方:为什么说光立方是折叠后立起的格子? 这个先卖关子,把硬件说完,你自然会理解的。 其实原理和格子一样。

二.硬件

我先说一下,当时这个电路的设计很简单,没有画原理图,直接上去用开孔的木板焊接。 你可以先画画,但其实不用画画。

1 .单片机

建议选择51系列STC12C5A60S2-35I-PDIP40单片机。 由于89C51输出电流不足,三级管扩充流(用PNP三极管作开关管),我当初这样做,给我带来了很多麻烦,而且不漂亮。 希望伙伴们吸取教训。 虽然不说最小系统怎么构建,但是应该可以全部完成。

2.2双色LED

双色LED是有三根引线。 一个引线剩下的两个是LED的引线。 可以显示三种颜色。 其实,能够完全改变七种颜色的LED指示灯有四条引线,效果更好,单片机引线就足够了。 只是,我现在没有时间玩。 啊,感兴趣的伙伴们可以自己试试。

3 .点阵变身为光的地方

现在,我们来谈谈把点折叠起来再站起来的方法吧。 在这里贴几张照片,看看制作过程吧。 我想大家都能深刻理解。

看看上面的照片,你应该就知道我为什么这么说了。 好了,我来说一下具体该怎么办

这是最基础的元素,需要做16个这个东东。 这个东边阳极相连,阴极引出,和下一个单元相连。

横竖的面条就是这样出来的

四个这方面,按照第一个图连接就可以了。

三.软件

1 .软件框架

老实说,当时在做什么,我只知道每个单片机程序里都有while(1)。 哈哈,我写的这个光立方程序主要是在while(1)中循环各种现实效果。

void main () while ) )1) ) {hongbegin ); //红色从亮到暗都是hongend (; //红由暗道亮P2=0XFF; //关闭P2以不影响底部黄色灯光的效果的黄begin (); //黄呼吸灯黄end (; chengsedeng (; //橙色光huangsebianhongse (); //泛黄的miansheng (; //面上升的面江(; //面下降的mianzuodaoyou (); //从左向右; mianyoudaozuo (; //面从右向左shuidi (; //模仿水滴效果(从嘴里掉下一排)的luoxuansheng ); //螺旋上升罗玄江(; //螺旋下降平恒(; //平衡木英乡上(; //音响效果上下尹相佐(); //音响效果左右sxingsaomian (); //S字型扫除面liti宣庄(; 立体旋转zuoshangliang (); //左上角一时整体明亮的sijiaoneishou (); //四角内收shuidijiandong (; //模仿水滴的水bo (); //模拟水波feiji (; //模仿飞机飞行的chaojimali ();

//超级玛丽 chengsedeng(); //橙色灯 huangbegin(); //黄呼吸灯 huangend(); hongend(); //红由暗道亮 hongbegin(); //红由亮到暗 jiesu(); //结束函数}}

     2.呼吸灯

            说是呼吸灯,渐亮、渐灭的,说的那么高大上,其实就是PWM,再说的土一点就是控制一个周期内的导通时间,周期内的导通时间逐渐增加,自然就越来越亮。逐渐减小,自然就越来越暗,直到完全熄灭。这个东西如果你用STC12来说的话,其实可以非常简单,就是一个D/A转换。将数字信号,转换成模拟信号。当然我那个时候还不太懂这些,直接用的89C52,52是没有D/A转换芯片的,我用的软件模拟PWM,其实就是延时的原理。下面是实现的部分代码。

/*P1为黄色,P2为红色。     P0为阴极*/ uchar code table[]={                                       //呼吸灯专用0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,};void delay(uint z){        uint x,y;        for(x=5;x>0;x--)                            for(y=z;y>0;y--);}void hongbegin()  //全亮 呼吸灭{    int i;    for(i=0;i<140;i++)    {        honglight2(i);    }     P0=0x00;              //保持亮的状态    P2=0xff;     P1=0xff;      }void honglight2(uchar num2)                        //由亮到灭     (可以理解为亮的时间由长到短。灭的时间由短到长){        uchar j;        P0=0xff;                     //首先关闭P0        P2=0x00;                      //打开P2        j = table[num2];        delay(j);                      //延时   (由短到长的)        P0=0x00;                      //打开P0叫它亮        P2=0x00;        delay(150-j);                  //延时由长到短}


      3.代码讲解

            首先我们知道,动画是由图片来快速播放形成的,光立方依靠的也是这个原理。


unsigned char code tabP0[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};  //低电平扫描    ,每次只让亮一排(一个P0口)void mianjiang()  {            unsigned char code tabP2[3][8]={                    //定义数组 。储存数据     {0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF},        {0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF},        {0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF},    };    int j,k,i;                                     //定义三个变量    for(j=0;j<3;j++)                             //j图像个数    {            for(k=0;k<20;k++)                         //k为每个图像存在时间、k越大单个图像存在时间越长        {                for(i=0;i<8;i++)                      //   每个图像由八帧、构成            {    P2=0XFF;                          //  此函数和消除残留的阴影                //P0=1;                P0=tabP0[i];                         //将阴极P0取出                P2=tabP2[j][i];                      //将数组阳极取出                P1=0XFF;                          //将P1关闭以免影响红色效果                ys(2);                               //根据人眼暂留效应。。加大可看见整个亮灯过程、、减小即可显示稳定图像            }        }    }        }

全部代码和取摸软已经打包并且上传。

下载地址: 点击打开链接



参考:取模软件出处:http://user.qzone.qq.com/1323811540/blog/1376456811

光立方有什么用,光立方16 光立方电路分析,汽车搭电宝什么原理