找回密码
 立即注册

QQ登录

只需一步,快速开始

基础模块资料库

基于Arduino使用MAX7219点阵屏



产品介绍

MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。一个方便的四线串行接口可以联接通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器,允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。只需要3个IO口即可驱动1个点阵!点阵显示时无闪烁!支持级联!

63.jpg
(MAX7219点阵屏正面)

产品参数

  • 产品尺寸:32mm*32mm*14mm
  • 单个模块:可以驱动一个8*8共阴点阵
  • 工作电压:5V
  • 带4个螺丝孔:孔径3mm
  • 带输入/输出:接口,支持多个模块级联


使用方法

1.     模块左边为输入端口,右边为输出端口;
2.     控制单个模块时,只需要将输入端口接到CPU;
3.     多个模块级联时,第一个模块的输入端接CPU,输出端接第二个模块的输入端,第二个模块的输出端接第三个模块的输入端,以此类推。

接线方式

MAX7219点阵屏                   Arduino Nano
        VCC             <------>            5V
        GND            <------>          GND  
        DIN              <------>           D11
         CS                <------>           D9
        CLK               <------>          D13

64.jpg
(MAX7219点阵屏反面)

一块点阵屏使用方法
Mixly 图形化编程程序

点阵初始化设置,对应接线方式正确,因现在只使用一个点阵屏,所以水平点阵屏数值为1,竖直点阵屏为1。

65.png
(点阵初始化)

点阵图案通过打钩的方式确定要点亮的二极管,注意,不同的点阵图案,变量名不一样,如点阵先显示一个大爱心的图案,1秒后,显示小爱心图案。这里,两个点阵图案屏幕序号相同,但是数组变量不同,变量相同的情况下,程序会编译失败。

66.png

(点阵图案显示程序)

程序上传之后,点阵图案开始时隔1秒跳动变化。

VUE_20200512105908_cps[00_00_01--00_00_02].gif
(大爱心点阵图案)

程序实现代码

  1. #include <SPI.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Max72xxPanel.h>
  4. Max72xxPanel myMatrix = Max72xxPanel(9,1,1);
  5. uint8_t  LEDArray[8];
  6. const uint8_t A[8] PROGMEM ={0x00,0x18,0x3c,0x7e,0xff,0xff,0x66,0x00};
  7. const uint8_t B[8] PROGMEM ={0x00,0x00,0x18,0x3c,0x7e,0x24,0x00,0x00};
  8. void setup(){
  9. }
  10. void loop(){
  11.   memcpy_P (&LEDArray, &A, 8);
  12.   for(int index_i=0; index_i<8; index_i++)
  13.   {
  14.     for(int index_j=0*8; index_j<0*8+8; index_j++)
  15.     {
  16.       if((LEDArray[index_i]&0x01)>0)
  17.        myMatrix.drawPixel(index_j, 7-index_i,1);
  18.   else
  19.   myMatrix.drawPixel(index_j, 7-index_i,0);
  20.        LEDArray[index_i] = LEDArray[index_i]>>1;
  21.     }
  22.   }
  23.   myMatrix.write();
  24.   delay(1000);
  25.   memcpy_P (&LEDArray, &B, 8);
  26.   for(int index_i=0; index_i<8; index_i++)
  27.   {
  28.     for(int index_j=0*8; index_j<0*8+8; index_j++)
  29.     {
  30.       if((LEDArray[index_i]&0x01)>0)
  31.        myMatrix.drawPixel(index_j, 7-index_i,1);
  32.   else
  33.   myMatrix.drawPixel(index_j, 7-index_i,0);
  34.        LEDArray[index_i] = LEDArray[index_i]>>1;
  35.     }
  36.   }
  37.   myMatrix.write();
  38.   delay(1000);
  39. }
复制代码

多块点阵屏使用方法

点阵屏可多块连接使用,多块点阵屏连接使用,会造成图案乱码现象,原因是开机瞬间,电路中出现较多的紊乱信号,而MAX7219的引脚输入阻抗比较大,容易收到这些信号的影响,而且MAX7219内部电路在输入过载的情况下会出现类似运放阻塞的问题。解决方法是在MAX7219的Load引脚处接一个10K的电阻到地线,这样开机时的紊乱信号就不能在Load引脚处产生足够大的电压,这种方法能够100%解决绕线变压器电源和小功率开关电源的影响。但是当整机中有使用100W的大功率开关电源,则在Load引脚处接电阻,即使接1K电阻,也不能保证100%安全。这时,采用的方法是单独为 Max7219电路做一个软启动电源电路,只需要用一个Mosfet管,一个10K电阻和100uF电容就可以让Max7219在整机上电约100ms后才上电,实际测试,这种方案也是100%成功的。

