zoukankan      html  css  js  c++  java
  • 「雕爷学编程」Arduino动手做(22)——8X8 LED点阵MAX7219屏

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

      

  • 相关阅读:
    把excel导入的自定义时间改成yyyyMMdd
    sql多表查询时怎么获取查到的字段
    select 和 input 的不可编辑,input隐藏
    关闭dialog(lhgdialog)
    ajax 和 post 传多个参数值具体怎么写
    弹出提示框,对话框
    function方法中this的用法
    combobox获取值
    easyui-panel 滚动条禁用
    字符串用逗号隔开;有逗号的字符串遍历
  • 原文地址:https://www.cnblogs.com/eagler8/p/11441587.html
Copyright © 2011-2022 走看看