一.什么是光立方?

首先,我以一个转载于B站的光立方视频开始,让对这个没有了解的小伙伴初步了解什么是光立方。其次,可能有人会问,网上有很多这样的教程,为什么我会说最详细。对于这个疑问,首先我说视频,大部分的视频我们会发现很多细小的原理知识会略过不讲,只告诉你该用什么器件,或者直接开始焊接,看了半天也看不懂,以至于无从下手,最后感觉这东西好难,很容易放弃。然后,我来说文章,很多文章代码方面会提供最简单的代码,主要的代码会不开源,需要你购买。所以,我才准备了一篇比较完整的文章,解决广大喜欢制作的朋友的问题~

Arduino 8*8光立方,你值得拥有

二.我对于光立方原理的见解

1.首先,我们要先实现控制第一层的任意列,任意个灯的控制,这里如果用单片机的两个引脚控制一个LED,我们这个需要控制512个LED灯,我们所需要的IO口的数量可想而知,所以,我们可能会想如何用少的IO口控制多个LED呢?这里,有一点译码器知识的小伙伴可能会说用74hc138译码器不就得了,但是,我们仔细想一想,这个确实可以让某一列对应引脚低电平,但是不能任意控制那一列高电平,那一列低电平,这里又卡住了,难道没其他办法了吗?行了,我不卖关子了,我用的是74hc595锁存器,至于为什么选择它呢?因为它只需要三个IO口就能随意控制8个接线为高电平或低电平。当你输入一位数据到DS引脚,给SH-CP引脚一个高电平,这位数据就被74hc595锁存了,然后不要忘记将该引脚在变成低电平,此时因为还没输入到8位数据,所以此时ST-CP引脚为低电平。这样重复8次就给锁存器锁存了8位数据,此时给ST-CP一个高电平,锁存器就会将这8位数据存到自己的flash中,对后面的8个接线输出放大后的高低电平,用于驱动LED。但是,由于数据你是一位一位移进去的,所以你移进去的第一位对应的是控制的是第8个输入口,而你的第8个数据对应第一个输入口,大家这里如果听不懂,我会加一个我认为讲这个锁存器好的视频给大家,帮助大家理解。

5分钟了解移位寄存器74HC595工作原理及使用(SIPO)

2.然后我就来说我是如何控制第一层任意列和任意灯的亮灭的,我是先将每一横行的阳极用一根铜线连接起来,每一列的阴极用一根铜线连接起来,这样,我们得到了8行接正极的铜线,8列接负极的铜线,这里,我们各将这8个正极和负极分别用一个74hc595控制输出高低电平(本质是放大的高低电平,也可以说是正负极),这样,我们就可以控制哪几行给正极(高电平),然后在控制哪几列接地(低电平),就会像是两个不平行的线会有交点一样,这里交点就是LED灯,我们就可以控制任意行,任意列和任意灯的亮灭。这里为防止大家不理解,我举个例子。

比如,我只点亮第1行,那么我给控制行的74hc595的数据用16进制写出来就是0x01,转为二进制也就是0000 0001,这样意思就是让第一行接上正极了,其他行全接负极(这里默认锁存器第一个输出口对应接到LED第一行的正极上),在将控制列的锁存器输入数据0000 0000,16进制为0X00,相当于全为负极,这样就只有第一行亮起来了。如果点亮第一列,我们就写入二进制数据1111 1111, 16进制为0xFF,在将控制列的锁存器传入数据1111 1110,就可以了。还有就是控制任意LED灯,比如控制第一个灯,就只将第一行给高电平,然后只给第一列低电平,这样就只有第一个灯亮起来。相信到这里,大家已经了解如何控制第一层了。那,我们如何控制每一层的任意列,任意行,任意个灯的亮灭呢?其实这里我们可以进行将第一层叠加上去,但是控制正级的那个锁存器,一个就可以控制整个8层的正极,我们是将每一层的正极都与第一层正极对应相连接然后每一层的负极都需要一个单独的锁存器,这样,你在想一想是不是用很少的IO口控制了512个灯呢!

3.对于如何只点亮立方体的最外层的12条棱,这种点亮方法如果和上面那样显然是不能一次性做到的,所以,我们可以这么想,如果我们一条棱一条棱顺序显示,这样利用我们人眼对于接受光的变化有时间差。这样我们顺序将一个棱一个棱点亮,在我们眼睛看来,其实就是这12条棱一起点亮,这就解决了这类不能依靠我这个电路设计的图案的问题了。