68.jpg
(四块点阵屏连接)

Mixly 图形化编程程序

四块点阵屏连接使用时,在点阵初始化中,水平点阵屏数改为4,数值点屏数不变,屏幕序号则是从0开始,第二个连接的点阵屏屏幕序号为1,其他两个点阵屏屏幕序号同理。用四块点阵屏,设计一个5的点数,主要屏幕序号、变量的不同,根据连接角度,设计点阵图案。

69.png
(点数5程序)

程序实现代码

  1. #include <SPI.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Max72xxPanel.h>
  4. Max72xxPanel myMatrix = Max72xxPanel(9,4,1);
  5. uint8_t  LEDArray[8];
  6. const uint8_t Q[8] PROGMEM ={0xc0,0xc0,0x00,0x1e,0x1e,0x1e,0x1e,0x00};
  7. const uint8_t R[8] PROGMEM ={0x00,0x1e,0x1e,0x1e,0x1e,0x00,0xc0,0xc0};
  8. const uint8_t S[8] PROGMEM ={0xc0,0xc0,0x00,0x1e,0x1e,0x1e,0x1e,0x00};
  9. const uint8_t T[8] PROGMEM ={0x00,0x1e,0x1e,0x1e,0x1e,0x00,0xc0,0xc0};
  10. void setup(){
  11. }
  12. void loop(){
  13.   myMatrix.setIntensity(10);
  14.   memcpy_P (&LEDArray, &Q, 8);
  15.   for(int index_i=0; index_i<8; index_i++)
  16.   {
  17.     for(int index_j=0*8; index_j<0*8+8; index_j++)
  18.     {
  19.       if((LEDArray[index_i]&0x01)>0)
  20.        myMatrix.drawPixel(index_j, 7-index_i,1);
  21.   else
  22.   myMatrix.drawPixel(index_j, 7-index_i,0);
  23.        LEDArray[index_i] = LEDArray[index_i]>>1;
  24.     }
  25.   }
  26.   myMatrix.write();
  27.   memcpy_P (&LEDArray, &R, 8);
  28.   for(int index_i=0; index_i<8; index_i++)
  29.   {
  30.     for(int index_j=1*8; index_j<1*8+8; index_j++)
  31.     {
  32.       if((LEDArray[index_i]&0x01)>0)
  33.        myMatrix.drawPixel(index_j, 7-index_i,1);
  34.   else
  35.   myMatrix.drawPixel(index_j, 7-index_i,0);
  36.        LEDArray[index_i] = LEDArray[index_i]>>1;
  37.     }
  38.   }
  39.   myMatrix.write();
  40.   memcpy_P (&LEDArray, &S, 8);
  41.   for(int index_i=0; index_i<8; index_i++)
  42.   {
  43.     for(int index_j=2*8; index_j<2*8+8; index_j++)
  44.     {
  45.       if((LEDArray[index_i]&0x01)>0)
  46.        myMatrix.drawPixel(index_j, 7-index_i,1);
  47.   else
  48.   myMatrix.drawPixel(index_j, 7-index_i,0);
  49.        LEDArray[index_i] = LEDArray[index_i]>>1;
  50.     }
  51.   }
  52.   myMatrix.write();
  53.   memcpy_P (&LEDArray, &T, 8);
  54.   for(int index_i=0; index_i<8; index_i++)
  55.   {
  56.     for(int index_j=3*8; index_j<3*8+8; index_j++)
  57.     {
  58.       if((LEDArray[index_i]&0x01)>0)
  59.        myMatrix.drawPixel(index_j, 7-index_i,1);
  60.   else
  61.   myMatrix.drawPixel(index_j, 7-index_i,0);
  62.        LEDArray[index_i] = LEDArray[index_i]>>1;
  63.     }
  64.   }
  65.   myMatrix.write();
  66. }
复制代码

11.jpg
(显示点数5图案)


分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册