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

2022-2-19 13:51 2024 27 6 分类: MCU/ 嵌入式 文集: 雕爷学编程

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

  实验开源代码

  1. /*
  2. 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3. 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组
  4. 1、下载安装库:
  5. GitHub | riyas-org/max7219 https://github.com/riyas-org/max7219
  6. 2、项目:应用多种函数,显示字母,笑脸等图案以及左向移动
  7. 3、连线:
  8. VCC → 5V
  9. GND → GND
  10. DIN → D11
  11. CS → D12
  12. CLK → D13
  13. */
  14. #include <MaxMatrix.h>
  15. int DIN = 11; // DIN pin of MAX7219 module
  16. int CLK = 13; // CLK pin of MAX7219 module
  17. int CS = 12; // CS pin of MAX7219 module
  18. int maxInUse = 1;
  19. MaxMatrix m(DIN, CS, CLK, maxInUse);
  20. char A[] = {4, 8,
  21. B01111110,
  22. B00010001,
  23. B00010001,
  24. B01111110,
  25. };
  26. char B[] = {4, 8,
  27. B01111111,
  28. B01001001,
  29. B01001001,
  30. B00110110,
  31. };
  32. char smile01[] = {8, 8,
  33. B00111100,
  34. B01000010,
  35. B10010101,
  36. B10100001,
  37. B10100001,
  38. B10010101,
  39. B01000010,
  40. B00111100
  41. };
  42. char smile02[] = {8, 8,
  43. B00111100,
  44. B01000010,
  45. B10010101,
  46. B10010001,
  47. B10010001,
  48. B10010101,
  49. B01000010,
  50. B00111100
  51. };
  52. char smile03[] = {8, 8,
  53. B00111100,
  54. B01000010,
  55. B10100101,
  56. B10010001,
  57. B10010001,
  58. B10100101,
  59. B01000010,
  60. B00111100
  61. };
  62. void setup() {
  63. m.init(); // MAX7219 initialization
  64. m.setIntensity(8); // initial led matrix intensity, 0-15
  65. }
  66. void loop() {
  67. // Seting the LEDs On or Off at x,y or row,column position
  68. m.setDot(6,2,true);
  69. delay(1000);
  70. m.setDot(6,3,true);
  71. delay(1000);
  72. m.clear(); // Clears the display
  73. for (int i=0; i<8; i++){
  74. m.setDot(i,i,true);
  75. delay(300);
  76. }
  77. m.clear();
  78. // Displaying the character at x,y (upper left corner of the character)
  79. m.writeSprite(2, 0, A);
  80. delay(1000);
  81. m.writeSprite(2, 0, B);
  82. delay(1000);
  83. m.writeSprite(0, 0, smile01);
  84. delay(1000);
  85. m.writeSprite(0, 0, smile02);
  86. delay(1000);
  87. m.writeSprite(0, 0, smile03);
  88. delay(1000);
  89. for (int i=0; i<8; i++){
  90. m.shiftLeft(false,false);
  91. delay(300);
  92. }
  93. m.clear();
  94. }

 实验开源代码之二

  1. /*
  2. 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3. 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组
  4. 1、下载安装库:
  5. GitHub | riyas-org/max7219 https://github.com/riyas-org/max7219
  6. 2、项目:程序中将所要显示的图型使用数组方式存放,主回圈中交错显示在 8x8 点阵
  7. 模块上产生一个有趣的点阵动画
  8. 3、连线:
  9. VCC → 5V
  10. GND → GND
  11. DIN 接 D11 (MOSI)
  12. CS 接 D10 (SS)
  13. CLK 接 D13 (SCK)
  14. */
  15. #include <SPI.h>
  16. const byte sprite[2][8] = {
  17. { 0xf8, 0xbc, 0x15, 0x7e, 0x7e, 0x15, 0xbc, 0xf8 },
  18. { 0xfc, 0x8e, 0x1b, 0x2e, 0x2e, 0x1b, 0x8e, 0xfc }
  19. };
  20. const byte DECODEMODE = 0x09;
  21. const byte INTENSITY = 0x0a;
  22. const byte SCANLIMIT = 0x0b;
  23. const byte SHUTDOWN = 0x0c;
  24. const byte DISPLAYTEST = 0x0f;
  25. void max7219(const byte reg, const byte data) {
  26. digitalWrite(SS, LOW);
  27. SPI.transfer(reg);
  28. SPI.transfer(data);
  29. digitalWrite(SS, HIGH);
  30. }
  31. void setup() {
  32. SPI.begin();
  33. max7219(SCANLIMIT, 7);
  34. max7219(DECODEMODE, 0);
  35. max7219(INTENSITY, 2);
  36. max7219(DISPLAYTEST, 0);
  37. max7219(SHUTDOWN, 1);
  38. for(byte i=0; i<8; i++) {
  39. max7219(i+1, 0);
  40. }
  41. }
  42. void loop() {
  43. for(byte j=0; j<2; j++) {
  44. for(byte i=0; i<8; i++) {
  45. max7219(i+1, sprite[j]);
  46. }
  47. delay(500);
  48. }
  49. }

 实验开源代码之三

  1. /*
  2. 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3. 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组
  4. 1、下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip
  5. 2、项目:在四个8x8屏间跳动的红点(快速扫描所有点阵)
  6. 3、连线:
  7. VCC → 5V
  8. GND → GND
  9. DIN 接 D11 (MOSI)
  10. CS 接 D10 (SS)
  11. CLK 接 D13 (SCK)
  12. */
  13. #include <Sprite.h> // Sprite before Matrix
  14. #include <Matrix.h>
  15. const int numChips = 4;
  16. //DIN, CLK, SS, #chips
  17. Matrix myLeds = Matrix(11, 13, 10, numChips);
  18. void setup() {
  19. myLeds.clear();
  20. }
  21. void loop() {
  22. byte x, y;
  23. // light one LED at a time, scanning left to right
  24. // and top to bottom... useful for testing the matrix
  25. for (y=0; y<8; y++) {
  26. for (x=0; x<(numChips * 8); x++) {
  27. myLeds.write(x, y, HIGH);
  28. delay(20);
  29. myLeds.write(x, y, LOW);
  30. }
  31. }
  32. }

 实验开源代码之四

  1. /*
  2. 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3. 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组
  4. 1、下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip
  5. 2、项目:显示字母
  6. 3、连线:
  7. VCC → 5V
  8. GND → GND
  9. DIN 接 D11 (MOSI)
  10. CS 接 D10 (SS)
  11. CLK 接 D13 (SCK)
  12. */
  13. #include <Sprite.h> // Sprite before Matrix
  14. #include <Matrix.h>
  15. //DIN, CLK, CS, #chips
  16. Matrix myLeds = Matrix(11, 13, 10, 3);
  17. Sprite letter_L = Sprite(5, 8,
  18. B11000,
  19. B11000,
  20. B11000,
  21. B11000,
  22. B11000,
  23. B11000,
  24. B11111,
  25. B11111
  26. );
  27. Sprite letter_E = Sprite(5, 8,
  28. B11111,
  29. B11111,
  30. B11000,
  31. B11110,
  32. B11110,
  33. B11000,
  34. B11111,
  35. B11111
  36. );
  37. Sprite letter_D = Sprite(6, 8,
  38. B111100,
  39. B111110,
  40. B110111,
  41. B110011,
  42. B110011,
  43. B110111,
  44. B111110,
  45. B111100
  46. );
  47. Sprite letter_S = Sprite(5, 8,
  48. B01110,
  49. B11111,
  50. B11000,
  51. B11110,
  52. B01111,
  53. B00011,
  54. B11111,
  55. B01110
  56. );
  57. void setup() {
  58. myLeds.clear();
  59. myLeds.setBrightness(0);
  60. myLeds.write(3, 0, letter_L);
  61. myLeds.write(10, 0, letter_E);
  62. myLeds.write(18, 0, letter_D);
  63. myLeds.write(26, 0, letter_S);
  64. }
  65. void loop() {
  66. }

