[Diao Ye learns programming] Arduino hands-on (22) - 8X8 LED dot matrix MAX7219 screen 6

The reference to 37 sensors and modules has been widely circulated on the Internet. In fact, there must be more than 37 sensor modules compatible with Arduino. In view of the fact that I have accumulated some sensors and modules on hand, according to the concept of true knowledge (must be done by hands), for the purpose of learning and communication, I am going to try and do experiments one by one here, and will record them whether they are successful or not.

[Arduino] 108 sensor module series experiments (data + code + graphics + simulation)
Experiment 22: MAX7219 dot matrix display module (8X8 LED common cathode screen)

insert image description here

[Arduino] 168 kinds of sensor module series experiment (data code + simulation programming + graphic programming)
experiment 22: MAX7219 dot matrix display module (8X8 LED common cathode)
item 33: dynamic red heart

Experimental open source code

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目三十三:动态红心
  接脚连线:
  MAX7219      UNO
  VCC  →→→→→ 5V
  GND  →→→→→ GND
  DIN  →→→→→ D12(数据,数据接收引脚)
  CS   →→→→→ D11(负载,命令接收引脚)
  CLK  →→→→→ D10(时钟,时钟引脚)
*/

unsigned char i;
unsigned char j; 
 
int Max7219_pinCLK = 10;
int Max7219_pinCS = 11;
int Max7219_pinDIN = 12;
 
unsigned char disp1[19][8]={
    
    0x0c,0x1e,0x3e,0x7c,0x7c,0x3e,0x1e,0x0c};
 
void Write_Max7219_byte(unsigned char DATA) 
{
    
       
  unsigned char i;
  digitalWrite(Max7219_pinCS,LOW);  
  for(i=8;i>=1;i--)
  {
    
        
    digitalWrite(Max7219_pinCLK,LOW);
    digitalWrite(Max7219_pinDIN,DATA&0x80);
    DATA = DATA<<1;
    digitalWrite(Max7219_pinCLK,HIGH);
  }                                 
}
 
void Write_Max7219(unsigned char address,unsigned char dat)
{
    
    
  digitalWrite(Max7219_pinCS,LOW);
  Write_Max7219_byte(address);          
  Write_Max7219_byte(dat);               
  digitalWrite(Max7219_pinCS,HIGH);
}
 
void Init_MAX7219(void)
{
    
    
  Write_Max7219(0x09, 0x00);      
  Write_Max7219(0x0a, 0x03);      
  Write_Max7219(0x0b, 0x07);       
  Write_Max7219(0x0c, 0x01);      
  Write_Max7219(0x0f, 0x00);      
}
 
void setup()
{
    
    
  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT);
  delay(500);
  Init_MAX7219();
}
 
void loop()
{
    
     
  for(j=0;j<19;j++)
  {
    
    
    for(i=1;i<9;i++)
      Write_Max7219(i,disp1[j][i-1]);
    delay(500);
  }   
}

insert image description here

