查看: 35874|回复: 20

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

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

关于红外的求助
关于红外的求助
为什么红外发射出的跟我设定的不一样,如图,我两个板子一个发射,一个接收,我想要发
【Arduino】168种传感器模块系列实验(104)---MAX30102手腕心率
【Arduino】168种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
[Arduino物联网开发实战5]云端历史数据存储与查看
[Arduino物联网开发实战5]
blinker提供了历史数据存储与图表查看数据的功能。 设备端开发 在blinker的设计下,设
程序卡着不动,最后打印Freeheap 25427
程序卡着不动,最后打印Fr
各位有见过这个错误吗,程序跑到这里卡着不动
通过定时器读取串口数据出错
通过定时器读取串口数据出
各位大佬好,本人通过树莓派和Arduino通信,一边接收Arduino传感器数据,一边给Arduin
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表