【雕爺學編程】Arduino動手做(99)---8X32 LED點陣模塊


37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗九十九:8X32 LED點陣顯示模塊 MAX7219 輸出 共陰 5V 四位點陣模組

 

MAX7219
是美國MAXIM 公司推出的多位LED 顯示驅動器,采用3 線串行接口傳送數據,可直接與單片機接口連接,用戶能方便修改其內部參數,以實現多位LED 顯示。它內含硬件動態掃描電路、BCD譯碼器、段驅動器和位驅動器。此外,其內部還含有8X8 位靜態RAM,用於存放8 個數字的顯示數據。顯然,它可直接驅動64 段LED點陣顯示器。當多片MAX7219 級聯時,可控制更多的LED 點陣顯示器。顯示的數據通過單片機數據處理后,送給MAX7219 顯示。

MAX7219/MAX7221是一種集成化的串行輸入/輸出共陰極顯示驅動器,它連接微處理器與8位數字的7段數字LED顯示,也可以連接條線圖顯示器或者64個獨立的LED。其上包括一個片上的B型BCD編碼器、多路掃描回路,段字驅動器,而且還有一個8*8的靜態RAM用來存儲每一個數據。只有一個外部寄存器用來設置各個LED的段電流。MAX7221與SPI™、QSPI™以及 MICROWIRE™相兼容,同時它有限制回轉電流的段驅動來減少EMI(電磁干擾)。一個方便的四線串行接口可以聯接所有通用的微處理器。每個數據可以尋址在更新時不需要改寫所有的顯示。MAX7219/MAX7221同樣允許用戶對每一個數據選擇編碼或者不編碼。整個設備包含一個150μA的低功耗關閉模式,模擬和數字亮度控制,一個掃描限制寄存器允許用戶顯示1-8位數據,還有一個讓所有LED發光的檢測模式。

MAX7219管腳描述
1 DIN 串行數據輸入端口。在時鍾上升沿時數據被載入內部的16位寄存器。
2,3,5-8,10,11 DIG 0–DIG7 八個數據驅動線路置顯示器共陰極為低電平。關閉時7219此管腳輸出高電平,7221呈現高阻抗。
4,9 GND 地線 (4腳和9腳必須同時接地)
12 LOAD (MAX7219) 載入數據。連續數據的后16位在LOAD端的上升沿時被鎖定。CS (MAX7221) 片選端。該端為低電平時串行數據被載入移位寄存器。連續數據的后16位在cs端的上升沿時被鎖定。
13 CLK 時鍾序列輸入端。最大速率為 10MHz.在時鍾的上升沿, 數據移入內部移位寄存器。 下降沿時, 數據從DOUT端輸出。對MAX7221來說,只有當cs端為低電平時時鍾輸入才有效。
14-17,20-23 SEG 7 段和小數點驅動,為顯示器提供電流。當一個段驅A–SEG G, 動關閉時,7219的此端呈低電平,7221呈現高阻抗。DP
18 SET 通過一個電阻連接到VDD 來提高段電流。
19 V+ 正極電壓輸入,+5V
24 DOUT 串行數據輸出端口,從DIN輸入的數據在16.5個時鍾周期后在此端有效。當使用多個MAX7219/MAX7221時用此端方便擴展。

MAX7219功能特點
1 10MHz連續串行口
2 獨立的LED段控制
3 數字的譯碼與非譯碼選擇
4 150μA的低功耗關閉模式
5 亮度的數字和模擬控制
6 高電壓中斷顯示
7 共陰極LED顯示驅動
8 限制回轉電流的段驅動來減少EMI(MAX7221)
9 SPI, QSPI, MICROWIRE串行接口(MAX7221)
10 24腳的 DIP和 SO 封裝

8X32 LED點陣顯示模塊 MAX7219 輸出 共陰 5V 四位點陣模組

