不带MAX7219驱动的8×8 點矩陣LED(如下图),从左侧有写字的一侧开始,L接正电,C接负电。
Arduino接线
因为Arduino Uno引脚有限,所以就只接了6个引脚做6*6LED灯示例。
实验一: 点亮(L4,C1)LED灯
注意:PIN0 、PIN1引脚为串口UART下载程序引脚,下载程序是先拔掉导线。
int line[6] = {0,1,2,3,4,5};
int col [6] = {8,9,10,11,12,13};
void setup() {
Serial.begin(9600);
for(int i=0;i<6;i++)
{
pinMode(line[i],OUTPUT);//输出模式
pinMode(col[i],OUTPUT);
// 注意: L为 HIGH时,C为LOW时LED点亮
digitalWrite(line[i],LOW);//初始化关闭所有LED灯
digitalWrite(col[i],HIGH);//
Serial.print(line[i]);
Serial.print("-");
}
}
void loop() {
digitalWrite(line[3],HIGH);//点亮点阵上的(L4,C1)LED灯
digitalWrite(col[0],LOW);
}
//定义6 * 6的二维数组appear[6][6] 二维数组格式: 阵列[行][列] appear[c][l]
//1为点亮LED,0为熄灭LED。
int appear[6][6] = { {1,0,0,0,0,1},
{0,1,0,0,1,0},
{0,0,1,1,0,0},
{0,0,1,1,0,0},
{0,1,0,0,1,0},
{1,0,0,0,0,1}};
int col [6] = {8,9,10,11,12,13};//一维数组定义 col 的6个脚位 (行)
int line[6] = {0,1,2,3,4,5};//一维数组定义 line 的6个脚位 (列)
//二维数组定义 阵列[行][列]appear[c][l] 1为点亮LED,0为熄灭LED。
int appear[6][6] = { {1,0,0,0,0,1},
{0,1,0,0,1,0},
{0,0,1,1,0,0},
{0,0,1,1,0,0},
{0,1,0,0,1,0},
{1,0,0,0,0,1}};
void setup() {
Serial.begin(9600);
for(int i=0;i<6;i++)
{
pinMode(col[i],OUTPUT);//输出模式
pinMode(line[i],OUTPUT);
// 注意: L为 HIGH时,C为LOW时LED点亮
digitalWrite(col[i],HIGH);//初始化关闭LED灯
digitalWrite(line[i],LOW);//
}
}
void loop() {
// digitalWrite(line[3],HIGH);//点亮点阵上的(L4,C1)LED灯
// digitalWrite(col[0],LOW);
for(int c=0;c<6;c++){
for(int l=0;l<6;l++){
if(appear[c][l]==1)
{
digitalWrite(col[c],LOW);//点亮c行,l列的LED灯
digitalWrite(line[l],HIGH);
}
Serial.print(appear[c][l]);//打印二维数组的第c行,l列的数值
// Serial.print(c);//打印行数
// Serial.print(l);//打印列数
Serial.print(" ");
}
Serial.print("\n");//换行
}
while(1)
{
;
}
}
MAX7219简介
MAX7219 是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。
一个方便的四线串行接口可以联接通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。
一个方便的四线串行接口可以联接通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
只需要3个IO口即可驱动1个点阵!点阵显示时无闪烁!支持级联!
接线说明:
1.模块左边为输入端口,右边为输出端口。
2.控制单个模块时,只需要将输入端口接到CPU
3.多个模块级联时,第1个模块的输入端接CPU,输出端接第2个模块的输入端,第2个模块的输出端接第3个模块的输入端,以此类推…
以Arduino Nano为例:
另辟蹊径,在YouTube上找到了一个8*8LED数码管的教程视频地址。GitHub获取库文件。
实验一:
//Viral Science www.viralsciencecreativity.com www.youtube.com/c/viralscience
//LED 8x8 Matrix Display DEMO
//Libary link:https://github.com/wayoda/LedControl
//Chinse wedsite: CSDN -> Naiva
#include
int DIN = 11;
int CS = 10;
int CLK = 13;
LedControl lc=LedControl(DIN,CLK,CS,0);
void setup(){
lc.shutdown(0,false);
lc.setIntensity(0,15); //Adjust the brightness maximum is 15
lc.clearDisplay(0);
}
void loop(){
//Facial Expression
byte smile[8]= {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};
byte neutral[8]= {0x3C,0x42,0xA5,0x81,0xBD,0x81,0x42,0x3C};
byte sad[8]= {0x3C,0x42,0xA5,0x81,0x99,0xA5,0x42,0x3C};
//Arrow
byte arrow_up[8]= {0x18,0x3C,0x7E,0xFF,0x18,0x18,0x18,0x18};
byte arrow_down[8]= {0x18,0x18,0x18,0x18,0xFF,0x7E,0x3C,0x18};
//Alternate Pattern
byte d1[8]= {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55};
byte d2[8]= {0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA};
//Moving car
byte b1[8]= {0x00,0x00,0x00,0x00,0x18,0x3C,0x18,0x3C};//8*8LED点阵 取模软件生成
byte b2[8]= {0x00,0x00,0x00,0x18,0x3C,0x18,0x3C,0x00};
byte b3[8]= {0x00,0x00,0x18,0x3C,0x18,0x3C,0x00,0x00};
byte b4[8]= {0x00,0x18,0x3C,0x18,0x3C,0x00,0x00,0x00};
byte b5[8]= {0x18,0x3C,0x18,0x3C,0x00,0x00,0x00,0x00};
byte b6[8]= {0x3C,0x18,0x3C,0x00,0x00,0x00,0x00,0x18};
byte b7[8]= {0x18,0x3C,0x00,0x00,0x00,0x00,0x18,0x3C};
byte b8[8]= {0x3C,0x00,0x00,0x00,0x00,0x18,0x3C,0x18};
//Moving car
printByte(b1);
delay(50);
printByte(b2);
delay(50);
printByte(b3);
delay(50);
printByte(b4);
delay(50);
printByte(b5);
delay(50);
printByte(b6);
delay(50);
printByte(b7);
delay(50);
printByte(b8);
delay(50);
//alternate pattern
printByte(d1);
delay(100);
printByte(d2);
delay(100);
//Arrow
printByte(arrow_up);
delay(2000);
printByte(arrow_down);
delay(2000);
//Facial Expression
printByte(smile);
delay(1000);
printByte(neutral);
delay(1000);
printByte(sad);
delay(1000);
}
void printByte(byte character [])
{
int i = 0;
for(i=0;i<8;i++)
{
lc.setRow(0,i,character[i]);
}
}
本文资料下载
~~密码WeChat :Zero903828673 ~~
参考资料