[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 22: MAX7219 dot matrix display module (8X8 LED common cathode)
Item 34: Turn on/off its LED combination to display ASCII characters

Experimental open source code

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目三十四:打开/关闭其 LED 组合显示 ASCII 字符
  接脚连线:
  MAX7219      UNO
  VCC  →→→→→ 5V
  GND  →→→→→ GND
  DIN  →→→→→ D12(数据,数据接收引脚)
  CS   →→→→→ D11(负载,命令接收引脚)
  CLK  →→→→→ D10(时钟,时钟引脚)
*/

//We always have to include the library
#include "LedControlMS.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
#define NBR_MTX 2 
LedControl lc=LedControl(12,10,11, NBR_MTX);

String digits= "1234567890";
int digitCounter=0;
/* we always wait a bit between updates of the display */
unsigned long delaytime=300;


void setup() {
    
    
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  Serial.begin (9600);
  Serial.println("Setup");
  digitCounter=0;
  for (int i=0; i< NBR_MTX; i++){
    
    
    lc.shutdown(i,false);
  /* Set the brightness to a medium values */
    lc.setIntensity(i,8);
  /* and clear the display */
    lc.clearDisplay(i);
  }
  
  Serial.println("LED0: 0 0");
  lc.setLed(0,0,0,true);
  delay(1000);
  Serial.println("LED0: 0 7");
  lc.setLed(0,0,7,true);
  delay(1000);
  Serial.println("LED0: 7 0");
  lc.setLed(0,7,0,true);
  delay(1000);
  Serial.println("LED0: 7 7");  
  lc.setLed(0,7,7,true);
  delay(1000);
  Serial.println("LED0: 0 0 off");
  lc.setLed(0,0,0,false);
  delay(1000);
  Serial.println("LED0: 0 7 off");
  lc.setLed(0,0,7,false);
  delay(1000);
  Serial.println("LED0: 7 0 off");
  lc.setLed(0,7,0,false);
  delay(1000);
  Serial.println("LED0: 7 7 off");  
  lc.setLed(0,7,7,false);
  delay(1000);  
  //clearAll();
  
  lc.setRow(0,1,0x0C);
  delay(1000);
  lc.clearDisplay(0);
  lc.setRow(0,1,0xC0);
  delay(1000);
  lc.clearDisplay(0);

  lc.setColumn(0,1,0x0C);
  delay(1000);
  lc.clearDisplay(0);
  lc.setColumn(0,1,0xC0);
  delay(1000);
  lc.clearDisplay(0);
  
  lc.writeString(0,"Hola Mundo");
  delay(1000);
  lc.clearAll();
  scrollLeft('O');
  delay(1000);
  lc.clearAll();
  scrollRight('O');
  delay(1000);
  lc.clearAll();
}

void loop() {
    
     
  char ch= digits[digitCounter];
  digitCounter++;
  if (digitCounter>9) digitCounter=0;
  lc.displayChar(0, lc.getCharArrayPosition(ch));
  delay(500);
  lc.clearAll();
  delay(200);
}


void scrollLeft(char ch){
    
    
  int pos =lc.getCharArrayPosition(ch);
  for (int scroll =0; scroll<6; scroll++) {
    
    
     for (int i=scroll; i<6;i++) {
    
    
        lc.setRow(0,i-scroll, alphabetBitmap[pos][i]);
    } 
    delay(200);
    lc.clearDisplay(0);
  }
}

void scrollRight(char ch){
    
    
  int pos =lc.getCharArrayPosition(ch);
  for (int scroll =0; scroll<8; scroll++) {
    
    
     for (int i=0; i<6;i++) {
    
    
        if (scroll+i<8) lc.setRow(0, scroll+i, alphabetBitmap[pos][i]);
    } 
    delay(200);
    lc.clearDisplay(0);
  }
}

Experimental serial port return

insert image description here

insert image description here
insert image description here

[Arduino] 168 kinds of sensor module series experiment (data code + simulation programming + graphic programming)
experiment 22: MAX7219 dot matrix display module (8X8 LED common cathode)
item 35: point by point arrangement

Experimental open source code

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目三十五:逐点排列
  接脚连线:
  MAX7219      UNO
  VCC  →→→→→ 5V
  GND  →→→→→ GND
  DIN  →→→→→ D12(数据,数据接收引脚)
  CS   →→→→→ D11(负载,命令接收引脚)
  CLK  →→→→→ D10(时钟,时钟引脚)
*/

//We always have to include the library
#include "LedControlMS.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,10,11,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=100;

void setup() {
    
    
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}

/*
 This method will display the characters for the
 word "Arduino" one after the other on the matrix. 
 (you need at least 5x7 leds to see the whole chars)
 */
void writeArduinoOnMatrix() {
    
    
  /* here is the data for the characters */
  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};

  /* now display them one by one with a small delay */
  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);
}

/*
  This function lights up a some Leds in a row.
 The pattern will be repeated on every row.
 The pattern will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
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);
    }
  }
}

/*
  This function lights up a some Leds in a column.
 The pattern will be repeated on every column.
 The pattern will blink along with the column-number.
 column number 4 (index==3) will blink 4 times etc.
 */
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);
    }
  }
}