8X32 LED點陣顯示級聯模塊,MAX7219是一種集成化的串行輸入/輸出共陰極顯示驅動器,它連接微處理器與8位數字的7段數字LED顯示,也可以連接條線圖顯示器或者64個獨立的LED。其上包括一個片上的B型BCD編碼器、多路掃描回路,段字驅動器,而且還有一個8*8的靜態RAM用來存儲每一個數據。只有一個外部寄存器用來設置各個LED的段電流。一個方便的四線串行接口可以聯接所有通用的微處理器。每個數據可以尋址在更新時不需要改寫所有的顯示。MAX7219同樣允許用戶對每一個數據選擇編碼或者不編碼。整個設備包含一個150μA的低功耗關閉模式,模擬和數字亮度控制,一個掃描限制寄存器允許用戶顯示1-8位數據,還有一個讓所有LED發光的檢測模式。只需要3個IO口即可驅動1個點陣!點陣顯示時無閃爍!支持級聯!

 

8X32 LED點陣顯示模塊參考電原理圖

 

 

 

 

模塊參數:
1.單個模塊可以驅動一個8*8共陰點陣
2.模塊工作電壓:5V
3.模塊尺寸:長12.8厘米X寬3.2厘米X高1.3厘米
4.帶64個固定螺絲孔,孔徑3mm
5.模塊帶輸入輸出接口,支持多個模塊級聯


接線說明:
1.模塊左邊為輸入端口,右邊為輸出端口。
2.控制單個模塊時,只需要將輸入端口接到CPU
3.多個模塊級聯時,第1個模塊的輸入端接CPU,輸出端接第2個模塊的輸入端,第2個模塊的輸出端接第3個模塊的輸入端,以此類推...

  實驗開源代碼

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗九十九:8X32 LED點陣顯示模塊 MAX7219 輸出 共陰 5V 四位點陣模組

1、下載安裝庫:

GitHub | riyas-org/max7219 https://github.com/riyas-org/max7219

2、項目:應用多種函數,顯示字母,笑臉等圖案以及左向移動

3、連線:

VCC → 5V

GND → GND

DIN → D11

CS  → D12

CLK → D13

*/



#include <MaxMatrix.h>

int DIN = 11;  // DIN pin of MAX7219 module

int CLK = 13;  // CLK pin of MAX7219 module

int CS = 12;  // CS pin of MAX7219 module

int maxInUse = 1;

MaxMatrix m(DIN, CS, CLK, maxInUse); 

char A[] = {4, 8,

      B01111110,

      B00010001,

      B00010001,

      B01111110,

      };

char B[] = {4, 8,

      B01111111,

      B01001001,

      B01001001,

      B00110110,

      };

char smile01[] = {8, 8,

         B00111100,

         B01000010,

         B10010101,

         B10100001,

         B10100001,

         B10010101,

         B01000010,

         B00111100

         };

char smile02[] = {8, 8,

         B00111100,

         B01000010,

         B10010101,

         B10010001,

         B10010001,

         B10010101,

         B01000010,

         B00111100

         };

char smile03[] = {8, 8,

         B00111100,

         B01000010,

         B10100101,

         B10010001,

         B10010001,

         B10100101,

         B01000010,

         B00111100

         };



void setup() {

 m.init(); // MAX7219 initialization

 m.setIntensity(8); // initial led matrix intensity, 0-15

}



void loop() {

 // Seting the LEDs On or Off at x,y or row,column position

 m.setDot(6,2,true); 

 delay(1000);

 m.setDot(6,3,true);

 delay(1000);

 m.clear(); // Clears the display

 for (int i=0; i<8; i++){

  m.setDot(i,i,true);

  delay(300);

 }

 m.clear();

 // Displaying the character at x,y (upper left corner of the character)  

 m.writeSprite(2, 0, A);

 delay(1000);

 m.writeSprite(2, 0, B);

 delay(1000);

 m.writeSprite(0, 0, smile01);

 delay(1000);

 m.writeSprite(0, 0, smile02);

 delay(1000);

 m.writeSprite(0, 0, smile03);

 delay(1000);

 for (int i=0; i<8; i++){

  m.shiftLeft(false,false);

  delay(300);

 }

 m.clear();

}

   實驗開源代碼之二

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗九十九:8X32 LED點陣顯示模塊 MAX7219 輸出 共陰 5V 四位點陣模組

