8*8*8光立方,写入全亮程序,有个别的灯珠不亮,单独点亮灯珠没有损坏,

8*8*8光立方,写入全亮程序,有个别的灯珠不亮,单独点亮灯珠没有损坏,,第1张

全亮

#include <stc12c5a.h>

void main(){

P2=0x00//打橡大开锁存器隐嫌

while(1){//保持以上状梁携竖态

P0=0xff//给所有阳极送出高电平

P2=0xff//关闭锁存器

P1=0xff//给2803送高电平

}

}

//P0//573 in

//P1//uln2803

//P2//573 LE

*/

#include <stc12c5a.h>

#define uchar unsigned char

void delay1ms()

{

TH1=0xd8

TL1=0xf0

TR1=1

while(!TF1)

TF1=0

}

void main()

{

uchar mian[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}

uchar i,w,x

TMOD=0x10

while(1)

{

w=0x01

x=0x01

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

{

P2=~w

P1=~x

w<<=1

x<<=1

P0=mian[i]

delay1ms()

}

}

}

立方简单讲就是用单片机控制很多规则排列的LED的亮和灭。

1、先了解单个LED的控制方式,可以是将正极接电源,负极通过一个限流电阻连接至单片机的某个IO口。IO口输出低电平时,LED就亮,反之,LED灭。

2、若按照单个LED的控制方式,每个LED需要占用单片机的一个IO口,控制100个LED就需要100个IO口。那么,有没有一种方式,可以用较少的IO口,控制较多的LED呢?答案是肯定的,这种方法,就是扫描驱动电路

3、扫描驱动电路基本原理是利用人眼的视觉停留效应。以2×2扫描驱动电路为例对其工作原理进行简述,有4LED,分为2行2列,电路如下(图中省略了限流电阻):

当:

C1=x,C2=x,L1=1,L2=1时,全灭

C1=1,C2=0,L1=0,L2=1时,D11亮

C1=1,C2=0,L1=1,L2=0时,D12亮

C1=0,C2=1,L1=1,L2=1时,全灭

C1=0,C2=1,L1=0,L2=1时,D21亮

C1=0,C2=1,L1=1,L2=0时,D22亮

可见,通过控制C1、C2、L1、L2,可以使D11、D12、D21、D22的任意一个LED的亮灭,也可以使四个LED全灭。

用上述方式轮流点亮D11和D12,一次只亮一个,但是,若将轮换速度加快,每秒之内轮换50次以上,由于漏握人眼的视觉停留效返山庆应,视觉效果上就是两个LED同唯颂时亮。

这样,通过控制C1、C2、L1、L2,可以控制全部LED的亮灭。

上述电路用4个IO口控制4个LED,与直接控制相比,并未节约IO口,但是,若将行和列的数量加大,变为16×16时,共256个LED,控制仅需32个IO口,也就是说,行列数越多,相比越节省IO口。

仔细分析上述控制过程,可以发现,还可以进一步节约IO口的数量。

以16×16的整列为例,若限定16列中,每次只亮一列,就可以用4根IO线加一个4~16译码器替代。这样,就变为16+4只有20个IO口了。而行还是保留16根,因为这样做,可以一次控制1列中的多个LED同时亮。加快扫描进度。

以上就是光立方的基本原理。熟悉其控制过程后,编写程序并不难。

1、3D8光立方取模软件的视图分为:正视图,侧视图和俯视图,取模时只需要在你想要的视铅旦图上 *** 作即可,不必管其他视图的变化

代表光立方的三视图分别是:正视图,侧视图和俯视图

2、用鼠标点击8*8的小方格,白色代表点亮,灰色散汪代表冲激仔熄灭,数据会显示在下面的hex显示区内


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12557344.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存