光立方完全解析

2023-05-16

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

       这个4*4*4的三色光立方是我在初学单片机的时候做的一个小项目。很适合给初学单片机和C语言的同学练手,而且效果很炫。今天再看此代码有很多不规范之处,但由于硬件已经送人,没法继续调试,希望小伙伴们引以为戒。写此文主要是想让大家知道其中的原理,知道怎么做固然重要,更重要的是知道为什么要这样做。

        效果展示:http://v.youku.com/v_show/id_XNjAyMTkwODE2.html

一.总述

        光立方是什么?光立方其实就是将点阵折叠起来然后再立起来。初学单片机完全可以按照这个思路:点亮一个小灯->点亮流水灯->点阵显示->点亮光立方。这其中是存在着联系的,下面我来说说这其中的原理。

         点亮一个小灯:没什么好说的,控制一个IO为高低电平。

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

               点阵显示 :这个看似有难度,其实也不难,核心就是一个字“扫”,首先知道字模的数据,然后先显示一列,再以极短的时间显示下一列,知道整个点阵显示完。由于人眼的暂留效应,会看起来是静态的。其实LCD和它也类似,这个暂且先不说。

             点亮光立方:为什么我说光立方是折叠起来然后再立起来的点阵呢?这个先卖个关子,等讲完硬件之后你自然会明白。其实原理和点阵差不多的。

二.硬件

          说先说下,当时因为这个电路设计实在简单,并没有画原理图,直接上来就拿洞洞板子焊的。你可以先画个图,但其实真不用画图。

    1.单片机

           建议选用51系列的STC12C5A60S2-35I-PDIP40单片机,因为用89C51输出电流不足要加三级管扩流(PNP三极管做开关管),我当初就是这么做的,给我带来很多麻烦,而且也不美观。希望小伙伴们吸取教训。最小系统怎么搭建我就不说了,应该都会把。

     2.双色LED

           双色LED就是有三个引脚。其中一个引脚是地其余两个是LED的引脚。能显示三种颜色。其实完全可以换证七彩的LED就是有四个引脚的那种,那样效果更炫,单片机的引脚是够用的。只是现在没有时间玩了,呵呵,有兴趣的小伙伴们可以自行尝试。

     3.点阵变身光地方

           好了到现在是该说说,怎要把点阵折叠然后再立起来了。这里我贴几张图片,让我们来看看制作过程,我想大家能有深刻的了解。

             看了上面的图片,你应该明白我为什么这么说了。好了,下面我说说怎样具体怎么做

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

一个竖着的面就这样出来了

四个这个面,按照第一个图连,就OK了。

三.软件

    1.软件框架

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

