极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 47145|回复: 11

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

[复制链接]
发表于 2012-7-8 12:58:14 | 显示全部楼层 |阅读模式
本帖最后由 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口
  1. const int x1 = 3;
  2. const int x2 = 4;
  3. const int x3 = 5;
  4. const int x4 = 6;
  5. const int x5 = 7;

  6. const int y1 = 8;
  7. const int y2 = 9;
  8. const int y3 = 10;
  9. const int y4 = 11;
  10. const int y5 = 12;
复制代码


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

显示某一个坐标的LED

  1. void x_y_on(int x,int y)
  2. {
  3.       digitalWrite(x,x_light);
  4.       digitalWrite(y,y_light);
  5.       delay(LED_on_off_time);
  6.       digitalWrite(x,1-x_light);
  7.       digitalWrite(y,1-y_light);
  8. }
复制代码



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


  1. byte one[5]=  {B00100,
  2.                B01100,
  3.                B00100,
  4.                B00100,
  5.                B01110};
  6. byte * p_one = one;
复制代码


取二进制位的方法

  1. int get_bit_val(byte b,int b_order)
  2. {
  3.   switch (b_order)
  4.   {
  5.     case 4:
  6.         return b & 0x1;
  7.         break;
  8.     case 3:
  9.         return (b & 0x2)>>1;
  10.         break;
  11.     case 2:
  12.         return (b & 0x4)>>2;
  13.         break;
  14.    case 1:
  15.         return (b & 0x8)>>3;
  16.         break;
  17.     case 0:
  18.         return (b & 0x10)>>4;
  19.         break;
  20.   }

  21. }
复制代码


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

  1. void show_symbol(byte * p,int time)
  2. {
  3.    int light_val=0;
  4.   for (int times =0;times< time/25;times++)
  5.   {
  6.     for (int i=0;i<5;i++)
  7.     {
  8.       for( int j=0;j<5;j++)
  9.       {
  10.         light_val = get_bit_val(p[i],j);
  11.         if (light_val == 1)
  12.         {
  13.           x_y_on(x_pin_convert(j),y_pin_convert(i));
  14.         }
  15.      }
  16.     }
  17.   }
  18. }
复制代码
完成后,即可显示如图,可按照自己的需要显示图形。(完 个人新blog www.robot91.com



俺这个5*5 LED购于 这里

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +3 收起 理由
幻生幻灭 + 3 xxss

查看全部评分

回复

使用道具 举报

发表于 2012-7-8 13:48:47 | 显示全部楼层
eeeeee  .....呃,键盘抽风了。本来评分内容是想写  鼓励新人发教程!呵呵
回复 支持 反对

使用道具 举报

发表于 2012-7-8 21:29:37 | 显示全部楼层
好高端,高端的让我看不懂、、、、、
回复 支持 反对

使用道具 举报

发表于 2012-7-9 01:54:53 | 显示全部楼层
挺萌的~但还是木有我的8x8 RGB LED萌啊~
回复 支持 反对

使用道具 举报

发表于 2012-7-9 09:05:52 | 显示全部楼层
哈哈,我也觉得很萌,没有8*8RGB拉风了。但是拿卖萌来说肯定是第一的了!鼓励新人发帖!
回复 支持 反对

使用道具 举报

发表于 2012-7-9 14:18:44 | 显示全部楼层
希望有8x8的教程,找了很多个都不行
回复 支持 反对

使用道具 举报

发表于 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
回复 支持 反对

使用道具 举报

发表于 2012-7-22 01:06:33 | 显示全部楼层
新手求问,那个取二进制(b & 0x2)>>1是什么意思?
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
好资料,研究下,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 03:27 , Processed in 0.052060 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表