Arduino最小系统驱动5*5 LED 点阵
一、目的:功能:5*5点阵驱动,间隔2秒,循环显示数字0至9。
二、硬件:
1、最小系统ATMEGA-328P UNO
2、5*5点阵
3、220欧电阻*10
三、电路连接
点阵引脚接线
行:连接7,8,9,10,11
列:连接2,3,4,5,6
注:经过实验发现,此模块为共阴极,当行为LOW,列为HIGH时,LED点亮。
四、点阵相关知识:
共阴的,就是led的负极接在一起,靠分别控制led的正极来点亮模块或数码管
共阳的,就是led的正极接在一起,靠分别控制led的负极来点亮模块或数码管
五、实验效果
六、代码
/*
日期:2013-1-10
功能:5*5点阵驱动,间隔2秒,显示数字0至9。
作者:YQ
IDE:1.0.2
硬件:最小系统UNO
*/
//定义数字0-9的字库
const int NUM_1={{0,0,1,0,0},{0,0,1,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,1,1,1,0}};
const int NUM_2={{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0},{0,0,0,1,0},{0,1,1,1,0}};
const int NUM_3={{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0}};
const int NUM_4={{0,1,0,1,0},{0,1,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,0,0,0}};
const int NUM_5={{0,1,1,1,0},{0,0,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0}};
const int NUM_6={{0,1,1,1,0},{0,0,0,1,0},{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0}};
const int NUM_7={{0,1,1,1,0},{0,1,0,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}};
const int NUM_8={{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0}};
const int NUM_9={{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0}};
const int NUM_0={{0,1,1,1,0},{0,1,0,1,0},{0,1,0,1,0},{0,1,0,1,0},{0,1,1,1,0}};
const int col={2,3,4,5,6};//定义列
const int row={7,8,9,10,11};//定义行
//存储点阵的像素点
int pixels;
int lastTime;
int flag=1;
void setup()
{
for(int thisPin=0;thisPin<5;thisPin++)
{
pinMode(row,OUTPUT);
pinMode(col,OUTPUT);
digitalWrite(row,HIGH);
}
lastTime=millis();
memcpy(pixels,NUM_1,sizeof(NUM_1));
}
void loop()
{
refreshScreen();
int currentTime=millis();
//间隔2秒,循环将0-9的字库装入点阵的像素中
if(currentTime-lastTime==2000)
{
switch(flag%10)
{
case 0:
memcpy(pixels,NUM_0,sizeof(NUM_0));
break;
case 1:
memcpy(pixels,NUM_1,sizeof(NUM_1));
break;
case 2:
memcpy(pixels,NUM_2,sizeof(NUM_2));
break;
case 3:
memcpy(pixels,NUM_3,sizeof(NUM_3));
break;
case 4:
memcpy(pixels,NUM_4,sizeof(NUM_4));
break;
case 5:
memcpy(pixels,NUM_5,sizeof(NUM_5));
break;
case 6:
memcpy(pixels,NUM_6,sizeof(NUM_6));
break;
case 7:
memcpy(pixels,NUM_7,sizeof(NUM_7));
break;
case 8:
memcpy(pixels,NUM_8,sizeof(NUM_8));
break;
case 9:
memcpy(pixels,NUM_9,sizeof(NUM_9));
break;
default:break;
}
lastTime=currentTime;
flag++;
}
}
//根据pixels内容不停刷新点阵
void refreshScreen()
{
for(int i=0;i<5;i++)
{
digitalWrite(row , LOW);
for(int j=0;j<5;j++)
{
int thisPixels = pixels;
digitalWrite(col , thisPixels);
if(thisPixels==HIGH)
{
digitalWrite(col,LOW);
}
}
digitalWrite(row,HIGH);
}
} 沙发!!! :lol:lol:lol:lol:lol:lol:lol强子送我的5*5还没动.....放假了玩 好教程,实用,顶一个! Arduino直驱的
不过代码好像不完整。 memcpy()没有定义吧 幻生幻灭 发表于 2013-1-11 19:47 static/image/common/back.gif
Arduino直驱的
不过代码好像不完整。 memcpy()没有定义吧
memcpy()是内存操作函数,不用定义,代码我在IDE1.0.2上已经编译通过了,可以直接使用。 原來有這函數能用阿, 學習了!
找了一下資料,memcpy()是屬於string.h 的函數, 類似 strncpy()
功用是從某一段記憶體複製 n 個字元到另一段記憶體。 const int NUM_1={{0,0,1,0,0},{0,0,1,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,1,1,1,0}};第二个数组不该是、{0,0,1,0,0},么为啥是这个{0,0,1,1,0}, 禅轩 发表于 2013-1-13 09:15 static/image/common/back.gif
const int NUM_1={{0,0,1,0,0},{0,0,1,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,1,1,1,0}};第二个数组不该是 ...
- -!我错了。刚才弄了下 才发现为啥。 呵呵,被你发现了。 驱动写得好! 再膜拜一下,驱动写得如此漂亮! 很好,没玩过点阵,有空也玩玩。 直接用arduino驱动的话是不是就不能用delay函数了啊,是不是用了delay函数之后就只能显示出一个点,不能显示一组点了啊。 我想问一下你最小系统上的复位键(reset键)是怎么接的,接RST引脚和GND吗?
页:
[1]
2