4.相信大家看到这,在大脑里应该已经形成了一个基本框架,所以,我这里先告诉大家我对于我在下面用proteus仿真的电路位置的安排,首先,我们会看到最大的一个8*8的方阵就是我们的第一层,其左边有一个74hc595的8个输出口依次连接这层的8行阳极,这8个输出口不仅是这层的阳极,还是其他7层的阳极控制端。随后我们向上看对应的就是第2层,第三层.....,下面看图吧。

如果有下载proteus的小伙伴,我下面百度云盘里是完整电路图。

百度网盘 请输入提取码

三.代码部分

main函数

#include "stm32f10x.h"                  // Device header
#include "LED.h"
#include "Delay.h"
#include "xianshi.h"int main()
{
/*int a[]={0XFF,0X00,0XFF,0X01,0X80,0XFF,0X7E,0X02,0X40,0X7E,0X3C,0X04,0X20,0X3C,0X18,0X08,0X10,0X18,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X40,0x20,0x10,0x08,0x04,0x02,0x01,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14};//控制给阳极的数据int b[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//控0XE3制第一层哪个灯亮的数据int c[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XFE,0XFE,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XC1制第二层哪个灯亮的数据int d[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XFF,0XFE,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XC9制第三层哪个灯亮的数据int e[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XFF,0XFF,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XEB制第四层哪个灯亮的数据int f[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XFF,0XFF,0XFF,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XFF制第五层哪个灯亮的数据int g[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XFF制第六层哪个灯亮的数据int h[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//控制第七层哪个灯亮的数据int i[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//控制第八层哪个灯亮的数据int  j[]={0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14};int  k[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  l[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  m[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  n[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  o[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  p[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  q[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  r[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  a1[]={0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04};int  b1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB};int  c1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF};int  d1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  e1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  f1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  g1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  h1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  i1[]={0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};*/GPIO1_Init();  //数组第一与第二位控制全亮全灭,第三到第六控制12条最外层棱亮,7~10为下一小层棱亮,11~14控制在里一层的棱,15~18控制最里层的棱亮//第19~24为心性一点一点显示,24~32为心形从前到后闪烁,33~37为最左面心形显示 38~72为从左到右显示心形//第三行从a1开始为心形从上到下显示//第四行从a3开始为瀑布繁星
while(1)
{liangmie();//此处调用显示图像的子函数/*
GPIO_ResetBits(GPIOA,GPIO_Pin_3);//以下注释掉的是传数据的过程,无意义
GPIO_ResetBits(GPIOA,GPIO_Pin_6);GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_2);//第一位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第一位数据传输结束GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_SetBits(GPIOA,GPIO_Pin_2);//第二位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第二位数据传输结束  GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_SetBits(GPIOA,GPIO_Pin_2);//第三位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第三位数据传输结束  GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_SetBits(GPIOA,GPIO_Pin_2);//第四位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第四位数据传输结束  GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_SetBits(GPIOA,GPIO_Pin_2);//第五位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第五位数据传输结束GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_ResetBits(GPIOA,GPIO_Pin_2);//第六位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第六位数据传输结束GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_SetBits(GPIOA,GPIO_Pin_2);//第七位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第七位数据传输结束GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);   GPIO_SetBits(GPIOA,GPIO_Pin_2);//第八位数据
GPIO_ResetBits(GPIOA,GPIO_Pin_5);   GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//第八位数据传输结束GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_SetBits(GPIOA,GPIO_Pin_6); */
}}

按位传输数据的子函数.c

