arduino驱动1588LED8x8点阵实验
1、如图,认真学习一下1588各引脚对应各led点,及1588各引脚位置。大家一定要分析好。基本原理:当第一行接入高电平,第一列接入低电平,其它列高电平,那么第一个led灯就会亮了。所有led灯点亮原理是一样的。
2、先点亮第一个灯。按 上图,uno板子引脚3接led点阵9,(3-->9)。uno板子11引脚接led点阵13(11-->13),把3引脚设置高电平,11引脚设置低电平。则第一个led就亮了。请按图接线
////////////////////////////////
int pin3=3; //接led 9引脚
int pin11=11;//接led 13引脚
void setup() {
// put your setup code here, to run once:
pinMode(pin3,OUTPUT);
pinMode(pin11,OUTPUT);
digitalWrite(pin3,HIGH);
digitalWrite(pin11,HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin11,LOW);//11引脚低电平,led亮
delay(200);
digitalWrite(pin11,HIGH);//11引脚高电平,led两端都是高电平,无电流。就灭了。
delay(200);
}
//引程序实现第一个led闪烁。
3、下面根据基本原理来实现一个箭头。
首先这里要知道一个概念:人眼视觉暂留。当led亮/灭间隔很小时,人是看不到灯灭的。
所以要让8x8点阵显示一个箭头,就是每次点亮一行上的对应led.再灭掉。然后处理第二行。依次下去。所有就灰亮了。
int led[8][8] = {//箭头方阵,1处是亮灯的led
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};
void setup() {
// put your setup code here, to run once:
for (int i = 3; i <= 18; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
// Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
for (int i = 3; i <= 10; i++) {
digitalWrite(i, HIGH);
/////////////////////
for (int j = 11; j <= 18; j++) {
digitalWrite(j, 1 - led[i - 3][j - 11]);//把对应的灯点亮
delayMicroseconds(200);//点亮200微秒
digitalWrite(j, HIGH);//再把它灭掉
}
digitalWrite(i, LOW);
}
//////////////////////////////////////////////////////////////
}
1、上面已经实现了一个箭头显示。那么如何让箭头东起来呢?
实际上原来是一样的。只要把我们的8x8点阵里数字左移就好了。
每次把点阵输出后左移一次。就实现了箭头左移效果
const int myspeed = 500;//速度控制
int fast = 0;//速度控制变量
int led[8][8] = {
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};
void setup() {
// put your setup code here, to run once:
for (int i = 3; i <= 18; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
}
void loop() {
fast = 0;
while (fast++ < myspeed) {//速度控制
for (int i = 3; i <= 10; i++) {// uno 3 到 10引脚,分别按图对应接8x8led的9 14 8 12 1 2 5
digitalWrite(i, HIGH);
/////////////////////
for (int j = 11; j <= 18; j++) {//uno 11 到 18,分别对应接8x8led的 13 3 4 10 6 11 15 16
digitalWrite(j, 1 - led[i - 3][j - 11]);//把点阵输出。注意0 1反向电平输出
digitalWrite(j, HIGH);
}
digitalWrite(i, LOW);
}
}
///////////////////////////////////////////////////////////
// int led[][8],点阵左移功能
for(int i=0;i<8;i++){
int temp=led[i][0];
for(int j=0;j<7;j++){
led[i][j]=led[i][j+1];
}
led[i][7]=temp;
}
}