/* 
 This function will light up every Led on the matrix.
 The led will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
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();
}

insert image description here

[Arduino] 168 kinds of sensor module series experiment (data code + simulation programming + graphic programming)
experiment 22: MAX7219 dot matrix display module (8X8 LED common cathode)
item 36: fast scan matrix so points

Experimental open source code

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目三十六:快速扫描矩阵所以点
  接脚连线:
  MAX7219      UNO
  VCC  →→→→→ 5V
  GND  →→→→→ GND
  DIN  →→→→→ D12(数据,数据接收引脚)
  CS   →→→→→ D11(负载,命令接收引脚)
  CLK  →→→→→ D10(时钟,时钟引脚)
*/

//We always have to include the library
#include "LedControlMS.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 ***** Please set the number of devices you have *****
 But the maximum default of 8 MAX72XX wil also work.
 */
LedControl lc=LedControl(12,10,11,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=10;

/* 
 This time we have more than one device. 
 But all of them have to be initialized 
 individually.
 */
void setup() {
    
    
  //we have already set the number of devices when we created the LedControl
  int devices=lc.getDeviceCount();
  //we have to init all devices in a loop
  for(int address=0;address<devices;address++) {
    
    
    /*The MAX72XX is in power-saving mode on startup*/
    lc.shutdown(address,false);
    /* Set the brightness to a medium values */
    lc.setIntensity(address,8);
    /* and clear the display */
    lc.clearDisplay(address);
  }
}

void loop() {
    
     
  //read the number cascaded devices
  int devices=lc.getDeviceCount();
  
  //we have to init all devices in a loop
  for(int row=0;row<8;row++) {
    
    
    for(int col=0;col<8;col++) {
    
    
      for(int address=0;address<devices;address++) {
    
    
        delay(delaytime);
        lc.setLed(address,row,col,true);
        delay(delaytime);
        lc.setLed(address,row,col,false);
      }
    }
  }
}

insert image description here
[Arduino] 168 kinds of sensor module series experiment (data code + simulation programming + graphic programming)
experiment 22: MAX7219 dot matrix display module (8X8 LED common cathode)
item 37: dynamic string

Experimental open source code

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二十二:MAX7219点阵显示模块(8X8 LED共阴)
  项目三十七:动态字符串
  接脚连线:
  MAX7219      UNO
  VCC  →→→→→ 5V
  GND  →→→→→ GND
  DIN  →→→→→ D12(数据,数据接收引脚)
  CS   →→→→→ D11(负载,命令接收引脚)
  CLK  →→→→→ D10(时钟,时钟引脚)
*/

//We always have to include the library
#include "LedControlMS.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,10,11,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=250;

void setup() {
    
    
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}


/*
 This method will display the characters for the
 word "Arduino" one after the other on digit 0. 
 */
void writeArduinoOn7Segment() {
    
    
  lc.setChar(2,0,'a',false);
  delay(delaytime);
  lc.setRow(2,0,0x05);
  delay(delaytime);
  lc.setChar(2,0,'d',false);
  delay(delaytime);
  lc.setRow(2,0,0x1c);
  delay(delaytime);
  lc.setRow(2,0,B00010000);
  delay(delaytime);
  lc.setRow(2,0,0x15);
  delay(delaytime);
  lc.setRow(2,0,0x1D);
  delay(delaytime);
  lc.clearDisplay(0);
  delay(delaytime);
} 

/*
  This method will scroll all the hexa-decimal
 numbers and letters on the display. You will need at least
 four 7-Segment digits. otherwise it won't really look that good.
 */
void scrollDigits() {
    
    
  for(int i=0;i<13;i++) {
    
    
    lc.setDigit(0,3,i,false);
    lc.setDigit(0,2,i+1,false);
    lc.setDigit(0,1,i+2,false);
    lc.setDigit(0,0,i+3,false);
    delay(delaytime);
  }
  lc.clearDisplay(0);
  delay(delaytime);
}

void loop() {
    
     
  writeArduinoOn7Segment();
  scrollDigits();
}

Arduino dot matrix text (medium) 8x8 LED Matrix MAX7219 Tutorial with Scrolling Text

https://www.bilibili.com/video/BV1Et411k7U2?from=search&seid=4477785334025497564&spm_id_from=333.337.0.0

Arduino Nano + MAX7219 8*8 dot matrix combined Chinese character display

https://www.bilibili.com/video/av375403904/?from=search&seid=3172695889868987008&spm_id_from=333.337.0.0

Guess you like

Origin blog.csdn.net/weixin_41659040/article/details/131799937