本帖最后由 tahoroom 于 2017-1-2 21:20 编辑
本文其实就是别人的复制品,但是别人的代码有一点小问题,我更改了过来。这个问题只存在我这里,也许它的8×8点阵型号和我的不同,今日写在这里,供我以后查看。 我的LED型号为:1588AS (共阴),如果你是共阳的,请将代码中的HIGH、LOW取反就行。 这是我的实物图:(因为我的LED太大,所以用引线将16个阵脚引出来再接线的,当然你也可以用原文中说的两个面包板来做。) 接好后,插入Arduino,上传代码,可以试试用我做了修改的代码: (注意:原文的问题仅仅只是3、4接口位置接反了,我将3、4位置接线时做个调换就行了,也可以在代码中修改int C[] ={6,11,10,3,A3,4,8,9}; 为 int C[] = {6,11,10,4,A3,3,8,9}; ,我修改了代码,所以接线不变。)
int R[] = {2,7,A5,5,13,A4,12,A2}; //行
int C[] = {6,11,10,4,A3,3,8,9}; //列 (原文中3、4的位置是反的,我做了调换)
unsigned char biglove[8][8] = //大“心型”的数据
{
0,0,0,0,0,0,0,0,
0,1,1,0,0,1,1,0,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
};
unsigned char smalllove[8][8] = //小“心型”的数据
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,1,0,0,1,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0,
};
void setup()
{
//循环定义行列PIN 为输出模式
for(int i = 0;i<8;i++)
{
pinMode(R,OUTPUT);
pinMode(C,OUTPUT);
}
}
void loop()
{
for(int i = 0 ; i < 100 ; i++) //循环显示100次
{
Display(biglove); //显示大”心形“
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(smalllove); //显示小“心形”
}
}
void Display(unsigned char dat[8][8]) //显示函数
{
for(int c = 0; c<8;c++)
{
digitalWrite(C[c],LOW);//选通第c列
//循环
for(int r = 0;r<8;r++)
{
digitalWrite(R[r],dat[r][c]);
}
delay(1);
Clear(); //清空显示去除余晖
}
}
void Clear() //清空显示
{
for(int i = 0;i<8;i++)
{
digitalWrite(R,LOW);
digitalWrite(C,HIGH);
}
}
可以看到,图案就是一组8×8数组,大家也可以制作自己的文字来展示,比如显示“祝大家节日快乐”,
 int R[] = {2,7,A5,5,13,A4,12,A2}; //行
int C[] = {6,11,10,4,A3,3,8,9}; //列
unsigned char zhu[8][8] = //祝
{
1,0,0,1,1,1,1,1,
0,1,0,1,0,0,0,1,
1,1,1,1,1,1,1,1,
0,1,1,0,1,0,1,0,
1,1,0,0,1,0,1,0,
0,1,0,0,1,0,1,0,
0,1,0,0,1,0,1,0,
0,1,0,1,0,0,1,1,
};
unsigned char da[8][8] = //大
{
0,0,0,1,0,0,0,0,
0,0,0,1,0,0,0,0,
1,1,1,1,1,1,1,1,
0,0,0,1,0,0,0,0,
0,0,0,1,0,0,0,0,
0,0,1,0,1,0,0,0,
0,1,0,0,0,1,0,0,
1,0,0,0,0,0,1,1,
};
unsigned char jia[8][8] = //家
{
0,0,0,1,0,0,0,0,
1,1,1,1,1,1,1,1,
1,0,1,1,1,1,0,1,
0,0,1,1,0,0,1,0,
1,1,1,1,1,1,0,0,
0,1,1,1,1,0,0,0,
1,1,0,1,0,1,0,0,
0,0,1,1,0,0,1,1,
};
unsigned char jie[8][8] = //节
{
0,0,1,0,0,1,0,0,
0,1,1,1,1,1,1,0,
0,0,1,0,0,1,0,0,
0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,
0,0,0,1,0,0,1,0,
0,0,0,1,0,1,1,0,
0,0,0,1,0,0,0,0,
};
unsigned char ri[8][8] = //日
{
0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,
0,1,0,0,0,0,1,0,
0,1,1,1,1,1,1,0,
0,1,0,0,0,0,1,0,
0,1,0,0,0,0,1,0,
0,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0,
};
unsigned char kuai[8][8] = //快
{
0,1,0,0,1,0,0,0,
0,1,0,0,1,0,0,0,
1,1,0,1,1,1,1,0,
0,1,1,0,1,0,1,0,
0,1,1,1,1,1,1,1,
0,1,0,0,1,0,0,0,
0,1,0,1,0,1,0,0,
0,1,1,0,0,0,1,1,
};
unsigned char le[8][8] = //乐
{
0,0,0,0,0,0,0,1,
0,1,1,1,1,1,1,0,
0,1,0,0,1,0,0,0,
0,1,1,1,1,1,1,1,
0,0,0,0,1,0,0,0,
0,0,1,0,1,0,1,0,
0,1,0,0,1,0,0,1,
0,0,0,1,1,0,0,0,
};
unsigned char ximie[8][8] = //全部熄灭
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
};
unsigned char biglove[8][8] = //大“心型”的数据
{
0,0,0,0,0,0,0,0,
0,1,1,0,0,1,1,0,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
};
unsigned char smalllove[8][8] = //小“心型”的数据
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,1,0,0,1,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0,
};
void setup()
{
//循环定义行列PIN 为输出模式
for(int i = 0;i<8;i++)
{
pinMode(R,OUTPUT);
pinMode(C,OUTPUT);
}
}
void loop()
{
BlessYou();
}
void Display(unsigned char dat[8][8]) //显示函数
{
for(int c = 0; c<8;c++)
{
digitalWrite(C[c],LOW);//选通第c列
//循环
for(int r = 0;r<8;r++)
{
digitalWrite(R[r],dat[r][c]);
}
delay(1);
Clear(); //清空显示去除余晖
}
}
void Clear() //清空显示
{
for(int i = 0;i<8;i++)
{
digitalWrite(R,LOW);
digitalWrite(C,HIGH);
}
}
void BlessYou()
{
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(zhu); //显示 祝
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(da); //显示 大
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(jia); //显示 家
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(jie); //显示 节
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(ri); //显示 日
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(kuai); //显示 快
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(le); //显示 乐
}
for(int i = 0 ; i < 30 ; i++) //循环显示30次
{
Display(biglove); //显示 大心
}
for(int i = 0 ; i < 30 ; i++) //循环显示30次
{
Display(smalllove); //显示 小心
}
for(int i = 0 ; i < 30 ; i++) //循环显示30次
{
Display(biglove); //显示 大心
}
for(int i = 0 ; i < 30 ; i++) //循环显示30次
{
Display(smalllove); //显示 小心
}
for(int i = 0 ; i < 200 ; i++) //循环显示200次
{
Display(ximie); //显示 熄灭200次
}
}
本文来自我的博客文章,欢迎访问: http://taho.cc/14006
|