光立方电路原理图设计与解析附光立方程序Word文档下载推荐.docx

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

光立方电路原理图设计与解析附光立方程序Word文档下载推荐.docx

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

光立方电路原理图设计与解析附光立方程序Word文档下载推荐.docx

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

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

573是10接负,20接正;

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

就是:

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

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

总结:

上面的2个电路,每个595或者573都有8个引脚没有接,那是用来接灯的负极的,8*8=64;

7404的八个引脚是来接灯的正极的,8层就是8个引脚;

同时最好把芯片按顺序依次的排列和连接,这样可以大大方便写程序。

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

#include<

reg52.h>

#include<

intrins.h>

//空语句调用头文件

#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>

j--);

}

}

/*ms延时*/

voiddelayms(ucharxms)

uchari,j;

for(i=0;

i<

xms;

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;

8;

if(temp&

0x01)

{

DS=1;

}

elseDS=0;

temp=temp>

>

1;

CLK=0;

_nop_();

CLK=1;

//移位上升沿有效?

voiddis595(void)

STB=0;

_nop_();

STB=1;

//串行输出上升沿有效

voidSet595_1(unsignedcharxie,unsignedcharxie1)

DS=xie&

0x01;

DS=xie1&

DS=0;

DS=1;

xie>

=1;

xie1>

//移位上升沿有效?

/*倒计时*/

voiddaojishi(void)

uchari,j,k;

for(j=0;

j++)

for(k=0;

k<

60;

k++)

for(i=0;

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<

y++)

for(x=0;

x<

x++)

if((z==0)&

&

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

(y==7))

{

P1=y1[y];

P2=z1[0];

Set595(x1[x]);

dis595();

}

for(e=0;

e<

e++)

for(r=0;

r<

r++)

if((w==0)&

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

(e==7))

P1=y1[e];

P2=z1[r];

Set595(x1[0]);

Set595(x1[7]);

for(a=0;

a<

a++)

P1=y1[a];

P2=z1[7];

Set595(x1[0]);

dis595();

Set595(x1[7]);

for(s=0;

s<

s++)

P1=y1[s];

P2=z1[0];

P2=z1[7];

voidxingdian()

ucharx,y,z;

for(z=0;

z<

z++)

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

P2=z1[z];

}

}

delayms(20000);

/*主函数*/

voidmain()

ucharj;

while

(1)

daojishi();

//倒计时7—0

50;

suofang();

//方框缩放

//xingdian();

//星点

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

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uintz);

voidmain()

P3=0x00;

delay(10);

P2=0x00;

delay(5);

P1=0x00;

voiddelay(uintz)

ucharx,y;

for(x=0;

z;

for(y=0;

121;

y++);

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

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

随你怎么选择。

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

名称:

光立方的控制程序

QQ:

1101956457

编写:

电子协会技术小组

日期:

修改:

第三次

内容:

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

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

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

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

#defineulnP1//uln2803控制端

#definelsP0//ls573输入端

#defineclsP2//ls573控制端

ucharcodedisplay0[]={//花样数组

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

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,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,

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

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

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];

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++){

cls=0x01;

//74ls573C控制端赋值,1输入,0锁存

for(j=0;

j++){

wdata();

//调用数据写入函数

cls=cls<

<

//对下一个74ls573写入数据

ls=0x00;

t=t+1;

uln=uln<

//准备显示下一层花样

t=t-64;

//循环显示这八层数据,等待中断

voidT0_int()interrupt1{

TR0=0;

//关定时器

ET0=0;

//关T0中断

//重装初值

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

b=300;

b=45;

if(t<

p[z]){//花样Z中总共有p[z]个元素

counter++;

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

t=t+64;

//显示下一个花样

counter=0;

//重新计时(对10ms计数)

}

elsez=z+1;

t=0;

//全部显示完毕,从头重新开始

//启动定时器

//开T0中断

电子协

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

当前位置:首页 > 高等教育 > 艺术

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

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