void main()
{
	while(1)
	{

		hongbegin();		 //红由亮到暗
	  	hongend();			 //红由暗道亮
		P2=0XFF;			 //将P2关闭以免影响下面黄色灯效果
		huangbegin();	 //黄呼吸灯
		huangend();
		chengsedeng();	 //橙色灯 
		huangsebianhongse();   //黄色变红色
		 miansheng() ; //面上升
		mianjiang() ; //面下降
		mianzuodaoyou();//面左到右;
		mianyoudaozuo();  //面从右到左
		shuidi()  ;	  //模仿水滴效果(从嘴上一排下落)
		luoxuansheng() ;   //螺旋上升
		luoxuanjiang()  ;	//螺旋下降
		 pingheng() ;	//平衡木
		 yinxiangshang() ;	//音响效果上下
		 yinxiangzuo() ;   //音响效果左右
		 sxingsaomian() ;  //S形扫面
		 litixuanzhuan();	//立体旋转
		 zuoshangliang() ;	//左上角一点到全体亮
		 sijiaoneishou() ;	//四角向内收
		 shuidijiandong() ;	  //仿水滴溅动
		 shuibo() ;			//仿水波浪
		 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

光立方完全解析 的相关文章

随机推荐

  • pytorch中.pth模型中增加、删除、更改名称、更改参数的操作

    pytorch中 pth模型中增加 删除 更改名称 更改参数的操作 pytorch中的pre train模型该类模型的修改参数修改增减卷积层 非官方的pretrain model去除pretrain model 最后一层或某一层 pytor
  • 简单分析@NestedConfigurationProperty的作用

    看源码的时候 xff0c 碰到这个注解 64 NestedConfigurationProperty xff0c 之前知道 64 ConfigurationProperty是设置值的 xff0c 但是nested就不清楚了 分析如下 查看源
  • java开发的正常开发步骤和进度总结

    项目规范 需求排期阶段 1 业务提需求 xff0c 业务与PD和技术初步探讨业务背景和需求 在此阶段 xff0c 开发人员的目标是提前的了解需求 xff0c 想业务之所想 xff0c 丰富和优化需求 所以 xff0c 开发人员 xff0c
  • 降级、熔断和限流———一看就会

    设定 xff1a A上游系统 B本系统 C下游系统 服务降级 服务降级是从整个系统B的负荷情况出发和考虑的 xff0c 对某些负荷会比较高的情况 xff0c 为了预防某些功能 xff08 业务场景 xff09 出现负荷过载或者响应慢的情况
  • 高保链路分析——一看就会

    高保链路分析 本身接口 超时降级 调用本接口耗时超过规定时间立马返回超时报文 限流降级 调用本接口QPS超过规定数值立马返回限流报文 兜底返回 xff08 代码容错 xff09 trycatch未知异常 xff0c 兜底返回报文 业务逻辑
  • android应用层操作底层硬件

    app操作底层硬件没权限的解决办法 xff1a 1 若机器已经root过 xff0c 可直接在应用层中操作 xff1a String apkRoot 61 34 chmod 777 34 43 getPackageCodePath Syst
  • ARM 安装中文输入法

    TX2 为嵌入式开发板 xff0c 系统架构为ARM xff0c 普通的PC上的Linux系统安装中文输入法的方法不适用 xff0c 所以这里提供ARM上的中文输入法的安装方法 步骤1 xff1a 打开终端 xff0c 输入以下命令 sud
  • cordova 打包步骤

    年底了 xff0c 好多资料都在整理 xff0c 为了避免遗忘 xff0c 也为了利益他人吧 直接上步骤吧 xff1a 增加运行环境的模板 cordova platform add android 编译android的程序 cordova
  • BlueROV-7: Keep Learning Dronekit

    The motors can spin now by using the following program from dronekit import connect VehicleMode import sys import time C
  • BlueROV-8: Functions to Drive the Vehicle

    Some functions like goto function or speed setting function are limited because they are GPS dependent GPS is not availa
  • BlueROV-9: Driving Control

    Home location http python dronekit io guide vehicle state and parameters html The Home location isset when a vehicle fir
  • 人工智能发展简史

    人工智能发展简史 第一章 xff1a 起步期 20世纪50年代及以前1 1 计算机象棋博弈 xff08 Programming a computer for playing chess xff09 1 2 图灵测试 xff08 Turing
  • 对角度滤波时0-360度跳变的解决办法

    对角度滤波的过程中会发现 xff0c 视觉direction方向会发生0 360的数值跳变 xff0c 为了解决这个问题 xff0c 需要将0和360度之间的间断点变成连续可导的函数 xff0c 经过摸索 xff0c 想出一个办法 xff0
  • 电机控制 龙伯格观测器 永磁同步电机无传感器控制 全C代码程序

    电机控制 龙伯格观测器 永磁同步电机无传感器控制 全C代码程序 成熟产品方案 DSP28335 xff08 1 xff09 全C程序完成由电机参数 电流微分方程构建dq轴误差模型 控制参数逻辑变换 低通滤波器转速滤波和转子角度积分等控制环节
  • ROS学习笔记-1: 构建工作空间-创建catkin包-编写发布器与订阅器

    1 ROS文件系统介绍 http wiki ros org cn ROS Tutorials NavigatingTheFilesystem 2 Installing catkin http wiki ros org catkin Inst
  • 信息安全重点知识

    一 信息安全概述 网络空间安全的重要性 xff1a 没有网络安全就没有国家安全信息安全 xff1a 防止数据未授权的访问 xff0c 数据有意和物一的威胁 网络安全是信息安全的子集 信息安全的三要素 xff08 CIA xff09 xff1
  • 海天注塑机KEBA系统数据采集

    本文章只针对海天注塑机的KEBA系统 xff0c 因为其他注塑机厂家也用KEBA系统 xff0c 他们的采集方式可能不太一样 xff0c 所以后续有时间我将写其他文章来解释 xff08 默认你已经向海天采购了OPC组件 xff09 一 采集
  • Axure基础:事件和动态面板

    这一篇文章我们主要是将如何做系统左侧的导航 xff0c 并且告诉大家如何动态的切换各个页面 一 事件 1 事件基础 事件的核心就是什么时候做什么事 其中的什么时候可以是如下 xff1a 能做的事情如下 xff1a 2 远程监控云中的事件 监
  • 设备联网调试三板斧

    在实际的工业互联网项目中 xff0c 设备联网所占的比重越来越大 有的一期项目为了简单快速上线 xff0c 让客户直观体会到工业互联网的效果 xff0c 直接会把设备联网放在一期项目的重点 那么在做此类项目时 xff0c 设备联网调试就显得
  • 光立方完全解析

    转载请注明出处 xff1a http blog csdn net ruoyunliufeng article details 37903899 这个4 4 4的三色光立方是我在初学单片机的时候做的一个小项目 很适合给初学单片机和C语言的同学