1、下載安裝庫:

GitHub | riyas-org/max7219 https://github.com/riyas-org/max7219

2、項目:程序中將所要顯示的圖型使用數組方式存放,主回圈中交錯顯示在 8x8 點陣

模塊上產生一個有趣的點陣動畫

3、連線:

VCC → 5V

GND → GND

DIN 接 D11 (MOSI)

CS 接 D10 (SS)

CLK 接 D13 (SCK)

*/



#include <SPI.h>

const byte sprite[2][8] = {

  { 0xf8, 0xbc, 0x15, 0x7e, 0x7e, 0x15, 0xbc, 0xf8 },  

  { 0xfc, 0x8e, 0x1b, 0x2e, 0x2e, 0x1b, 0x8e, 0xfc }  

};

const byte DECODEMODE = 0x09;

const byte INTENSITY = 0x0a;

const byte SCANLIMIT = 0x0b;

const byte SHUTDOWN = 0x0c;

const byte DISPLAYTEST = 0x0f;

void max7219(const byte reg, const byte data) {

 digitalWrite(SS, LOW);

 SPI.transfer(reg);

 SPI.transfer(data);

 digitalWrite(SS, HIGH);  

}



void setup() {

 SPI.begin();

 max7219(SCANLIMIT, 7);

 max7219(DECODEMODE, 0);

 max7219(INTENSITY, 2);

 max7219(DISPLAYTEST, 0);

 max7219(SHUTDOWN, 1);  

 for(byte i=0; i<8; i++) {

  max7219(i+1, 0);

 }

}  



void loop() {

 for(byte j=0; j<2; j++) {

  for(byte i=0; i<8; i++) {

   max7219(i+1, sprite[j]);

  }

 delay(500);

 }

}

  

 實驗開源代碼之三

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗九十九:8X32 LED點陣顯示模塊 MAX7219 輸出 共陰 5V 四位點陣模組

1、下載庫 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip

2、項目:在四個8x8屏間跳動的紅點(快速掃描所有點陣)

3、連線:

VCC → 5V

GND → GND

DIN 接 D11 (MOSI)

CS 接 D10 (SS)

CLK 接 D13 (SCK)

*/



#include <Sprite.h> // Sprite before Matrix

#include <Matrix.h>

const int numChips = 4;

//DIN, CLK, SS, #chips

Matrix myLeds = Matrix(11, 13, 10, numChips);

void setup() {

 myLeds.clear();

}

void loop() {

 byte x, y;

 // light one LED at a time, scanning left to right

 // and top to bottom... useful for testing the matrix

 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);

  }

 }

}

  

 實驗開源代碼之四

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

 實驗九十九:8X32 LED點陣顯示模塊 MAX7219 輸出 共陰 5V 四位點陣模組

1、下載庫 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip

2、項目:顯示字母

3、連線:

VCC → 5V

GND → GND

DIN 接 D11 (MOSI)

CS 接 D10 (SS)

CLK 接 D13 (SCK)

*/



#include <Sprite.h> // Sprite before Matrix

#include <Matrix.h>

//DIN, CLK, CS, #chips

Matrix myLeds = Matrix(11, 13, 10, 3);

Sprite letter_L = Sprite(5, 8,

 B11000,

 B11000,

 B11000,

 B11000,

 B11000,

 B11000,

 B11111,

 B11111

);

Sprite letter_E = Sprite(5, 8,

 B11111,

 B11111,

 B11000,

 B11110,

 B11110,

 B11000,

 B11111,

 B11111

);

Sprite letter_D = Sprite(6, 8,

 B111100,

 B111110,

 B110111,

 B110011,

 B110011,

 B110111,

 B111110,

 B111100

);

Sprite letter_S = Sprite(5, 8,

 B01110,

 B11111,

 B11000,

 B11110,

 B01111,

 B00011,

 B11111,

 B01110

);