实验场景图

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算法)

   实验开源代码

  1. /*
  2. 【花雕动手做】有趣好玩的音乐可视化系列小项目(08)---四位32段点阵屏
  3. 项目之三:红绿色32段级联频谱点阵屏灯(FFT算法)
  4. 接脚连线:MAX9814 接A0
  5. MAX7219 UNO
  6. VCC →→→→→ 5V
  7. GND →→→→→ GND
  8. DIN →→→→→ D11(数据,数据接收引脚)
  9. CS →→→→→ D10(负载,命令接收引脚)
  10. CLK →→→→→ D13(时钟,时钟引脚)
  11. */
  12. #include <arduinoFFT.h>
  13. #include <MD_MAX72xx.h>
  14. #include <SPI.h>
  15. MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 1);
  16. arduinoFFT FFT = arduinoFFT();
  17. double realComponent[64];
  18. double imagComponent[64];
  19. int spectralHeight[] = {0b00000000, 0b10000000, 0b11000000,
  20. 0b11100000, 0b11110000, 0b11111000,
  21. 0b11111100, 0b11111110, 0b11111111
  22. };
  23. int index, c, value;
  24. void setup()
  25. {
  26. disp.begin();
  27. Serial.begin(9600);
  28. }
  29. void loop()
  30. {
  31. int sensitivity = map(analogRead(A0), 0, 1023, 50, 100);
  32. Serial.println (analogRead(A0));
  33. for (int i = 0; i < 64; i++)
  34. {
  35. realComponent[i] = analogRead(A7) / sensitivity;
  36. imagComponent[i] = 0;
  37. }
  38. FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  39. FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD);
  40. FFT.ComplexToMagnitude(realComponent, imagComponent, 64);
  41. for (int i = 0; i < 32; i++)
  42. {
  43. realComponent[i] = constrain(realComponent[i], 0, 80);
  44. realComponent[i] = map(realComponent[i], 0, 80, 0, 8);
  45. index = realComponent[i];
  46. value = spectralHeight[index];
  47. c = 31 - i;
  48. disp.setColumn(c, value);
  49. }
  50. }

实验场景动态图

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


实验视频剪辑

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


作者: 雕爷学编程, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3894459.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

lyyinhe_xi 2022-3-3 21:47

牛????

curton 2022-2-21 12:02

雕爷出品
必是经典

curton 2022-2-21 12:01

学习了
相关推荐阅读
雕爷学编程 2023-06-20 08:52
【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-18 14:52
【雕爷学编程】Arduino动手做(116)---五向导航按键模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-18 13:23
【雕爷学编程】Arduino动手做(115)---HB100多普勒雷达模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-18 11:10
【雕爷学编程】Arduino动手做(114)---US-015高分辨超声波模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-17 09:10
【雕爷学编程】Arduino动手做(113)---5110液晶屏模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-17 06:36
【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
EE直播间
更多
我要评论
3
27
关闭 站长推荐上一条 /3 下一条