本文其实就是别人的复制品,但是别人的代码有一点小问题,我更改了过来。这个问题只存在我这里,也许它的8×8点阵型号和我的不同,今日写在这里,供我以后查看。
我的LED型号为:1588AS (共阴),如果你是共阳的,请将代码中的HIGH、LOW取反就行。
这个文章也在Ardiono中文社区发布了,链接为https://www.arduino.cn/thread-32256-1-1.html。
关于8×8 LED点阵的原理之类的我就不赘述了,完全可以参考原文:Arduino 8×8点阵怦然心动 (感谢原作者),只看如何接线:

这是我的实物图:(因为我的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[i],OUTPUT);
pinMode(C[i],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[i],LOW);
digitalWrite(C[i],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[i],OUTPUT);
pinMode(C[i],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[i],LOW);
digitalWrite(C[i],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次
}
}


for循环语句都没有++
多谢提醒,我往博客插入代码时可能板式调整错误了,丢了不少运算符号。感谢指正!
你的代码怎么总是报错?
不知道你是什么错,我这边没有问题。
求大神指导一下!
你好,我也做了这个实验,用的是1088as,接线是用的公接母方式,代码用的是你的,但是图案和汉字都没有,只有几行时亮时灭,剩下的一直亮。
挺急的!
你好,是1588as吗?是的话,如果出现了几行一直亮,请着重检查接线是否正确,请按照文中连线接线。出现这种问题基本上都是因为接线出错了。如果没有接错,再请检查代码。一般都会解决问题,祝好。
我也遇到和你一样的问题,请问你最后解决了吗
你好 请问24脚的点阵屏怎么连线 程序里的数字顺序要怎么变
你好,我不清楚24脚的点阵。我刚才查到可能它是双色的,我不是很清楚。但是我在网上找到了它的引脚图,兴许对你会有帮助。

我还有一些问题能加你QQ了解一下吗 我的QQ是1056979007
你好 请问24脚的点阵屏怎么连线
您好,请问头文件是什么?
你好,这里没有使用头文件,也没有使用库。LED阵列灯只是一个一个的灯,控制每一个灯的HIGH和LOW就可以了。
问题以解决了,但是我的点阵屏心形的亮灭是反着的改34没有用,高低已经改过来了,我就把程序的0,1都改了一遍才出现GIF上的效果。
能顺便问一下您的联系方式么
不错!说明你的是共阳LED点阵,我用的是共阴LED点阵,所以会亮灭反过来,我也在文章开头说了。很高兴能帮到你,可以给我发邮件到tahoroom@163.com,或者直接在这里留言也行,我都会看到的