Arduino 学习笔记 | 单片机控制驱动MAX7219 8*8 LED点阵显示模块

第一部分

8 x 8点阵模块

不带MAX7219驱动的8×8 點矩陣LED(如下图),从左侧有写字的一侧开始,L接正电,C接负电。

  • 列L (1、2、3、4、5、6、7、8)
  • 行C(1、2、3、4、5、6、7、8)
    不带MAX7219驱动的8*8LED模块

Arduino接线

因为Arduino Uno引脚有限,所以就只接了6个引脚做6*6LED灯示例。

在这里插入图片描述

实验一: 点亮(L4,C1)LED灯

注意:PIN0 、PIN1引脚为串口UART下载程序引脚,下载程序是先拔掉导线。

int line[6] = {
    
    0,1,2,3,4,5};
int col [6] = {
    
    8,9,10,11,12,13};
void setup() {
    
    


  Serial.begin(9600);
  
  for(int i=0;i<6;i++)
  {
    
    
    pinMode(line[i],OUTPUT);//输出模式
    pinMode(col[i],OUTPUT);

   // 注意: L为 HIGH时,C为LOW时LED点亮
    digitalWrite(line[i],LOW);//初始化关闭所有LED灯  
    digitalWrite(col[i],HIGH);//

    Serial.print(line[i]);
    Serial.print("-");
      
    }

}

void loop() {
    
    

  digitalWrite(line[3],HIGH);//点亮点阵上的(L4,C1)LED灯
  digitalWrite(col[0],LOW);

}

在这里插入图片描述
实验二: 点亮 “X” 形状LED灯

//定义6 * 6的二维数组appear[6][6]  二维数组格式: 阵列[][] appear[c][l]   
//1为点亮LED,0为熄灭LED。
int appear[6][6] = {
    
     {
    
    1,0,0,0,0,1},
                     {
    
    0,1,0,0,1,0},
                     {
    
    0,0,1,1,0,0},
                     {
    
    0,0,1,1,0,0},
                     {
    
    0,1,0,0,1,0},
                     {
    
    1,0,0,0,0,1}};



int col [6] = {
    
    8,9,10,11,12,13};//一维数组定义 col 的6个脚位 (行)
int line[6] = {
    
    0,1,2,3,4,5};//一维数组定义 line 的6个脚位   (列)

//二维数组定义 阵列[行][列]appear[c][l]   1为点亮LED,0为熄灭LED。
int appear[6][6] = {
    
     {
    
    1,0,0,0,0,1},
                     {
    
    0,1,0,0,1,0},
                     {
    
    0,0,1,1,0,0},
                     {
    
    0,0,1,1,0,0},
                     {
    
    0,1,0,0,1,0},
                     {
    
    1,0,0,0,0,1}};
void setup() {
    
    


  Serial.begin(9600);
  
  for(int i=0;i<6;i++)
  {
    
    
    pinMode(col[i],OUTPUT);//输出模式
    pinMode(line[i],OUTPUT);


   // 注意: L为 HIGH时,C为LOW时LED点亮   
    digitalWrite(col[i],HIGH);//初始化关闭LED灯  
    digitalWrite(line[i],LOW);//



    }

}

void loop() {
    
    
//  digitalWrite(line[3],HIGH);//点亮点阵上的(L4,C1)LED灯
//  digitalWrite(col[0],LOW);

    for(int c=0;c<6;c++){
    
    
      for(int l=0;l<6;l++){
    
    

        if(appear[c][l]==1)
        {
    
    
          digitalWrite(col[c],LOW);//点亮c行,l列的LED灯
          digitalWrite(line[l],HIGH);

          }          
           Serial.print(appear[c][l]);//打印二维数组的第c行,l列的数值
          
//         Serial.print(c);//打印行数
//         Serial.print(l);//打印列数
           Serial.print("  ");
         
        }
        Serial.print("\n");//换行
         
      }

      while(1)
      {
    
    
        ;
        }
}

在这里插入图片描述


第二部分

MAX7219简介

在这里插入图片描述

MAX7219 是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。
在这里插入图片描述
一个方便的四线串行接口可以联接通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。

扫描二维码关注公众号,回复: 11848461 查看本文章

一个方便的四线串行接口可以联接通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

只需要3个IO口即可驱动1个点阵!点阵显示时无闪烁!支持级联!

