本文其实就是别人的复制品,但是别人的代码有一点小问题,我更改了过来。这个问题只存在我这里,也许它的8×8点阵型号和我的不同,今日写在这里,供我以后查看。

我的LED型号为:1588AS (共阴),如果你是共阳的,请将代码中的HIGH、LOW取反就行。

这个文章也在Ardiono中文社区发布了,链接为https://www.arduino.cn/thread-32256-1-1.html

关于8×8 LED点阵的原理之类的我就不赘述了,完全可以参考原文:Arduino 8×8点阵怦然心动 (感谢原作者),只看如何接线:

用ArduinoUNO控制8×8点阵LED显示跳跃的心

这是我的实物图:(因为我的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次  
  } 
}

15 条评论

    1. Author

      多谢提醒,我往博客插入代码时可能板式调整错误了,丢了不少运算符号。感谢指正!

  1. 你的代码怎么总是报错?

    1. Author

      不知道你是什么错,我这边没有问题。

  2. 求大神指导一下!
    你好,我也做了这个实验,用的是1088as,接线是用的公接母方式,代码用的是你的,但是图案和汉字都没有,只有几行时亮时灭,剩下的一直亮。
    挺急的!

    1. Author

      你好,是1588as吗?是的话,如果出现了几行一直亮,请着重检查接线是否正确,请按照文中连线接线。出现这种问题基本上都是因为接线出错了。如果没有接错,再请检查代码。一般都会解决问题,祝好。

    2. 我也遇到和你一样的问题,请问你最后解决了吗

  3. 你好 请问24脚的点阵屏怎么连线 程序里的数字顺序要怎么变

    1. Author

      你好,我不清楚24脚的点阵。我刚才查到可能它是双色的,我不是很清楚。但是我在网上找到了它的引脚图,兴许对你会有帮助。

      1. 我还有一些问题能加你QQ了解一下吗 我的QQ是1056979007

  4. 你好 请问24脚的点阵屏怎么连线

  5. 您好,请问头文件是什么?

    1. Author

      你好,这里没有使用头文件,也没有使用库。LED阵列灯只是一个一个的灯,控制每一个灯的HIGH和LOW就可以了。

    2. 问题以解决了,但是我的点阵屏心形的亮灭是反着的改34没有用,高低已经改过来了,我就把程序的0,1都改了一遍才出现GIF上的效果。
      能顺便问一下您的联系方式么

      1. Author

        不错!说明你的是共阳LED点阵,我用的是共阴LED点阵,所以会亮灭反过来,我也在文章开头说了。很高兴能帮到你,可以给我发邮件到tahoroom@163.com,或者直接在这里留言也行,我都会看到的

回复 王习泰 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注