#include "stm32f10x.h" // Device header
#include "Delay.h"int i2;void GPIO1_Init()
{GPIO_InitTypeDef    GPIO_InitStruct;
GPIO_InitTypeDef    GPIO_InitStruct1;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct1.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct1.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStruct1.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct1);}void pose(int date1,int date2,int date3,int date4,int date5,int date6,int date7,int date8,int date9)
{GPIO_ResetBits(GPIOA,GPIO_Pin_3);//以下几个是先将ST-CP电平拉低
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_12);
GPIO_ResetBits(GPIOA,GPIO_Pin_15);GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);for(i2=0;i2<8;i2++){if((date1&0x80)!=0)//date1数据{GPIO_SetBits(GPIOA,GPIO_Pin_2);}else {GPIO_ResetBits(GPIOA,GPIO_Pin_2);}if((date2&0x80)!=0)//date2数据{GPIO_SetBits(GPIOA,GPIO_Pin_5);}else {GPIO_ResetBits(GPIOA,GPIO_Pin_5);}if((date3&0x80)!=0)//date3数据{GPIO_SetBits(GPIOA,GPIO_Pin_8);}else {GPIO_ResetBits(GPIOA,GPIO_Pin_8);}if((date4&0x80)!=0)//date4数据{GPIO_SetBits(GPIOA,GPIO_Pin_11);}else {GPIO_ResetBits(GPIOA,GPIO_Pin_11);}if((date5&0x80)!=0)//date5数据{GPIO_SetBits(GPIOA,GPIO_Pin_14);}else {GPIO_ResetBits(GPIOA,GPIO_Pin_14);}if((date6&0x80)!=0)//date6数据{GPIO_SetBits(GPIOB,GPIO_Pin_2);}else {GPIO_ResetBits(GPIOB,GPIO_Pin_2);}if((date7&0x80)!=0)//date7数据{GPIO_SetBits(GPIOB,GPIO_Pin_5);}else {GPIO_ResetBits(GPIOB,GPIO_Pin_5);}if((date8&0x80)!=0)//date8数据{GPIO_SetBits(GPIOB,GPIO_Pin_8);}else {GPIO_ResetBits(GPIOB,GPIO_Pin_8);}if((date9&0x80)!=0)//date9数据{GPIO_SetBits(GPIOB,GPIO_Pin_11);}else {GPIO_ResetBits(GPIOB,GPIO_Pin_11);}GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_ResetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOA,GPIO_Pin_7);GPIO_ResetBits(GPIOA,GPIO_Pin_10);GPIO_ResetBits(GPIOA,GPIO_Pin_13);GPIO_ResetBits(GPIOB,GPIO_Pin_1);GPIO_ResetBits(GPIOB,GPIO_Pin_4);GPIO_ResetBits(GPIOB,GPIO_Pin_7);GPIO_ResetBits(GPIOB,GPIO_Pin_10);Delay(2);GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_7);GPIO_SetBits(GPIOA,GPIO_Pin_10);GPIO_SetBits(GPIOA,GPIO_Pin_13);GPIO_SetBits(GPIOB,GPIO_Pin_1);GPIO_SetBits(GPIOB,GPIO_Pin_4);GPIO_SetBits(GPIOB,GPIO_Pin_7);GPIO_SetBits(GPIOB,GPIO_Pin_10);date1=date1<<1;date2=date2<<1;date3=date3<<1;date4=date4<<1;date5=date5<<1;date6=date6<<1;date7=date7<<1;date8=date8<<1;date9=date9<<1;}GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_9);
GPIO_SetBits(GPIOA,GPIO_Pin_12);
GPIO_SetBits(GPIOA,GPIO_Pin_15);
GPIO_SetBits(GPIOB,GPIO_Pin_3);
GPIO_SetBits(GPIOB,GPIO_Pin_6);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
GPIO_SetBits(GPIOB,GPIO_Pin_12);}

传数据子函数.h文件

#ifndef  __LED_H__
#define  __LED_H__void GPIO1_Init(void);
void pose(int date1,int date2,int date3,int date4,int date5,int date6,int date7,int date8,int date9);#endif

显示图形的.c文件

