راهنمای استفاده از ماژول LED ماتریسی 8*8 با آردوینو و اتصال آبشاری آن

Dot-matrix led cascade connection

فهرست مطالب

مقدمه

در این آموزش نحوه استفاده از ماژول ماتریس 8*8 با آی سی MAX7219 را خواهید آموخت. در انتها قادر خواهید بود به راحتی اشکال و متن مورد نظر خود را روی یک یا چند دات ماتریس بصورت ثابت یا Scroll تنها با اشغال 4 پین دیجیتال از آردوینو، نمایش دهید.

آنچه در این آموزش یاد می گیرید

نمایشگر LED ماتریسی چیست؟

Dot matrix آرایه ای از LED هاست که می توان روی آن اعداد، حروف و اشکال خاصی نمایش داد، Dot matrix ها با تعداد سطر و ستون مشخص می شوند، نوع محبوب و رایج Dot Matrixها نوع 8×8 آن می باشد که 64 LED در 8 سطر و 8 ستون فراهم می کند.
برای کنترل کردن ساده Dot Matrix 8×8 باید هر سطر و هر ستون را به یک پایه دیجیتال متصل کرد و این به آن معناست که شما به 16 پایه دیجیتال نیاز دارید! پس این روش، روش چندان مناسبی نیست. برای کنترل Dot Matrixها ماژول هایی مبتنی بر آیسی های MAX72xx ساخته شده که با اشغال کردن تنها 4 پین دیجیتال بجای 16 پایه، Dot Matrix را کنترل می کند و همچنین می توانید چندین Dot Matrix (تا 8 عدد) را بدون نیاز به پایه ای دیگر، بهم متصل کرده و روی آنها اطلاعات موردنظر را بصورت آبشاری(Cascade) نمایش دهید.

نحوه اتصال ماژول نمایشگر LED ماتریسی به آردوینو

قطعات مورد نیاز

برد آردوینو Uno × 1
ماژول صفحه نمایش LED ماتریسی 8X8 تگ رنگ دارای چیپ درایور MAX7219 × 1
سیم جامپر نری به مادگی × 1

نرم افزارهای مورد نیاز

Arduino IDE

سیم بندی

برای اتصال Dot matrix  به آردوینو کافیست پایه های Vcc و Gnd را به 5ولت و GND آردوینو متصل کنید و پایه های DIN، CS و CLK را می توانید به هر پایه دیجیتالی که می خواهید متصل کنید.

کد

