#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三个数字针脚哦!!!!
喜欢文章,欢迎大家转发!!!
|