【雕爷学编程】Arduino动手做(99)---8X32 LED点阵模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组

0-.jpg

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发光的检测模式。

01.jpg

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时用此端方便扩展。

02 (1).jpg

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 封装

03.jpg

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个点阵!点阵显示时无闪烁!支持级联!

04.jpg

8X32 LED点阵显示模块参考电原理图

07.jpg
08.jpg
09.jpg
10.jpg

模块参数:
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个模块的输入端,以此类推...

11.jpg
12 (1).jpg

实验开源代码

/*

【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() {

}

实验场景图


15.jpg

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)


19.jpg
21.jpg
22.jpg
23.jpg
24.jpg
26.gif

实验开源图形编程(Mind+、Mixly、编玩边学)


16.jpg
18.jpg

【花雕动手做】有趣好玩的音乐可视化系列小项目(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容