接线说明:

  • 1.模块左边为输入端口,右边为输出端口。

  • 2.控制单个模块时,只需要将输入端口接到CPU

  • 3.多个模块级联时,第1个模块的输入端接CPU,输出端接第2个模块的输入端,第2个模块的输出端接第3个模块的输入端,以此类推…

以Arduino Nano为例:

  • VCC → 5V
  • GND → GND
  • DIN → D11
  • CS → D10
  • CLK → D13
    在这里插入图片描述
    正如您在上面的布线方案中看到的那样,仅需要5条线,并且我们使用Arduino Nano(也可与UNO一起使用)。如上图所示连接这些电线,将USB电缆连接到Arduino Nano和计算机。现在我们准备加载代码,但是首先我们需要为MAX7219-Display安装必要的。请在下面查看操作方法:

在这里插入图片描述
在Arduino IDE中下载库文件的时候,报错。

另辟蹊径,在YouTube上找到了一个8*8LED数码管的教程视频地址GitHub获取库文件。

实验一:

//Viral Science  www.viralsciencecreativity.com  www.youtube.com/c/viralscience
//LED 8x8 Matrix Display DEMO
//Libary link:https://github.com/wayoda/LedControl
//Chinse wedsite: CSDN -> Naiva

#include <LedControl.h>
int DIN = 11;
int CS =  10;
int CLK = 13;

LedControl lc=LedControl(DIN,CLK,CS,0);

void setup(){
    
    
 lc.shutdown(0,false);       
 lc.setIntensity(0,15);      //Adjust the brightness maximum is 15
 lc.clearDisplay(0);    
}

void loop(){
    
     
    
    //Facial Expression
    byte smile[8]=   {
    
    0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};
    byte neutral[8]= {
    
    0x3C,0x42,0xA5,0x81,0xBD,0x81,0x42,0x3C};
    byte sad[8]=   {
    
    0x3C,0x42,0xA5,0x81,0x99,0xA5,0x42,0x3C};
   
    //Arrow
    byte arrow_up[8]= {
    
    0x18,0x3C,0x7E,0xFF,0x18,0x18,0x18,0x18};
    byte arrow_down[8]= {
    
    0x18,0x18,0x18,0x18,0xFF,0x7E,0x3C,0x18};
   
    
    //Alternate Pattern
    byte d1[8]= {
    
    0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55};
    byte d2[8]= {
    
    0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA};
    
    //Moving car
    byte b1[8]= {
    
    0x00,0x00,0x00,0x00,0x18,0x3C,0x18,0x3C};//8*8LED点阵 取模软件生成
    byte b2[8]= {
    
    0x00,0x00,0x00,0x18,0x3C,0x18,0x3C,0x00};
    byte b3[8]= {
    
    0x00,0x00,0x18,0x3C,0x18,0x3C,0x00,0x00};
    byte b4[8]= {
    
    0x00,0x18,0x3C,0x18,0x3C,0x00,0x00,0x00};
    byte b5[8]= {
    
    0x18,0x3C,0x18,0x3C,0x00,0x00,0x00,0x00};
    byte b6[8]= {
    
    0x3C,0x18,0x3C,0x00,0x00,0x00,0x00,0x18};
    byte b7[8]= {
    
    0x18,0x3C,0x00,0x00,0x00,0x00,0x18,0x3C};
    byte b8[8]= {
    
    0x3C,0x00,0x00,0x00,0x00,0x18,0x3C,0x18};


//Moving car
    printByte(b1);
    delay(50);
    printByte(b2);
    delay(50);
    printByte(b3);
    delay(50);
    printByte(b4);
    delay(50);
    printByte(b5);
    delay(50);
    printByte(b6);
    delay(50);
    printByte(b7);
    delay(50);
    printByte(b8);
    delay(50);

//alternate pattern
    printByte(d1);
    delay(100);

    printByte(d2);
    delay(100);

//Arrow
    printByte(arrow_up);
    delay(2000);

    printByte(arrow_down);
    delay(2000);

   
//Facial Expression   
    printByte(smile);
     
    delay(1000);

    printByte(neutral);
    
    delay(1000);

    printByte(sad);    

    delay(1000);
   
 
}

void printByte(byte character [])
{
    
    
  int i = 0;
  for(i=0;i<8;i++)
  {
    
    
    lc.setRow(0,i,character[i]);
  }
}

在这里插入图片描述

在这里插入图片描述

本文资料下载
~~密码WeChat :Zero903828673 ~~


参考资料

猜你喜欢

转载自blog.csdn.net/Naiva/article/details/105330435
今日推荐