最详细的制作8*8*8的光立方

一.什么是光立方?

首先,我以一个转载于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板,自己的话建议还是打个板子使用。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值