【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏7

发布时间 2023-07-19 08:54:00作者: 行者花雕

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验二十二:MAX7219点阵显示模块(8X8 LED共阴屏幕)

8×8 LED矩阵 MAX7219显示模块实验所需硬件清单
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
8*8 发光管 1088AS 共阴点阵屏X1
8×8 LED矩阵 MAX7219显示模块X2
Proto Shield 原型扩展板(带mini面包板)X1

程序一:快速扫描所有64个点
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序一:快速扫描所有64个点
  下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip
  实验连线:
  VCC  →  5V
  GND  →  GND
  DIN 接 D11 (MOSI)
  CS  接 D10 (SS)
  CLK 接 D13 (SCK)
*/

#include <Sprite.h>  // 点阵之前的精灵
#include <Matrix.h>  // 点阵驱动库

const int numChips = 1;

//定义引脚DIN, CLK, CS
Matrix myLeds = Matrix(11, 13, 10, numChips);

void setup() {
  myLeds.clear();//点阵屏初始化
}

void loop() {
  byte x, y;

  // 一次点亮一个 LED,从左到右扫描
  // 从上到下...对于测试矩阵很有用
  for (y = 0; y < 8; y++) {
    for (x = 0; x < (numChips * 8); x++) {
      myLeds.write(x, y, HIGH);
      delay(20);
      myLeds.write(x, y, LOW);
    }
  }
}

  

程序四:四个角落的闪烁光点
(1)实验开源仿真编程(Linkboy V4.63)

程序五:循环变幻对角线光点
实验开源仿真编程(Linkboy V4.63)

程序六:间隔一秒,满屏闪烁
实验开源图形编程(Mind+、编玩边学)
设置满屏亮灯

程序七:三种图案的闪烁变脸
实验开源图形编程(Mind+、编玩边学)

 

程序八:快速显示字符,逐点刷屏
Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序八:快速显示字符,逐点刷屏
*/

//导入驱动库
#include "LedControl.h"
//定义点阵屏的引脚,接线DIN-D11,CLK-D13,CS-D10
LedControl lc = LedControl(11, 13, 10, 1);

//我们总是在显示更新之间等待一段时间
unsigned long delaytime = 100;

void setup() {
  //MAX72XX 启动时处于省电模式,我们得叫醒
  lc.shutdown(0, false);
  //将亮度设置为中等值
  lc.setIntensity(0, 8);
  //并清除显示
  lc.clearDisplay(0);
}

//快速显示字符
void writeArduinoOnMatrix() {
  //这里是字符的数据
  byte a[5] = {B01111110, B10001000, B10001000, B10001000, B01111110};
  byte r[5] = {B00111110, B00010000, B00100000, B00100000, B00010000};
  byte d[5] = {B00011100, B00100010, B00100010, B00010010, B11111110};
  byte u[5] = {B00111100, B00000010, B00000010, B00000100, B00111110};
  byte i[5] = {B00000000, B00100010, B10111110, B00000010, B00000000};
  byte n[5] = {B00111110, B00010000, B00100000, B00100000, B00011110};
  byte o[5] = {B00011100, B00100010, B00100010, B00100010, B00011100};

  //现在以一个小的延迟一个一个地显示它们
  lc.setRow(0, 0, a[0]);
  lc.setRow(0, 1, a[1]);
  lc.setRow(0, 2, a[2]);
  lc.setRow(0, 3, a[3]);
  lc.setRow(0, 4, a[4]);
  delay(delaytime);
  lc.setRow(0, 0, r[0]);
  lc.setRow(0, 1, r[1]);
  lc.setRow(0, 2, r[2]);
  lc.setRow(0, 3, r[3]);
  lc.setRow(0, 4, r[4]);
  delay(delaytime);
  lc.setRow(0, 0, d[0]);
  lc.setRow(0, 1, d[1]);
  lc.setRow(0, 2, d[2]);
  lc.setRow(0, 3, d[3]);
  lc.setRow(0, 4, d[4]);
  delay(delaytime);
  lc.setRow(0, 0, u[0]);
  lc.setRow(0, 1, u[1]);
  lc.setRow(0, 2, u[2]);
  lc.setRow(0, 3, u[3]);
  lc.setRow(0, 4, u[4]);
  delay(delaytime);
  lc.setRow(0, 0, i[0]);
  lc.setRow(0, 1, i[1]);
  lc.setRow(0, 2, i[2]);
  lc.setRow(0, 3, i[3]);
  lc.setRow(0, 4, i[4]);
  delay(delaytime);
  lc.setRow(0, 0, n[0]);
  lc.setRow(0, 1, n[1]);
  lc.setRow(0, 2, n[2]);
  lc.setRow(0, 3, n[3]);
  lc.setRow(0, 4, n[4]);
  delay(delaytime);
  lc.setRow(0, 0, o[0]);
  lc.setRow(0, 1, o[1]);
  lc.setRow(0, 2, o[2]);
  lc.setRow(0, 3, o[3]);
  lc.setRow(0, 4, o[4]);
  delay(delaytime);
  lc.setRow(0, 0, 0);
  lc.setRow(0, 1, 0);
  lc.setRow(0, 2, 0);
  lc.setRow(0, 3, 0);
  lc.setRow(0, 4, 0);
  delay(delaytime);
}

