查看: 34009|回复: 20

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

[复制链接]
  • TA的每日心情
    郁闷
    2017-2-14 16:38
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 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 | 显示全部楼层
    你好,我用了你的代码。为什么老是报错-
  • TA的每日心情
    开心
    2020-11-7 20:36
  • 签到天数: 824 天

    [LV.10]以坛为家III

    发表于 2017-1-2 22:22 | 显示全部楼层
    给楼主点个赞哈哈哈
  • TA的每日心情
    郁闷
    2017-2-14 16:38
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-1-3 08:58 | 显示全部楼层
    单片机菜鸟 发表于 2017-1-2 22:22
    给楼主点个赞哈哈哈

    哈哈,谢谢!
  • TA的每日心情
    擦汗
    2017-2-15 13:03
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2017-1-3 12:04 | 显示全部楼层
    有个疑惑,这几个字的1、0点阵是一维数据还是二维数组啊?
  • TA的每日心情
    郁闷
    2017-2-14 16:38
  • 签到天数: 8 天

    [LV.3]偶尔看看II

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

    应该都行。你可以当作一位数组来处理,也可以当作二维数组来处理。反正都是64个元素。二维数组调用起来比较方便。
  • TA的每日心情
    开心
    2017-1-7 12:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-1-7 17:48 | 显示全部楼层
    我的板是1088as,这个程式也可以用吗?
  • TA的每日心情
    郁闷
    2017-2-14 16:38
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-2-1 16:19 | 显示全部楼层
    yudan 发表于 2017-1-7 17:48
    我的板是1088as,这个程式也可以用吗?

    我用的就是1088AS,你试试看。
  • TA的每日心情
    开心
    2017-5-26 13:34
  • 签到天数: 9 天

    [LV.3]偶尔看看II

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

    本版积分规则

    热门推荐

    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    arduino pid麦克纳姆轮小车程序详解
    arduino pid麦克纳姆轮小
    之前发过几个帖子,大家可以参考,但经过多次尝试,整套系统升级了,优化了很多地方目录:
    稚晖大佬给抄袭了??
    稚晖大佬给抄袭了??
    今天逛淘宝突然看见个小板子叫夸克,夸克???开源的就是容易抄袭啊!下面贴上这家店
    步进电机的frizing模块
    步进电机的frizing模块
    请问哪位大佬有frizing中步进电机的驱动器和限位开关,求带
    关于给esp8266编程和给arduino编程的一些疑问
    关于给esp8266编程和给ard
    本人大一学生,目前正在做创新作业,已经进行到了最后一步:arduino从onenet上调取数
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表