#include "stm32f10x.h" // Device header
#include "Led.h"
#include "Delay.h"int counter;
int counter1;
int counter2;
int counter3;int a[]={0XFF,0X00,0XFF,0X01,0X80,0XFF,0X7E,0X02,0X40,0X7E,0X3C,0X04,0X20,0X3C,0X18,0X08,0X10,0X18,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X40,0x20,0x10,0x08,0x04,0x02,0x01,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14};//控制给阳极的数据int b[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//控0XE3制第一层哪个灯亮的数据int c[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XFE,0XFE,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XC1制第二层哪个灯亮的数据int d[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XE3,0XFF,0XFE,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XC9制第三层哪个灯亮的数据int e[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XC1,0XFF,0XFF,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XEB制第四层哪个灯亮的数据int f[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XC9,0XFF,0XFF,0XFF,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XFF制第五层哪个灯亮的数据int g[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XEB,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFB,0XFB,0XFB,0XFB,0XFB};//控0XFF制第六层哪个灯亮的数据int h[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//控制第七层哪个灯亮的数据int i[]={0X00,0X00,0XFE,0X00,0X00,0X7F,0XFD,0X81,0X81,0XBF,0XFB,0XC3,0XC3,0XDF,0XF7,0XE7,0XE7,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//控制第八层哪个灯亮的数据int  j[]={0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14,0X08,0X1C,0X3E,0X3E,0X14};int  k[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  l[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  m[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  n[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  o[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  p[]={0XF7,0XF7,0XF7,0XF7,0XF7,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XEF,0XBF,0XBF,0XBF,0XBF,0X7F,0X7F,0X7F,0X7F,0X7F,0X7F};int  q[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  r[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  a1[]={0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04,0X40,0X20,0X10,0X08,0X04};int  b1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB};int  c1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF};int  d1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  e1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  f1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  g1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  h1[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  i1[]={0XF7,0XE3,0XC1,0XC1,0XEB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};int  j1[]={0x80,0X80,0x40,0X40,0x20,0X20,0x10,0X10,0x08,0X08,0x04,0X04,0x02,0X02,0x01,0X01,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0X42,0X42,0X42,0X42,0X42,0X42,0X42,0X42,0X24,0X24,0X24,0X24,0X24,0X24,0X24,0X24,0X18,0X18,0X18,0X18,0X18,0X18,0X18,0X18};int  k1[]={0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7};int  l1[]={0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF};int  m1[]={0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF};int  n1[]={0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,0XFF};int  o1[]={0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0XFF,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,0XFF,0XFF};int  p1[]={0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0XFF,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,0XFF,0XFF,0XFF};int  q1[]={0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};                                                                               int  r1[]={0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X7E,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};/*    int  a3[]={};int  b3[]={};int  c3[]={};int  d3[]={};int  e3[]={};int  f3[]={};int  g3[]={};int  h3[]={};int  i3[]={};*/ //第四列形成流水瀑布  1~16为雨滴向下并排落下//17~24   每一层的四个角从上到下落下//0X18为结束void  liangmie()
{for(counter=0;counter<=10;counter++)//进行11次亮灭操作,可以自己设计次数{pose(a[0],b[0],c[0],d[0],e[0],f[0],g[0],h[0],i[0]);  Delay(5000);pose(a[1],b[1],c[1],d[1],e[1],f[1],g[1],h[1],i[1]);   Delay(5000);}}void  outtoin(){for(counter2=0;counter2<=20;counter2++)//进行最外层棱的显示{for(counter1=0;counter1<=3;counter1++){pose(a[2+counter1],b[2+counter1],c[2+counter1],d[2+counter1],e[2+counter1],f[2+counter1],g[2+counter1],h[2+counter1],i[2+counter1]);}}for(counter2=0;counter2<=20;counter2++)//向内一层棱的显示{for(counter1=0;counter1<=3;counter1++){pose(a[6+counter1],b[6+counter1],c[6+counter1],d[6+counter1],e[6+counter1],f[6+counter1],g[6+counter1],h[6+counter1],i[6+counter1]);}}for(counter2=0;counter2<=20;counter2++){for(counter1=0;counter1<=3;counter1++){pose(a[10+counter1],b[10+counter1],c[10+counter1],d[10+counter1],e[10+counter1],f[10+counter1],g[10+counter1],h[10+counter1],i[10+counter1]);}}for(counter2=0;counter2<=20;counter2++)//到最里层显示结束{for(counter1=0;counter1<=3;counter1++){pose(a[14+counter1],b[14+counter1],c[14+counter1],d[14+counter1],e[14+counter1],f[14+counter1],g[14+counter1],h[14+counter1],i[14+counter1]);}}}void  intoout()
{for(counter2=0;counter2<=20;counter2++)//到最里层显示开始{for(counter1=0;counter1<=3;counter1++){pose(a[14+counter1],b[14+counter1],c[14+counter1],d[14+counter1],e[14+counter1],f[14+counter1],g[14+counter1],h[14+counter1],i[14+counter1]);}}for(counter2=0;counter2<=20;counter2++){for(counter1=0;counter1<=3;counter1++){pose(a[10+counter1],b[10+counter1],c[10+counter1],d[10+counter1],e[10+counter1],f[10+counter1],g[10+counter1],h[10+counter1],i[10+counter1]);}}for(counter2=0;counter2<=20;counter2++)//向内一层棱的显示{for(counter1=0;counter1<=3;counter1++){pose(a[6+counter1],b[6+counter1],c[6+counter1],d[6+counter1],e[6+counter1],f[6+counter1],g[6+counter1],h[6+counter1],i[6+counter1]);}}for(counter2=0;counter2<=20;counter2++)//进行最外层棱的显示{for(counter1=0;counter1<=3;counter1++){pose(a[2+counter1],b[2+counter1],c[2+counter1],d[2+counter1],e[2+counter1],f[2+counter1],g[2+counter1],h[2+counter1],i[2+counter1]);}}}void  heart(){for(counter=0;counter<=6;counter++){for(counter1=0;counter1<=5;counter1++)//从下到上一点点组成心形{pose(a[18+counter1],b[18+counter1],c[18+counter1],d[18+counter1],e[18+counter1],f[18+counter1],g[18+counter1],h[18+counter1],i[18+counter1]);Delay(3500);}}for(counter=0;counter<=6;counter++)
{for(counter1=5;counter1>=0;counter1--)//从上到下一点点组成心形{pose(a[18+counter1],b[18+counter1],c[18+counter1],d[18+counter1],e[18+counter1],f[18+counter1],g[18+counter1],h[18+counter1],i[18+counter1]);Delay(3500);}}for(counter=0;counter<=6;counter++)//心形由前到后闪烁{for(counter1=0;counter1<=8;counter1++){pose(a[23+counter1],b[23+counter1],c[23+counter1],d[23+counter1],e[23+counter1],f[23+counter1],g[23+counter1],h[23+counter1],i[23+counter1]);Delay(2500);}}for(counter=0;counter<=6;counter++)//最左面灯一点点亮起来{for(counter1=0;counter1<=4;counter1++){pose(a[32+counter1],b[32+counter1],c[32+counter1],d[32+counter1],e[32+counter1],f[32+counter1],g[32+counter1],h[32+counter1],i[32+counter1]);Delay(2500);}}for(counter=0;counter<=5;counter++)//开始从左边一列一列亮起来{for(counter1=0;counter1<=4;counter1++){pose(a[37+counter1],b[37+counter1],c[37+counter1],d[37+counter1],e[37+counter1],f[37+counter1],g[37+counter1],h[37+counter1],i[37+counter1]);}Delay(500);for(counter1=0;counter1<=5;counter1++){pose(a[42+counter1],b[42+counter1],c[42+counter1],d[42+counter1],e[42+counter1],f[42+counter1],g[42+counter1],h[42+counter1],i[42+counter1]);}Delay(500);for(counter1=0;counter1<=5;counter1++){pose(a[48+counter1],b[48+counter1],c[48+counter1],d[48+counter1],e[48+counter1],f[48+counter1],g[48+counter1],h[48+counter1],i[48+counter1]);}Delay(500);for(counter1=0;counter1<=5;counter1++){pose(a[54+counter1],b[54+counter1],c[54+counter1],d[54+counter1],e[54+counter1],f[54+counter1],g[54+counter1],h[54+counter1],i[54+counter1]);}Delay(500);for(counter1=0;counter1<=5;counter1++){pose(a[60+counter1],b[60+counter1],c[60+counter1],d[60+counter1],e[60+counter1],f[60+counter1],g[60+counter1],h[60+counter1],i[60+counter1]);}Delay(500);for(counter1=0;counter1<=5;counter1++){pose(a[66+counter1],b[66+counter1],c[66+counter1],d[66+counter1],e[66+counter1],f[66+counter1],g[66+counter1],h[66+counter1],i[66+counter1]);}Delay(500);}}

显示图形的.h文件

#ifndef    __xianshi_H__
#define    __xianshi_H__void  liangmie(void);
void  outtoin(void);
void  intoout(void);
void  heart(void);#endif

到此我的分享就结束了,这几天在实验室在焊接这个光立方,挤了很多时间才写完这个,希望大家能批评指正!

发一个我在实验室的飞线照片吧,挺好玩的~

这个由于后面飞线有点多,使用时间长了信号不稳定,后面我是自己画了个pcb板,自己的话建议还是打个板子使用。

最详细的制作8*8*8的光立方相关推荐

  1. 爱剪辑怎么制作淘宝视频?详细的制作技巧,教你快速搞定淘宝主图视频

    众所周知,现在打开淘宝购买某种产品时,在主界面上方展示产品的部分已经出现了视频.这也是顺应潮流的做法,通过制作短视频的方式来展示产品,能引起买家更多的兴趣和购买欲.所以很多卖家现在都会制作一个精美的淘 ...

  2. 为Mac制作WTG的详细流程+制作工具

    为Mac制作WTG详细流程 准备 下载驱动 解压WTG制作工具,拷入基本驱动 制作WTG 重启系统 总结 准备 Windows专业版/企业版上可以用官方工具制作WTG,但是限制很多,这里以第三方工具制 ...

  3. 最详细的制作正式版10 11 OS X El Capitan 安装U盘的方法

    原帖地址: http://bbs.feng.com/read-htm-tid-10036487.html 一.准备工作: 1.准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过 ...

  4. Allegro PCB封装表贴器件-0805电阻-实战-详细封装制作过程(一)

    1.Allegro封装元素 使用Allegro制作PCB封装,首先我们需要了解Allegro封装组成的元素,由焊盘.外形.字符三要素组成,如图 1所示. 图 1 Allegro封装元素 2.表贴元器件 ...

  5. 三分钟学会画中画的制作,分享详细的制作步骤

    很多人会自己剪辑视频,那么剪辑视频的时候有很多技巧,制作画中画该怎么操作呢?不会操作的朋友可以接着往下看,小编分享一个方法制作视频画中画,一起来看看吧. 第一步,运行媒体梦工厂,选择[画中画]页面,点 ...

  6. 详细教程!手把手教你制作个人微信红包封面

    最近很多朋友都看到别人有发比较特殊的微信红包,一些小伙伴还不清楚这个微信红包封面怎么弄,下面就来为大家分享一下微信红包封面制作详细教程. 重要的事情说3遍:这是微信官方最近推出的活动,这是微信官方最近 ...

  7. 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

    关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  8. springboot超详细教程_超详细便当袋教程 || 特殊时期,自己带饭最安心!

    持续受疫情影响,闷在家里的广大网友们早就坐不住了.尤其是最近各地复工陆续开始,小心心是不是开始躁动了?终于可以出门放飞自我,放肆吃吃喝喝了嘛? 再忍一忍呀同志们!疫情还没结束,病毒还没被消灭,为了你和 ...

  9. 超详细前端开发案例:品优购商场项目(四)

    目录 续前一篇内容 12. 详情页制作 12.1 详情页 detail.html 常用单词 12.2 面包屑导航 12.3 产品介绍 模块 12.4 预览区域制作 12.5 preview_list ...

最新文章

  1. Spark Streaming学习笔记
  2. Redis 的各项功能解决了哪些问题?
  3. 使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图
  4. I/O流(三)—对象的序列化和反序列化
  5. TCP/IP协议族之应用层协议(FTP、TFTP)
  6. 一个小技巧 禁止浏览器弹出Alert
  7. java中有scoreframe类型嘛_java构造函数的三种类型总结
  8. linux内核兼容性,各种glibc和Linux内核版本的兼容性
  9. scatterpie | ggplot2的几何图形拓展包(1):如何在地图中添加饼图
  10. linux命令 screen的简单使用
  11. 矩阵连乘备忘录算法java_矩阵连乘(备忘录方法:自顶向下递归)
  12. char*,const char*和string 三者转换
  13. 设置word默认字体
  14. Html 页面底部添加版权信息11
  15. MOSS系列一 MOSS的安装
  16. 张云茹计算机,张云茹 - 重庆理工大学 - 药学与生物工程学院
  17. 中兴zxr10路由器重启命令_ZXR10路由器基本操作和配置.doc
  18. [国家集训队]阿狸和桃子的游戏(贪心)
  19. html+js 调用摄像头识别二维码
  20. C语言基础--决策与判断

热门文章

  1. reflow (回流)和 repaint(重绘)理解
  2. 笔记:软件工程常用开源文档模板 + 软件著作权
  3. Java IO流 - 打印流详细使用介绍
  4. Win10安卓子系统安装教程
  5. OpenPCDet 训练KITTI
  6. java操作Excel,mdb,dbf
  7. 目标检测常用评价指标笔记
  8. swf to html5 movie maker,SWF to Video Converter Pro(Flash转换视频格式)
  9. 离散数学_十章-图 ( 5 ):连通性 - 下
  10. Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结