/*
  此功能连续点亮一些 LED。
  该模式将在每一行上重复。
  该模式将与行号一起闪烁。
  行号 4 (index==3) 将闪烁 4 次,以此类推。
*/
void rows() {
  for (int row = 0; row < 8; row++) {
    delay(delaytime);
    lc.setRow(0, row, B10100000);
    delay(delaytime);
    lc.setRow(0, row, (byte)0);
    for (int i = 0; i < row; i++) {
      delay(delaytime);
      lc.setRow(0, row, B10100000);
      delay(delaytime);
      lc.setRow(0, row, (byte)0);
    }
  }
}

/*
  此功能点亮一列中的一些 LED。
  该模式将在每一列上重复。
  该模式将与列号一起闪烁。
  第 4 列(索引==3)将闪烁 4 次,以此类推。
*/
void columns() {
  for (int col = 0; col < 8; col++) {
    delay(delaytime);
    lc.setColumn(0, col, B10100000);
    delay(delaytime);
    lc.setColumn(0, col, (byte)0);
    for (int i = 0; i < col; i++) {
      delay(delaytime);
      lc.setColumn(0, col, B10100000);
      delay(delaytime);
      lc.setColumn(0, col, (byte)0);
    }
  }
}

/*
  此功能将点亮矩阵上的每个 Led。
  LED 将与行号一起闪烁。
  行号 4 (index==3) 将闪烁 4 次,以此类推。
*/
void single() {
  for (int row = 0; row < 8; row++) {
    for (int col = 0; col < 8; col++) {
      delay(delaytime);
      lc.setLed(0, row, col, true);
      delay(delaytime);
      for (int i = 0; i < col; i++) {
        lc.setLed(0, row, col, false);
        delay(delaytime);
        lc.setLed(0, row, col, true);
        delay(delaytime);
      }
    }
  }
}

//循环写入
void loop() {
  writeArduinoOnMatrix();
  rows();
  columns();
  single();
}

  

程序九:依序点亮每一颗LED 再依序熄灭每一颗LED
Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序九://依序点亮每一颗LED 再依序熄灭每一颗LED
  引脚定义
  DIN = D11
  CS  = D10
  CLK = D13
*/

//依序亮每一颗LED 再依序灭每一颗LED
#include "LedControl.h"  //引用 LedControl 库
LedControl lc = LedControl(11, 13, 10, 1); //定义DIN,CLK,CS

void setup() {
  lc.shutdown(0, false); // 关闭省电模式
  lc.setIntensity(0, 0); // 设定亮度为 0 (介于0~15之间)
  lc.clearDisplay(0);    // 清除屏幕
}

void loop() {
  int col;
  int row;
  for (col = 0; col < 8; col++) {
    for (row = 0; row < 8; row++) {
      lc.setLed(0, row, col, 1); // 将Led的列,行设定为亮
      delay(100);
    }
  }
  for (col = 7; col >= 0; col--) {
    for (row = 7; row >= 0; row--) {
      lc.setLed(0, row, col, 0); // 将Led的列,行设定为暗
      delay(100);
    }
  }
}

  

程序十:依序显示 A,r,d,u,i,n,o
Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序十:依序显示 A,r,d,u,i,n,o
  引脚定义
  DIN = D11
  CLK = D13
  CS  = D10
*/

#include "LedControl.h"  //引用 LedControl 库

LedControl lc = LedControl(11, 13, 10, 1); //定义DIN,CLK,CS

//字型码A,r,d,u,i,n,o
byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};


void setup() {
  lc.shutdown(0, false); // 关闭省电模式
  lc.setIntensity(0, 15); // 设定亮度为 0 (介于0~15之间)
  lc.clearDisplay(0);    // 清除屏幕
}

void loop() {

  //显示 A
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,a[j]);
  }
  delay(500);      

  //显示 r
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,r[j]);
  }    
  delay(500);      

  //显示 d
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,d[j]);
  }    
  delay(500);      

  //显示 u
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,u[j]);
  }    
  delay(500);      

  //显示 i
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,i[j]);
  }    
  delay(500);      

  //显示 n
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,n[j]);
  }    
  delay(500);      

  //显示 o
  for(int j=0;j<5;j++){
    //显示 0~4 行
    lc.setColumn(0,j,o[j]);
  }    
  delay(50);      
}