光立方电路原理图设计与解析附光立方程序.docx

上传人:b****5 文档编号:5242743 上传时间:2022-12-14 格式:DOCX 页数:19 大小:118.07KB
下载 相关 举报
光立方电路原理图设计与解析附光立方程序.docx_第1页
第1页 / 共19页
光立方电路原理图设计与解析附光立方程序.docx_第2页
第2页 / 共19页
光立方电路原理图设计与解析附光立方程序.docx_第3页
第3页 / 共19页
光立方电路原理图设计与解析附光立方程序.docx_第4页
第4页 / 共19页
光立方电路原理图设计与解析附光立方程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

光立方电路原理图设计与解析附光立方程序.docx

《光立方电路原理图设计与解析附光立方程序.docx》由会员分享,可在线阅读,更多相关《光立方电路原理图设计与解析附光立方程序.docx(19页珍藏版)》请在冰豆网上搜索。

光立方电路原理图设计与解析附光立方程序.docx

光立方电路原理图设计与解析附光立方程序

这是用595的电路,材料清单如下:

1:

8个74HC595(封装为DIP—16);

2:

2个74HC04(封装为DIP—14);

3:

2个30PF的瓷介电容;一个10UF的电解电容;一个220UF的电解电容;

4:

一块89C516(单片机);

5:

每个芯片配套的座子;

6:

24或者12MHZ的晶振;

7:

1个1K,1个10K(都是碳膜电阻);

8:

一个按键开关,3个按键;

9:

最好买600个灯,因为焊接的时候可能会损坏(颜色随便你自己选择);

10:

你可以考虑买4个铜柱;

备注:

上面的3个按键可以只要1个,另外2个是我设计的外部中断,你可以不用它;同时我自己有开发板,所以我没有设计程序下载电路,全以最节省的方案为前提,你只要把单片机在开发板上下载好程序,再插到光立方上就好了。

同时画电路时每个芯片的电源引脚隐藏了,(单片机是20接负,40接正;595是8接负,16接正;7404是7接负,14接正。

),还有注意电解电容的极性。

关于你接电源的问题是你自己的事,我是在板子上面安装了一个USB的接口供电。

这是用573的电路,材料清单如下:

1:

8个74HC573(封装为DIP—20);

2:

2个74HC04(封装为DIP—14);

3:

2个30PF的瓷介电容;2个10UF的电解电容;一个220UF的电解电容;

4:

一块89C516(单片机);

5:

每个芯片配套的座子;

6:

24或者12MHZ的晶振;

7:

1个1K,2个10K,8个500欧(都是碳膜电阻);

8:

一个按键开关,1个按键;

9:

最好买600个灯,因为焊接的时候可能会损坏(颜色随便你自己选择);

10:

你可以考虑买4个铜柱;

备注:

画电路时每个芯片的电源引脚隐藏了,(单片机是20接负,40接正;573是10接负,20接正;7404是7接负,14接正。

),还有注意电解电容的极性。

关于你接电源的问题是你自己的事,我是在板子上面安装了一个USB的接口供电。

还有就是这个电路我没有画全,因为全部都一样的:

就是:

1:

把8个573的2—9引脚对应接在一起;

2:

把8个573的11脚接在一起;

总结:

上面的2个电路,每个595或者573都有8个引脚没有接,那是用来接灯的负极的,8*8=64;7404的八个引脚是来接灯的正极的,8层就是8个引脚;同时最好把芯片按顺序依次的排列和连接,这样可以大大方便写程序。

下面我会给你一段程序,我的的时间有点忙,没有那么多时间来写花样。

#include

#include//空语句调用头文件

#include"zimo.h"

#defineucharunsignedchar

#defineuintunsignedint

/**********************************************************************/

sbitDS=P1^0;

/**********************************************************************/

/**********************************************************************/

sbitCLK=P1^1;//74HC595的SH-CP(11脚)

sbitSTB=P1^2;//74HC595的时钟和输出锁存(12脚)

/**********************************************************************/

