查看: 42217|回复: 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 | 显示全部楼层
我是新手,这个前面应该还有点别的吧。百度找不到啊,啥也不懂。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

原价299元【语音开发板套件】限时免费领!
原价299元【语音开发板套
教你让OLED动起来!多重字符串版!
教你让OLED动起来!多重字
大家都知道:arduino单片机是单线程的 而上次教程中的多段字符串的运行速度必须一致
TTGO T8 1.7.1使用TFT_eSPI库驱动2.4寸ILI9341屏幕显示板载SD内图片
TTGO T8 1.7.1使用TFT_eSP
TTGO T8 1.7.1采用Espressif官方ESP32-WROVER模块制作,4MB闪存和8MB PSRAM,支持TF
TTGO TFT屏幕Arduino使用的小结
TTGO TFT屏幕Arduino使用
TTGO TFT屏幕是一款ESP32和1.44寸LCD屏幕组合的产品,屏幕由ST7789驱动。ESP32自带520
分享我的第一个点灯程序——家庭控制中心
分享我的第一个点灯程序—
2020年,在B站上初识ESP8266,被ESP8266的低门槛、高性价比深深吸引,2020年6月20日,
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表