Arduino Project‎ > ‎

23-max7219-ledcontroller

Max 7219 LED Driver

ลักษณของ 8x8 led matrix



การต่อ LED Matrix 1 ชุด


การทดลอง ควบคุม 8x8 led matrix  1 ชุด


1. ต่อวงจรตามรูป 


2.ติดตั้ง library max7219 ลงใน libraries floder ของ sketch โดยดาวน์โหลด LedControlMS.rar จาก อินเตอร์เนทหรือจากไฟล์ด้านล่าง 

3. เขียนโปรแกรม


โปรแกรมที่ 1 
-----------------------------------------------------------------------------------------------------------
#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 (CS)
 We have only a single MAX72XX.
 */

#define NBR_MTX 1   //จำนวน LED Module  

LedControl lc=LedControl(12,11,10, NBR_MTX);

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 low value */
    lc.setIntensity(0,0);
  /* and clear the display */
    lc.clearDisplay(0);
    
  delay(100);
  lc.clearAll();
  lc.setRow(0, 0, 0xff);
  lc.setRow(0, 1, 0xfe);
  lc.setRow(0, 2, 0xfc);
  lc.setRow(0, 3, 0xf8);
  lc.setRow(0, 4, 0xf0);
  lc.setRow(0, 5, 0xe0);
  lc.setRow(0, 6, 0xc0);
  lc.setRow(0, 7, 0x80);        
}
   
void loop(){
}
-----------------------------------------------------------------------------------------------------------

อธิบายความหมาย

ฟังก์ชั่น void setRow(int addr, int row, byte value);
    addr เป็นตำแหน่งของโมดูล LED เริ่มจาก 0 กรณีที่มีตัวเดียวให้เป็น 0
    row  แถวที่ของ LED เริ่มจากซ้ายมือแถวที่ 0 ไปทางขวามือ 
     
      value ค่าที่ใช้กำหนดการติดดับของ LED แต่ละดวงในแถวนั้น  ถ้าให้ เป็น 1 จะทำให้ LED ติด  ถ้าให้เป็น 0 จะทำให้ LED ดับ
โดยนับบิต ที่ 0 ถึง 7 จากบนลงล่าง  



ดังนั้นค่าตามโปรแกรมจะได้ รูปเป็น

นอกจากนี้ในไลบรารียังได้กำหนด font ใว้บ้างแล้ว  สามารถดูได้จากตัวอย่างในไลบรารี

การต่อ LED หลายๆโมดูลเรียงกันสามารถต่อได้ดังนี้
ปรับปรุงโปรแกรม  ทำเป็นฟังก์ชั่น

โปรแกรมที่ 2
-----------------------------------------------------------------------------------------------------------
#include "LedControlMS.h"
#define NBR_MTX 1 

// LedControl(DIN,CLK,CS number);
LedControl lc=LedControl(12,11,10, NBR_MTX);

const unsigned char pat1[8] ={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};

void display(unsigned char *addr){
  unsigned char data;
   for (int i=0; i < 8; i++){
      data = addr[i];
      lc.setRow(0, i, data);
   }
}

void setup() {
  lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup,we have to do a wakeup call
  lc.setIntensity(0,0); //Set the brightness to a low value
  lc.clearDisplay(0);   // and clear the display 
    
  delay(100);
  lc.clearAll();
  display(pat1);
}

void loop(){
} 
-----------------------------------------------------------------------------------------------------------

ใช้ฟังก์ชั่น Display แสดงภาพเคลื่อนไหว  โดยใช้ภาพหลายภาพ

ไฟล์_000.mp4


โปรแกรมที่ 3
-----------------------------------------------------------------------------------------------------------
#include "LedControlMS.h"
#define NBR_MTX 1 

// LedControl(DIN,CLK,CS number);
LedControl lc=LedControl(12,11,10, NBR_MTX);
 
