Arduino 8x8点阵怦然心动

Arduino 8x8点阵怦然心动_第1张图片

 

使用8x8点阵做的一个小小实验,这次没有用到驱动模块,

直接用Ardunio IO口控制,

差不多用完所有IO口了,才能控制64个LED灯

 

参考了网络上很多例子,改了一下代码,尝试用FOR语句进行遍历赋值

 

资料①

一般数码管有出厂信息:比如型号为LG5011AH,LG5011BH这里面的AH、BH中的A代表共阴极、B代表共阳极,H代表高亮。

(参考地址:http://blog.sina.com.cn/s/blog_8d2cae7f0100zl6r.html)

 

资料②

关于8*8点阵共阳和共阴的解释(有的初学者是一头雾水): 
1. 有的朋友 认为:共阳就是LED正极全部接在一起,而负极则不是,共阴相反但也是类似。这种说法是错误的哦!(数码管的共阳和共阴是这样的),但点阵8*8点阵共阴 和共阳都是接在一起的。 
2. 所谓共阳和共阴只是管脚排列名称相同(也就是说无论共阳还是共阴管脚编号一 致),但行和列的极性则相反。既然这样,那么我反过方向接共阳不就是变成了共阴吗?理论上是的,但要注意行和列相交的位置发生了变化。 
3. 注意:8*8点阵的管脚不是有顺序的排列哦!

(参考地址:http://wenku.baidu.com/link?url=IAtVsks7B5Bh_E2UN8XxdIUTRsn3b9tPaKfUt9aWAfbUS8PWWAi7F-nBurd8lX_66kTgaACVW7mwmXPeMeb7PKfKYtrOKCSPJT5xJ61KM6a)

 

实验效果

 

引脚说明

疯中凌乱

Arduino 8x8点阵怦然心动_第2张图片

 

BOM表

Arduino Uno                      *1

共阳 8x8LED点阵 16脚    *1

面包板                                  *2   (由于点阵大小的原因,需要上下拼接两块面包板)

跳线若干                                     (如果使用公对母杜邦线,就可以节省面包板了)

 

接线图

>>> 引脚 | >>> 引脚
H1 >>> 2 | L1 >>> 6
H2 >>> 7 | L2 >>> 11
H3 >>> A5 | L3 >>> 10
H4 >>> 5 | L4 >>> 3
H5 >>> 13 | L5 >>> A3
H6 >>> A4 | L6 >>> 4
H7 >>> 12 | L7 >>> 8
H8 >>> A2 | L8 >>> 9

 

Arduino 8x8点阵怦然心动_第3张图片

 

程序开源代码

程序打包下载:https://u16460183.ctfile.com/fs/16460183-295926012

 

int R[] = {2,7,A5,5,13,A4,12,A2}; //行
int C[] = {6,11,10,3,A3,4,8,9};   //列

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);
  }
}

 

 

 

 

 

 

 

你可能感兴趣的:(Arduino,系列实验)