برای استفاده از DotMatrix و آردوینو کتابخانه های زیادی وجود دارد که دو کتابخانه ledcontrol و MaxMatrix از رایج ترین این کتابخانه ها هستند که ساختاری مشابه هم دارند. فایل های مورد نیاز:
حال به کد زیر توجه کنید:
/*
  8x8 Dot Matrix w/ MAX7219
  modified on 7 March 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <MaxMatrix.h> int DIN = 7; int CLK = 6; int CS = 5; int maxInUse = 1; byte buffer[20]; char text[] = "a"; MaxMatrix m(DIN, CS, CLK, maxInUse); void setup() { m.init(); m.setIntensity(8); } void loop() { m.setDot(0, 7, true); m.setDot(0, 7, true); delay(1000); m.setDot(7, 0, true); delay(1000); m.setColumn(3, B11110000); delay(1000); m.setColumn(4, B00001111); delay(1000); m.clear(); delay(1000); }
برخی از مهم ترین توابع این کتابخانه طبق جدول زیر است:
Function Description
init() Starting Dot matrix
SetIntensity(num) Determining LEDs light intensity (0 to 15)
setDot(x,y,true) Turning on the LED in (x,y) cordinate
clear() Clear the screen
setColumn(x,LEDs) Turning on a group of LEDs in X colum
writeSprite(x,y,*byte) Displaying a specific character with the start points x and y
shiftLeft,Right(rotate,fill_zero) Shifting a picture up or down.when rotate is true, if the image is traversed from the left or the right of the Dot Matrix, the exit part is inserted from the opposite side and otherwise not entered. If the fill_zero is true, the LEDs passing through the shapes will shut off, otherwise, they will turn on.
shiftUp,Down(rotate) Shifting a picture up or down

نمایش اشکال خاص برروی Dot Matrix

برای نشان دادن اشکال خاص و مدنظر خود روی DotMatrix کافیست الگوی روشن شدن LEDها را به یک رشته بیت تبدیل کنید. برای اینکار می توانید از ابزارهای آنلاینی نظیر این سایت کمک بگیرید، شکل خود را طراحی کنید و کد تولید شده را داخل برنامه آردوینو قرار دهید و آنرا روی بورد خود آپلود کنید.
/*
  8x8 Dot Matrix w/ MAX7219
  modified on 7 March 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <MaxMatrix.h> int DIN = 7; int CLK = 6; int CS = 5; int maxInUse = 1; MaxMatrix m(DIN, CS, CLK, maxInUse); byte poker[] = {8, 8, 0xff, 0x81, 0xa5, 0xa1, 0xa1, 0xa5, 0x81, 0xff }; byte smile[] = {8, 8, 0xff, 0x81, 0xb5, 0xa1, 0xa1, 0xb5, 0x81, 0xff }; byte sad[] = {8, 8, 0xff, 0x81, 0xb5, 0x91, 0x91, 0xb5, 0x81, 0xff }; byte kiss[] = {8, 8, 0xff, 0x81, 0xb5, 0xb1, 0xb1, 0xb5, 0x81, 0xff }; void setup() { m.init(); m.setIntensity(8); } void loop() { m.writeSprite(0, 0, smile); delay(1000); m.clear(); m.writeSprite(0, 0, poker); delay(1000); m.clear(); m.writeSprite(0, 0, sad); delay(1000); m.clear(); m.writeSprite(0, 0, kiss); delay(1000); for (int i = 0; i < 8; i++) { m.shiftLeft(false, false); delay(300); } m.clear(); }
از این طریق میتوانید اعداد و حروف را نیز ساخته و نمایش دهید. برای استفاده از اعداد، حروف و علامت های رایج می توانید از رشته و توابع زیر کمک بگیرید:
#include <avr/pgmspace.h>
byte buffer[10];
 PROGMEM const unsigned char CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // < 3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // = 3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
  };

void printCharWithShift(char c, int shift_speed) {
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7 * c, 7);
m.writeSprite(32, 0, buffer);
m.setColumn(32 + buffer[0], 0);
for (int i = 0; i < buffer[0] + 1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
void printStringWithShift(char* s, int shift_speed) {
while (*s != 0) {
printCharWithShift(*s, shift_speed);
s++;
}
}
void printString(char* s)
{
int col = 0;
while (*s != 0)
{
if (*s < 32) continue;
char c = *s - 32;
memcpy_P(buffer, CH + 7 * c, 7);
m.writeSprite(col, 0, buffer);
m.setColumn(col + buffer[0], 0);
col += buffer[0] + 1;
s++;
}
 }

اتصال دو Dot matrix بصورت آبشاری

از قابلیت های جالب ماژول Dot Matrix، می اتصال چند عدد (حداکثر 8) از ماژول ها بهم و نمایش اطلاعات بصورت آبشاری روی آنهاست.

سیم بندی

برای این کار کافیست بصورت سلسه مراتبی Dout ماژول قبل را به Din ماژول بعد متصل کنید و سایر پایه ها را نیز به همنام خود متصل کنید.

کد

حال با آپلود کردن کد زیر روی آردوینو، نتیجه را مشاهده کنید.
/*
  8x8 Dot Matrix w/ MAX7219
  modified on 7 March 2019
  by Saeed Hosseini @ Electropeak
  
Home
*/ #include <MaxMatrix.h> int DIN = 7; int CLK = 6; int CS = 5; int maxInUse = 2; MaxMatrix m(DIN, CS, CLK, maxInUse); byte pakman[] = {8, 8, 0x1c, 0x22, 0x41, 0x49, 0x55, 0x22, 0x00, 0x08}; void setup() { m.init(); m.setIntensity(2); } void loop(){ m.writeSprite(0, 0, pakman); delay(300); for (int i = 0; i < 8; i++) { m.shiftRight(false, true); delay(300); } m.clear(); }
نکته
فراموش نکنید که شما بصورت مستقیم تنها روی اولین ماژول برنامه ریزی می کنید.

آموزش های مشابه

Comments (4)

  • Ehsan Reply

    سلام
    ببخشید من در MaxMatrix خطا دارم
    باید چکار کنم تا خطا رفع بشود

    ژانویه 24, 2022 at 11:36 ب.ظ
    • مهران ملکی Reply

      سلام.
      خطایی که دارید دقیقا چی هست؟

      ژانویه 29, 2022 at 10:53 ق.ظ
  • موسوی Reply

    عالی بود.ممنون ماژول رو هم از فروشگاه کافه ربات تهیه کردم که حرف نداشت

    اکتبر 1, 2022 at 8:59 ب.ظ
    • مهران ملکی Reply

      خوشحالیم که براتون مفید بوده.

      اکتبر 28, 2022 at 3:37 ب.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.