void setup() {

 myLeds.clear();

 myLeds.setBrightness(0);

 myLeds.write(3, 0, letter_L);

 myLeds.write(10, 0, letter_E);

 myLeds.write(18, 0, letter_D);

 myLeds.write(26, 0, letter_S);

}

void loop() {

}

  實驗場景圖

 

Matrix庫的幾個函數

基本用法,僅限像素
Matrix myLeds = Matrix(DIN,CLK,LOAD,numChips);
使用您選擇的名稱創建Matrix對象的實例。DIN,CLK和LOAD是連接這些信號的引腳號。如果連接了多個單獨連接的MAX7219芯片,則可以創建多個對象。

myLeds。clear();
清除整個顯示屏。

myLeds。setBrightness(15);
設置顯示亮度,從0到15(最亮)。

myLeds。write(x,y,value);
更改單個像素。對於關閉,值應為LOW,對於on,值應為HIGH。

基本用法,使用Sprite
Sprite myIcon = Sprite(寬度,高度,B11000,B11000,B11111,B11111);
創建一個精靈對象。您可以根據需要創建任意數量的精靈,每個精靈都有一個唯一的名稱。寬度應與每個數據值中的位數匹配,高度應與數據值的數量匹配。

myLeds。write(x,y,myIcon);
在顯示屏上繪制一個閃爍的精靈。


Sprite庫允許創建與Matrix庫一起使用的圖像精靈

Sprite
啟動LCD庫。

width()
返回精靈的寬度(以像素為單位)。

height()
返回精靈的高度(以像素為單位)。

write()
將數據寫入精靈的x,y位置。

read()
返回存儲在sprite的x,y位置的數據。

實驗開源仿真編程(Linkboy V4.63)

 

 

 

 

 

實驗開源圖形編程(Mind+、Mixly、編玩邊學)

【花雕動手做】有趣好玩的音樂可視化系列小項目(08)---四位32段點陣屏
   項目之三:紅綠色32段級聯頻譜點陣屏燈(FFT算法)

   實驗開源代碼

/*

 【花雕動手做】有趣好玩的音樂可視化系列小項目(08)---四位32段點陣屏

 項目之三:紅綠色32段級聯頻譜點陣屏燈(FFT算法)

 接腳連線:MAX9814 接A0

 MAX7219 UNO

 VCC →→→→→ 5V

 GND →→→→→ GND

 DIN →→→→→ D11(數據,數據接收引腳)

 CS →→→→→ D10(負載,命令接收引腳)

 CLK →→→→→ D13(時鍾,時鍾引腳)

*/



#include <arduinoFFT.h>

#include <MD_MAX72xx.h>

#include <SPI.h>

MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 1);

arduinoFFT FFT = arduinoFFT();

double realComponent[64];

double imagComponent[64];

int spectralHeight[] = {0b00000000, 0b10000000, 0b11000000,

            0b11100000, 0b11110000, 0b11111000,

            0b11111100, 0b11111110, 0b11111111

            };

int index, c, value;

void setup()

{

 disp.begin();

 Serial.begin(9600);

}

void loop()

{

 int sensitivity = map(analogRead(A0), 0, 1023, 50, 100);

 Serial.println (analogRead(A0));

 for (int i = 0; i < 64; i++)

 {

  realComponent[i] = analogRead(A7) / sensitivity;

  imagComponent[i] = 0;

 }

 FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD);

 FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD);

 FFT.ComplexToMagnitude(realComponent, imagComponent, 64);

 for (int i = 0; i < 32; i++)

 {

  realComponent[i] = constrain(realComponent[i], 0, 80);

  realComponent[i] = map(realComponent[i], 0, 80, 0, 8);

  index = realComponent[i];

  value = spectralHeight[index];

  c = 31 - i;

  disp.setColumn(c, value);

 }

}

  

實驗場景動態圖

https://img.mydigit.cn/forum/202111/22/142941orny1mpjp1ktcdtr.gif

 

實驗視頻剪輯

https://v.youku.com/v_show/id_XNTgyMTc1NTk2OA==.html?spm=a2hcb.playlsit.page.1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM