37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒於本人手頭積累了一些傳感器和模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手試試做實驗,不管成功與否,都會記錄下來---小小的進步或是搞不定的問題,希望能夠拋磚引玉。
【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
實驗二十二:MAX7219點陣顯示模塊(8X8 LED共陰屏幕)
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內部結構圖
作為一塊專用的LED顯示驅動芯片,MAX7219能夠以動態形式驅動8位數碼顯示器。還可以用 n 片MAX7219進行級連,以驅動8 * n位數碼顯示。MAX7219與數碼顯示器的之間的電路極為簡單,幾乎連限流電阻都不用。MAX7219與單片機之間也僅僅需要連接3條引線。當單片機把數據送到MAX7219后,它就可以獨立的進行動態掃描顯示,無需單片機再進行干預。對於單片機來說,這些數碼顯示器,看起來似乎都是在進行靜態顯示,可以說是驅動多位數碼顯示器的最佳選擇。
MAX7219各引腳的功能:
DIN:串行數據輸入端
DOUT:串行數據輸出端,用於級連擴展
LOAD:裝載數據輸入
CLK:串行時鍾輸入
DIG0~DIG7:8位LED位選線,從共陰極LED中吸入電流
SEG A~SEG G DP 7段驅動和小數點驅動
ISET: 通過一個10k電阻和Vcc相連,設置段電流
技術參數:
種類: LED顯示驅動器
系列: MAX7219
數位數量: 8
片段數量: 64
安裝風格: SMD/SMT
封裝 / 箱體: SOIC-Wide-24
工作電源電壓: 4 V to 5.5 V
電源電流— 大值: 330 mA
小工作溫度: - 40 C
大工作溫度: + 85 C
封裝: Reel或Tube
高度: 2.35 mm
長度: 15.6 mm
產品: LED Display Drivers
寬度: 7.6 mm
高電平輸出電流: - 2 mA
低電平輸出電流: 5 mA
Pd-功率耗散: 941 mW
工廠包裝數量: 1000
零件號別名: MAX7219
單位重量: 734.500 mg
功能特點:
1 10MHz連續串行口
2 獨立的LED段控制
3 數字的譯碼與非譯碼選擇
4 150μA的低功耗關閉模式
5 亮度的數字和模擬控制
6 高電壓中斷顯示
7 共陰極LED顯示驅動
8 限制回轉電流的段驅動來減少EMI(MAX7221)
9 SPI, QSPI, MICROWIRE串行接口(MAX7221)
10 24腳的 DIP和 SO 封裝
MAX7219的應用電路
MAX7219點陣顯示模塊(8X8 LED共陰屏幕)
模塊參數:
1.單個模塊可以驅動一個8*8共陰點陣
2.模塊工作電壓:5V
3.模塊尺寸:長5厘米X寬3.2厘米X高1.5厘米
4.帶4個固定螺絲孔,孔徑3mm,可使用M3銅柱固定
5.模塊帶輸入輸出接口,支持多個模塊級聯
模塊電原理圖
8*8 發光管點陣 1088AS
3mm共陰 8X8 高亮 紅色
★ 能在低電壓、小電流條件下驅動發光
★ 發光響應時間極短(<0.1μs),高頻特性好,單色性好,亮度高
★ 體積小,重量輕,抗沖擊性能好.固態封裝,封裝方式為灌膠型,穩定性高
★ 壽命長,使用壽命在5萬小時以上
★ 可連續掃描驅動各字節
★ 良好的顯示效果、視角寬
★ 推薦恆流使用,恆壓會出現亮度不均勻現象
★ 表面有保護膜的產品,可以在使用前撕下來
★ 焊接溫度: 260℃ 停留時間最長5秒
★ 當工作溫度高於25℃時,Ifm,ifp和Id必須降低;電流降低率是-036mA/℃(直流驅動),或-0.86mA/℃(脈沖驅動)功耗率是-0.75mW/℃。產品的工作電流不能大於對應工作溫度條件Ifm或Ifp的60%。
★ 藍色,翠綠色,白色請采取防靜電措施
接線方式:
(在IN方向的針腳)
Arduino Uno --- MAX7219
5V <---> VCC
GND <---> GND
12 <---> DIN
11 <---> CS
10 <---> CLK
實驗接線:
1.模塊左邊為輸入端口,右邊為輸出端口。
2.控制單個模塊時,只需要將輸入端口接到單片機
3.多個模塊級聯時,第1個模塊的輸入端接單片機,輸出端接第2個模塊的輸入端,第2個模塊的輸出端接第3個模塊的輸入端,以此類推...
/* 【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真) 實驗二十二:MAX7219點陣顯示模塊(8X8 LED共陰屏幕) 安裝庫:IDE--工具--管理庫--搜索“LedControl”--安裝 實驗源代碼 */ #include <LedControl.h> int DIN = 12; int CS = 11; int CLK = 10; byte e[8]= {0x7C,0x7C,0x60,0x7C,0x7C,0x60,0x7C,0x7C}; //E byte d[8]= {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78}; //D byte u[8]= {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x7E}; //U byte c[8]= {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E}; //C byte eight[8]= {0x7E,0x7E,0x66,0x7E,0x7E,0x66,0x7E,0x7E}; //8 byte s[8]= {0x7E,0x7C,0x60,0x7C,0x3E,0x06,0x3E,0x7E}; //S byte dot[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18}; //. byte o[8]= {0x7E,0x7E,0x66,0x66,0x66,0x66,0x7E,0x7E}; //O byte m[8]= {0xE7,0xFF,0xFF,0xDB,0xDB,0xDB,0xC3,0xC3}; //M LedControl lc=LedControl(DIN,CLK,CS,4); void setup(){ lc.shutdown(0,false); //啟動時,MAX72XX處於省電模式 lc.setIntensity(0,8); //將亮度設置為最大值 lc.clearDisplay(0); //清除顯示 } void loop(){ byte smile[8]= {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};//笑臉 byte neutral[8]= {0x3C,0x42,0xA5,0x81,0xBD,0x81,0x42,0x3C};//標准臉 printByte(eight);//顯示8 delay(1000);//延時1秒 printByte(neutral);//顯示標准臉 delay(1000); } //點陣顯示函數 void printByte(byte character []) { int i = 0; for(i=0;i<8;i++) { lc.setRow(0,i,character); } }
圖形編程
仿真編程
/* 【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真) 實驗二十二:MAX7219點陣顯示模塊(8X8 LED共陰) 項目:全屏亮暗各1秒 引腳定義 DIN = D11 CS = D10 CLK = D13 */ #include <SPI.h> const byte sprite[2][8] = { {B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111}, {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, }; 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(1000); } }
/* 【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真) 實驗二十二:MAX7219點陣顯示模塊(8X8 LED共陰) 項目四:全屏紅心跳動 引腳定義 DIN = D11 CS = D10 CLK = D13 */ #include <SPI.h> const byte sprite[2][8] = { { 0x00, 0x66, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C, 0x18 }, { 0x00, 0x00, 0x24, 0x7E, 0x7E, 0x3C, 0x18, 0x00 } }; 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][i]); } delay(500); } }