如何使用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购于 这里 eeeeee.....呃,键盘抽风了。本来评分内容是想写鼓励新人发教程!呵呵 好高端,高端的让我看不懂、、、、、 挺萌的~但还是木有我的8x8 RGB LED萌啊~ 哈哈,我也觉得很萌,没有8*8RGB拉风了。但是拿卖萌来说肯定是第一的了!鼓励新人发帖! 希望有8x8的教程,找了很多个都不行 :( 本帖最后由 zhangsiyan12134 于 2012-7-10 04:20 编辑
8x8的话其实很简单了,搞两个74HC595即可,一个管行一个管列~
关于74HC595,这个教程写得非常好!http://arduino.osall.com/ch04.html 你可以看看~ 5*5的好处是arduino直接驱动。不用74hc595 新手求问,那个取二进制(b & 0x2)>>1是什么意思? 其实,x + y方向上的一组定位决定一个led亮灭,是不是只要x或者y方向串一组电阻就够了?需要x,y方向都串上电阻么?? 好资料,研究下, 好资料,研究下,
页:
[1]