/*坐标数组*/

/**********************************************************************/

ucharcodeshu[8]={0,1,2,3,4,5,6,7};//十进制数选

ucharcodex1[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//595数据

ucharcodey1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//595使能

ucharcodez1[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//层扫描

/************************************************************************/

/*亮度调节延时*/

/************************************************************************/

voiddelay(unsignedinti)

{

unsignedintj;

for(;i>0;i--)

{

for(j=5;j>0;j--);

}

}

/**********************************************************************/

/*ms延时*/

/**********************************************************************/

voiddelayms(ucharxms)

{

uchari,j;

for(i=0;i

{

for(j=0;j<110;j++);

}

}

/************************************************************************/

/*亮度调整*/

/************************************************************************/

/*voidPWM_LIGHT(unsignedcharp)

{

OE=0;

delay(p);

OE=1;

delay(10-p);

}*/

/***********************************************************************/

/*595发送一字节*/

/***********************************************************************/

voidSet595(unsignedcharxie)

{

unsignedchari;

unsignedinttemp;

temp=xie;

for(i=0;i<8;i++)

{

if(temp&0x01)

{

DS=1;

}

elseDS=0;

temp=temp>>1;

CLK=0;

_nop_();

_nop_();

CLK=1;//移位上升沿有效?

}

}

/**********************************************************************/

/**********************************************************************/

voiddis595(void)

{

STB=0;

_nop_();

_nop_();

STB=1;//串行输出上升沿有效

}

/**********************************************************************/

/**********************************************************************/

voidSet595_1(unsignedcharxie,unsignedcharxie1)

{

unsignedchari;

for(i=0;i<8;i++)

{

DS=xie&0x01;

DS=xie1&0x01;

DS=0;

DS=1;

xie>>=1;

xie1>>=1;

//移位上升沿有效?

}

}

/**********************************************************************/

/*倒计时*/

/**********************************************************************/

voiddaojishi(void)

{

uchari,j,k;

for(j=0;j<8;j++)

{

for(k=0;k<60;k++)

for(i=0;i<8;i++)

{

Set595(shuzi[7][i]);

Set595(shuzi[6][i]);

Set595(shuzi[5][i]);

Set595(shuzi[4][i]);

Set595(shuzi[3][i]);

Set595(shuzi[2][i]);

Set595(shuzi[1][i]);

Set595(shuzi[0][i]);

P1=y1[j];

P2=z1[7-i];

dis595();

}

}

}

/**********************************************************************/

/*方框缩放*/

/**********************************************************************/

voidsuofang()

{

ucharx,y,z,w,e,r,a,s;

for(y=0;y<8;y++)

{

for(x=0;x<8;x++)

{

if((z==0)&&(y==0)||(z==0)&&(y==7))

{

P1=y1[y];

P2=z1[0];

Set595(x1[x]);

dis595();

}

}

}

for(e=0;e<8;e++)

{

for(r=0;r<8;r++)

{

if((w==0)&&(e==0)||(w==0)&&(e==7))

{

P1=y1[e];

P2=z1[r];

Set595(x1[0]);

dis595();

}

}

}

for(e=0;e<8;e++)

{

for(r=0;r<8;r++)

{

if((w==0)&&(e==0)||(w==0)&&(e==7))

{

P1=y1[e];

P2=z1[r];

Set595(x1[7]);

dis595();

}

}

}

for(a=0;a<8;a++)

{

P1=y1[a];

P2=z1[7];

Set595(x1[0]);

dis595();

P1=y1[a];

P2=z1[7];

Set595(x1[7]);

dis595();

}

for(s=0;s<8;s++)

{

P1=y1[s];

P2=z1[0];

Set595(x1[0]);

dis595();

P1=y1[s];

P2=z1[0];

Set595(x1[7]);

dis595();

}

for(y=0;y<8;y++)

{

for(x=0;x<8;x++)

{

if((z==0)&&(y==0)||(z==0)&&(y==7))

{

P1=y1[y];

P2=z1[7];

Set595(x1[x]);

dis595();

}

}

}

}

/**********************************************************************/

voidxingdian()

{

ucharx,y,z;

for(z=0;z<8;z++)

for(y=0;y<8;y++)

{

for(x=0;x<8;x++)

{

if((y==0)||(y==2)||(y==4)||(y==6)||(y==1)||(y==3)||(y==5)||(y==7))

{

P1=y1[y];

P2=z1[z];

Set595(x1[x]);

dis595();

}

}

delayms(20000);

}

}

/*主函数*/

/**********************************************************************/

voidmain()

{

ucharj;

while

(1)

{

daojishi();//倒计时7—0

for(j=0;j<50;j++)

{

suofang();//方框缩放

}

//xingdian();//星点

}

}

这是595的程序,实现0—9倒数。

#include

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uintz);

voidmain()

{

while

(1)

{

P3=0x00;

delay(10);

P2=0x00;

delay(5);

P1=0x00;

}

}

voiddelay(uintz)

{

ucharx,y;

for(x=0;x

for(y=0;y<121;y++);

}

这是573的程序简单的点亮512个灯。

所以573写程序方便,595接线方便。

随你怎么选择。

/*-----------------------------------------------

名称:

光立方的控制程序

QQ:

1101956457

编写:

电子协会技术小组

日期:

修改:

第三次

内容:

通过层扫描方式将512个逐层扫描,扫描时间由参数b决定

------------------------------------------------*/

#include//包含头文件,一般情况不需要改动,

//头文件包含特殊功能寄存器的定义

#defineulnP1//uln2803控制端

#definelsP0//ls573输入端

#defineclsP2//ls573控制端

#defineucharunsignedchar

#defineuintunsignedint

ucharcodedisplay0[]={//花样数组

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//screen1

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*****************************************************************************/

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//screen5

0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0xFF,

0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x81,0xFF,

0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x81,0xFF,

0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x81,0xFF,

0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x81,0xFF,

0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0xFF,

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

};

ucharcodedisplay1[]={

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//screen6

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

/*****************************************************************************/

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//screen35

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

uintt=0;//花样数组检测数

ucharz=0;//选择标志位

uintp[]={0x140,0x780};//花样个数

uintb=10;//停留时间常数

uchara=0;

ucharj=0;

uintcounter=0;

voidwdata(){

//花样写入函数

switch(z==0){

case0:

ls=display0[t];break;//写入花样,以参数z为选择标志位

case1:

ls=display1[t];break;

}

}

voidinitial(){//定时器初始化函数

TMOD=0x01;//设定工作方式1

TH0=55536/256;//计算初始值,载入,定时

TL0=55536%256;

EA=1;//开总中断

ET0=1;//开T0中断

TR0=1;//启动定时器

}

voidmain(){

initial();//初始化

while

(1){//显示花样并等待进入中断

uln=0x01;//uln2803初始化

for(a=0;a<8;a++){

cls=0x01;//74ls573C控制端赋值,1输入,0锁存

for(j=0;j<8;j++){

wdata();//调用数据写入函数

cls=cls<<1;//对下一个74ls573写入数据

ls=0x00;

t=t+1;

}

uln=uln<<1;//准备显示下一层花样

}

t=t-64;//循环显示这八层数据,等待中断

}

}

voidT0_int()interrupt1{

TR0=0;//关定时器

ET0=0;//关T0中断

TH0=55536/256;//重装初值

TL0=55536%256;

switch(z){//根据t值不同选择花样停留的时间长度

case0:

b=300;break;

case1:

b=45;break;

}

if(t

counter++;

if(counter==b){//定时时间是否已到

t=t+64;//显示下一个花样

counter=0;//重新计时(对10ms计数)

}

}

elsez=z+1;t=0;//全部显示完毕,从头重新开始

TR0=1;//启动定时器

ET0=1;//开T0中断

}

/*-----------------------------------------------

名称:

光立方的控制程序

QQ:

1101956457

编写:

电子协

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1