用ArduinoUNO控制8×8点阵LED显示“祝大家节日快乐”-Arduino爱好者 - Powered by Discuz!

Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 49370|回复: 23

用ArduinoUNO控制8×8点阵LED显示“祝大家节日快乐”

[复制链接]
发表于 2017-1-2 19:27 | 显示全部楼层 |阅读模式
本帖最后由 tahoroom 于 2017-1-2 21:20 编辑

本文其实就是别人的复制品,但是别人的代码有一点小问题,我更改了过来。这个问题只存在我这里,也许它的8×8点阵型号和我的不同,今日写在这里,供我以后查看。
我的LED型号为:1588AS (共阴),如果你是共阳的,请将代码中的HIGH、LOW取反就行。
关于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,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

发表于 2017-6-12 20:53 | 显示全部楼层
你好,我用了你的代码。为什么老是报错-
发表于 2017-1-2 22:22 | 显示全部楼层
给楼主点个赞哈哈哈
 楼主| 发表于 2017-1-3 08:58 | 显示全部楼层
单片机菜鸟 发表于 2017-1-2 22:22
给楼主点个赞哈哈哈

哈哈,谢谢!
发表于 2017-1-3 12:04 | 显示全部楼层
有个疑惑,这几个字的1、0点阵是一维数据还是二维数组啊?
 楼主| 发表于 2017-1-3 17:47 | 显示全部楼层
markmarkmark 发表于 2017-1-3 12:04
有个疑惑,这几个字的1、0点阵是一维数据还是二维数组啊?

应该都行。你可以当作一位数组来处理,也可以当作二维数组来处理。反正都是64个元素。二维数组调用起来比较方便。
发表于 2017-1-7 17:48 | 显示全部楼层
我的板是1088as,这个程式也可以用吗?
 楼主| 发表于 2017-2-1 16:19 | 显示全部楼层
yudan 发表于 2017-1-7 17:48
我的板是1088as,这个程式也可以用吗?

我用的就是1088AS,你试试看。
发表于 2017-3-8 12:31 | 显示全部楼层
我是新手,这个前面应该还有点别的吧。百度找不到啊,啥也不懂。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|好玩手机游戏盒子|196体育|Arduino爱好者

GMT+8, 2023-10-3 02:01 , Processed in 0.083116 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表