Arduino Uno 使用MAX7219驱动单个8*8点阵LED模块

 

还记得之前做的一个怦然心动的8*8点阵实验吗?

很多小伙伴都会觉得,插口都用完了还能用其他的功能吗?

 

现在使用MAX7219这个驱动模块

 

只占用3个IO口,就可以控制8*8点阵的显示,非常实用,简单。

 

 问题注意:

 

① 接线的时候,注意方向,在IN的方向接线(输入)

② LED的方向也要注意,如果显示不正常,请转变下安插的方向。

 

实验效果

 

BOM表

Arduino Uno   x1

MAX7219 LED 8*8点阵模块     x1

跳线若干

 

接线方式

                                  在IN方向的针脚

Arduino Uno    ---     MAX7219

5V                <--->              VCC

GND           <--->              GND

12               <--->              DIN

11               <--->              CS

10               <--->             CLK

 

开源程序

先下载库文件

https://github.com/wayoda/LedControl

把下载的库文件夹存放在Arduino 安装目录的libraries库文件夹

程序&库&软件 打包下载:https://u16460183.ctfile.com/fs/16460183-296052687

文件夹说明:

LedControl-master   —— MAX7219库(请复制在Arduino的库目录里)

MAX7219 8x8点阵软件 

LS_MAX7219_8x8 —— 主程序

 

#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[i]);
  }
}

 

 

 

 

 

 

 

  • 22
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
好的,下面是使用Arduino按键控制MAX7219芯片8*8点阵倒数计时的基本步骤: 1. 连接MAX7219芯片和ArduinoMAX7219芯片的数据线(DIN)、时钟线(CLK)和使能线(CS)连接到Arduino的数字引脚上。具体的引脚可以根据你所使用MAX7219模块来确定。同时,还需要将Arduino的电源和MAX7219模块的电源连接。 2. 编写代码 在Arduino IDE中打开一个新的Sketch,然后编写代码。首先需要定义MAX7219芯片的引脚,以及按键的引脚。接着,需要定义一个8x8的数组来存储点阵上的图案。然后,需要使用一个计时器来实现倒数计时功能,每当计时器的时间到达一定值时,就需要在数组中修改对应的元素值,然后将数组中的值写入到MAX7219模块中。最后,需要使用一个循环来定时更新MAX7219模块的状态。 下面是一个示例代码: ``` #include <LedControl.h> // 定义MAX7219芯片引脚 const int DIN_PIN = 10; const int CLK_PIN = 11; const int CS_PIN = 12; // 定义按键引脚 const int BUTTON_PIN = 2; // 初始化MAX7219芯片 LedControl lc = LedControl(DIN_PIN, CLK_PIN, CS_PIN, 1); // 定义8x8的数组 int matrix[8][8] = { {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; // 定义计时器 unsigned long previousMillis = 0; const long interval = 1000; // 每秒更新一次 void setup() { // 初始化MAX7219芯片 lc.shutdown(0, false); lc.setIntensity(0, 8); lc.clearDisplay(0); // 设置按键引脚为输入模式 pinMode(BUTTON_PIN, INPUT); } void loop() { // 每隔一段时间更新MAX7219模块的状态 unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; updateMatrix(); } // 检测按键是否按下 if (digitalRead(BUTTON_PIN) == HIGH) { // 重置倒数计时 resetCountdown(); } } void updateMatrix() { // 获取当前的倒数时间 int countdown = getCountdown(); // 将倒数时间转换成8x8的图案 for (int row = 0; row < 8; row++) { for (int col = 0; col < 8; col++) { if (countdown % 2 == 1) { matrix[row][col] = 1; } else { matrix[row][col] = 0; } countdown /= 2; } } // 更新MAX7219模块的状态 for (int row = 0; row < 8; row++) { for (int col = 0; col < 8; col++) { lc.setLed(0, row, col, matrix[row][col]); } } } int getCountdown() { // 在这里获取倒数时间,可以从外部传入或者通过其他方式获取 return 60; // 假设倒数时间为60秒 } void resetCountdown() { // 在这里进行倒数计时的重置,可以通过外部传入或者其他方式实现 } ``` 这个示例代码使用LedControl库来驱动MAX7219模块。在setup()函数中,初始化MAX7219模块和按键,并将点阵数组中的所有元素置为0。在loop()函数中,使用一个计时器来实现每秒更新一次MAX7219模块的状态。同时,检测按键是否按下,如果按下则重置倒数计时。在updateMatrix()函数中,获取当前的倒数时间,并将倒数时间转换成8x8的图案。最后,使用两个循环来更新MAX7219模块的状态。 3. 上传代码 编写完成代码后,将Arduino连接到电脑上,选择正确的开发板和串口,然后上传代码到Arduino中。 4. 测试 将按键连接到Arduino上,并将MAX7219模块接上电源。然后按下按键,倒数计时开始,MAX7219模块上对应的LED会逐渐变亮。过一段时间后,MAX7219模块上的LED会变成全亮,表示倒数计时结束。通过修改代码中的getCountdown()函数和resetCountdown()函数可以实现更多的倒数计时功能。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值