const char cir1[]={0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00};
const char cir2[]={0x00,0x00,0x00,0x08,0x04,0x02,0x01,0x00};
const char cir3[]={0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00};
const char cir4[]={0x00,0x00,0x00,0x08,0x10,0x20,0x40,0x00};
const char cir5[]={0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00};
const char cir6[]={0x40,0x20,0x10,0x08,0x00,0x00,0x00,0x00};
const char cir7[]={0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00};
const char cir8[]={0x01,0x02,0x04,0x08,0x00,0x00,0x00,0x00};
 
void display(unsigned char *addr){
  unsigned char data;
   for (int i=0; i < 8; i++){
      data = addr[i];
      lc.setRow(0, i, data);
   }
}

void setup() {
  lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup,we have to do a wakeup call
  lc.setIntensity(0,0);   //Set the brightness to a low value
  lc.clearDisplay(0);    // and clear the display 
    
  delay(100);
  lc.clearAll();
}
 
void loop(){
  for (int j=0; j < 8; j++){
    display(cir1);
    delay(200);
    display(cir2);
    delay(200);
    display(cir3);
    delay(200);
    display(cir4);
    delay(200);
    display(cir5);
    delay(200);
    display(cir6);
    delay(200);
    display(cir7);
    delay(200);
    display(cir8);
    delay(200); 
  }
}
---------------------------------------------------------------------------
เขียนอีกแบบให้สั้นและกระชับขึ้น max7219-fn-test-5-2.ino


#include "LedControlMS.h"
#define NBR_MTX 1 

// LedControl(DIN,CLK,CS number);
LedControl lc=LedControl(12,11,10, NBR_MTX);

const char cir[64]={
                 0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,  //picture 1
                 0x00,0x00,0x00,0x08,0x04,0x02,0x01,0x00,  //picture 2
                 0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00,  //picture 3
                 0x00,0x00,0x00,0x08,0x10,0x20,0x40,0x00,  //picture 4
                 0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,  //picture 5
                 0x40,0x20,0x10,0x08,0x00,0x00,0x00,0x00,  //picture 6
                 0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,  //picture 7
                 0x01,0x02,0x04,0x08,0x00,0x00,0x00,0x00,  //picture 8
              };

void display(unsigned char *addr){
  unsigned char data;
   for (int i=0; i < 8; i++){
      data = addr[i];
      lc.setRow(0, i, data);
   }
}

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

void loop(){
  for (int j=0; j < 8; j++){
    display(cir+8*j);
    delay(200);
   }
}
-----------------------------------------------------------------------------------------------------------

ใช้ฟังก์ชั่น Display แสดงภาพเคลื่อนไหว  แบบใช้ภาพเดียว  ใช้วิธีเลื่อนภาพ

ไฟล์_001.mp4



โปรแกรมที่ 4
-----------------------------------------------------------------------------------------------------------
#include "LedControlMS.h"
#define NBR_MTX 1 

// LedControl(DIN,CLK,CS number);
LedControl lc=LedControl(12,11,10, NBR_MTX);

const unsigned char arrow[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                           0x10,0x38,0x7c,0xfe,0x38,0x38,0x38,0x38,
                                           0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,
                                           0x00,0x00};
void display(unsigned char *addr){
  unsigned char data;
   for (int i=0; i < 8; i++){
      data = addr[i];
      lc.setRow(0, i, data);
   }
}

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

void loop(){
  for (int j=0; j < 18; j++){
     display(arrow+j);
    delay(200); 
  }
}
-----------------------------------------------------------------------------------------------------------

สำหรับผู้ที่แปลแล้ว Error ให้ทดลองแปล ไฟล์ ในโปรแกรมที่ 4 max7219-fn-test-4.ino   ด้านล่างนี้ 

ċ
LedControlMS.rar
(9k)
Daddy Moon,
Feb 6, 2017, 8:25 PM
ċ
max7219-fn-test-4.ino
(1k)
Daddy Moon,
Feb 9, 2017, 7:49 AM
ċ
max7219-fn-test-5-2.ino
(1k)
Daddy Moon,
Feb 9, 2017, 6:00 PM
Comments