arduino 矩阵肩膀_Arduino 8X8LED矩阵用法详解

#define DATA 6

#define LATCH 8

#define CLOCK 10

void setup()

{

// put your setup code here, to run once:

pinMode(DATA,OUTPUT);

pinMode(LATCH,OUTPUT);

pinMode(CLOCK,OUTPUT);

}

int binary[]={1,2,4,8,16,32,64,128 };

int r,c=0;

void setLed(int row,int column,int del)

{

digitalWrite(LATCH,LOW);

shiftOut(DATA,CLOCK,MSBFIRST,~binary[column]);

//列

shiftOut(DATA,CLOCK,MSBFIRST,binary[row]);

//行

digitalWrite(LATCH,HIGH);

delay(del);

}

void loop()

{

setLed(0,0,0);

setLed(0,1,0);

setLed(0,2,0);

setLed(0,5,0);

setLed(0,6,0);

setLed(0,7,0);

setLed(1,0,0);

setLed(1,1,0);

setLed(1,2,0);

setLed(1,5,0);

setLed(1,6,0);

setLed(1,7,0);

setLed(3,2,0);

setLed(3,5,0);

setLed(4,2,0);

setLed(4,3,0);

setLed(4,4,0);

setLed(4,5,0);

setLed(6,0,0);

setLed(6,1,0);

setLed(6,6,0);

setLed(6,7,0);

setLed(7,1,0);

setLed(7,2,0);

setLed(7,3,0);

setLed(7,4,0);

setLed(7,5,0);

setLed(7,6,0);

}

|

效果图如下:

笑脸图形

但是这种方法太过繁琐,下例将介绍一种更直观的方法

生成图形二

arduino代码如下:

#define DATA 6

#define LATCH 8

#define CLOCK 10

void setup()

{

// put your setup code here, to run once:

pinMode(DATA,OUTPUT);

pinMode(LATCH,OUTPUT);

pinMode(CLOCK,OUTPUT);

}

int binary[]={1,2,4,8,16,32,64,128 };

byte smile[]={

B00011000,

B00011000,

B11111111,

B11011011,

B11000011,

B11111111,

B00111100,

B10000001

};

void loop()

{

for(int i=0;

i<8;

i++)

{

digitalWrite(LATCH,LOW);

shiftOut(DATA,CLOCK,MSBFIRST,smile[i]);

//列

shiftOut(DATA,CLOCK,MSBFIRST,binary[i]);

//行

digitalWrite(LATCH,HIGH);

}

delay(1);

}

|

注意:

smile数组中,各比特中的0代表的就是需要亮的矩阵LED,这让显示图形变得很直观,大家可以尝试改变一下图形。

动画

在介绍矩阵动画之前,先介绍一下两种比特位操作符,位左移操作符(<>)

例子如下图:

位左移操作符

位左移操作符,比特位向左移动,右边空出补零。

同理,右移操作符,比特位向右移动,左边空出补零。

byte a=B11110001;

byte b=a>>4;

b将变成B00001111。

arduino代码如下:

#define DATA 6

#define LATCH 8

#define CLOCK 10

void setup()

{

// put your setup code here, to run once:

pinMode(DATA,OUTPUT);

pinMode(LATCH,OUTPUT);

pinMode(CLOCK,OUTPUT);

}

int binary[]={1,2,4,8,16,32,64,128 };

byte smile[]={

B00011000,

B00011000,

B11111111,

B11011011,

B11000011,

B11111111,

B00111100,

B10000001

};

void loop()

{

for(int shift=0;

shift<9;

shift++)

{

for(int stay=0;

stay<30;

stay++)

{

for(int i=0;

i<8;

i++)

{

digitalWrite(LATCH,LOW);

shiftOut(DATA,CLOCK,MSBFIRST,smile[i]<

//列

shiftOut(DATA,CLOCK,MSBFIRST,binary[i]);

//行

digitalWrite(LATCH,HIGH);

}//end i

delay(1);

}//end stay

}//end shift

}//end loop

|

这里还是只用了arduino三个数字针脚哦!!!!

喜欢文章,欢迎大家转发!!!

|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值