kuku_peng 发表于 2012-7-8 12:58:14

如何使用Arduino 控制 5*5 LED 点阵

本帖最后由 kuku_peng 于 2012-7-12 17:19 编辑

5*5 LED点阵,可以显示简单的表情、数字、字母,也可以进行一些动态的花式,
是进行更复杂的LED点阵或LED立方的基础。这里介绍如何使用arduino进行简单的5*5LED控制。

你需要准备
■5*5 LED
■电阻10个
■洞洞板一块
■Arduino Uno 一块
■连线若干

显示原理
5*5 LED 有10个pin脚,5个一组,分别对应X和Y方向,形成一个5*5的矩阵。通过控制矩阵的X和Y的高低电平,从而实现对25个LED中某一个LED的控制。

如果,某一块LED点阵,对应X方向的pin脚为低电平为点亮LED,对应Y方向的pin脚为高电平为点亮LED,

那么 x1=LOW,y1=HIGH,则表明(x1,y1)位置的LED点亮

2组(共10个)pin中,哪一组是x,哪一组是y;

每个pin是高电平点亮,还是低电平点亮,是需要搭建好硬件后,测试后才能确定的,不同的LED点阵可能不同。


安装5*5 LED

一般LED点阵需要串联电阻后使用,否则可能烧毁。我们这块5*5 LED点阵可以在每个pin脚上都串联一个220的电阻,然后再引出pin脚,接到Arduino的IO上,使用洞洞板,将LED、电阻和插针放置好,并焊好。





将LED点阵连到Arduino

将LED点阵的10pin用杜邦线分别连到Arduino的IO口上。完成硬件连接



撰写代码,控制LED点阵

首先定义好pin脚对应的arduino的IO口const int x1 = 3;
const int x2 = 4;
const int x3 = 5;
const int x4 = 6;
const int x5 = 7;

const int y1 = 8;
const int y2 = 9;
const int y3 = 10;
const int y4 = 11;
const int y5 = 12;


这种5*5 LED点阵需要使用动态显示的方式,如果你需要显示一个数字1,组成数字1的所有LED点不能同时显示,如果同时显示,可能导致电路问题。这时候需要一个一个的显示,利用视觉暂留,看上去好像全部显示一样。所以我们需要一些基础方法。

显示某一个坐标的LED

void x_y_on(int x,int y)
{
      digitalWrite(x,x_light);
      digitalWrite(y,y_light);
      delay(LED_on_off_time);
      digitalWrite(x,1-x_light);
      digitalWrite(y,1-y_light);
}



使用二进制数组,设计显示内容


byte one={B00100,
               B01100,
               B00100,
               B00100,
               B01110};
byte * p_one = one;


取二进制位的方法

int get_bit_val(byte b,int b_order)
{
switch (b_order)
{
    case 4:
      return b & 0x1;
      break;
    case 3:
      return (b & 0x2)>>1;
      break;
    case 2:
      return (b & 0x4)>>2;
      break;
   case 1:
      return (b & 0x8)>>3;
      break;
    case 0:
      return (b & 0x10)>>4;
      break;
}

}


对取出的二进制位值,进行相应的显示,bit为1的显示,位置为0的不显示

void show_symbol(byte * p,int time)
{
   int light_val=0;
for (int times =0;times< time/25;times++)
{
    for (int i=0;i<5;i++)
    {
      for( int j=0;j<5;j++)
      {
      light_val = get_bit_val(p,j);
      if (light_val == 1)
      {
          x_y_on(x_pin_convert(j),y_pin_convert(i));
      }
   }
    }
}
}
完成后,即可显示如图,可按照自己的需要显示图形。(完 个人新blog www.robot91.com)



俺这个5*5 LED购于 这里

幻生幻灭 发表于 2012-7-8 13:48:47

eeeeee.....呃,键盘抽风了。本来评分内容是想写鼓励新人发教程!呵呵

迷你强 发表于 2012-7-8 21:29:37

好高端,高端的让我看不懂、、、、、

zhangsiyan12134 发表于 2012-7-9 01:54:53

挺萌的~但还是木有我的8x8 RGB LED萌啊~

Randy 发表于 2012-7-9 09:05:52

哈哈,我也觉得很萌,没有8*8RGB拉风了。但是拿卖萌来说肯定是第一的了!鼓励新人发帖!

foohoa 发表于 2012-7-9 14:18:44

希望有8x8的教程,找了很多个都不行 :(

zhangsiyan12134 发表于 2012-7-10 04:17:45

本帖最后由 zhangsiyan12134 于 2012-7-10 04:20 编辑

8x8的话其实很简单了,搞两个74HC595即可,一个管行一个管列~

关于74HC595,这个教程写得非常好!http://arduino.osall.com/ch04.html 你可以看看~

迷你强 发表于 2012-7-10 15:32:15

5*5的好处是arduino直接驱动。不用74hc595

pcx0828 发表于 2012-7-22 01:06:33

新手求问,那个取二进制(b & 0x2)>>1是什么意思?

arduino_ykk 发表于 2013-5-21 06:10:23

其实,x + y方向上的一组定位决定一个led亮灭,是不是只要x或者y方向串一组电阻就够了?需要x,y方向都串上电阻么??

原野动力 发表于 2016-5-9 18:21:58

好资料,研究下,

原野动力 发表于 2016-5-9 18:22:15

好资料,研究下,
页: [1]
查看完整版本: 如何使用Arduino 控制 5*5 LED 点阵