【STM32-学习笔记-15-】MAX7219点阵屏模块

news/2025/1/22 6:01:27/

文章目录

  • MAX7219点阵模块
    • 一、MAX7219
      • Ⅰ、 概述
      • Ⅱ、功能特点
      • Ⅲ、引脚功能
      • Ⅳ、典型应用电路
      • Ⅴ、内部组成结构
      • Ⅵ、时序图
      • Ⅶ、寄存器
    • 二、STM32控制点阵屏
      • Ⅰ、程序框图
      • Ⅱ、程序编写
        • ①、MAX7219.c
        • ②、MAX7219.h
        • ③、MAX7219_Img.h
        • ④、main.c

MAX7219点阵模块

一、MAX7219

Ⅰ、 概述

  • MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,广泛用于驱动8位数字的7段LED显示、条线图显示器或64个独立的LED点阵
  • 它内置BCD译码器、多路扫描电路、段驱动器和位驱动器,并配备8×8静态RAM用于存储显示数据

请添加图片描述

Ⅱ、功能特点

  • 低功耗关闭模式:具有150μA的低功耗关闭模式
  • 亮度控制:支持模拟和数字亮度调节
  • 动态扫描:内置动态扫描电路,可实现多位LED显示
  • 串行接口:采用三线串行接口(DIN、CLK、CS),兼容SPI协议,数据传输率高达10MHz
  • 级联支持:支持多片级联,通过级联可扩展更多显示单元
  • 显示模式:支持译码和非译码模式,用户可选择硬件译码或软件译码
  • 测试模式:提供测试模式,可点亮所有LED以进行硬件检测

Ⅲ、引脚功能

请添加图片描述

Ⅳ、典型应用电路

请添加图片描述

Ⅴ、内部组成结构

请添加图片描述

Ⅵ、时序图

请添加图片描述

  • 通过MAX7219来控制8*8点阵模块仅需DIN、CS、CLK三个引脚即可

  • 请添加图片描述

  • MAX7219:串行数据在 DIN 输入 16 位数据包,无论LOAD端处于何种状态,在时钟的上升沿数据均移入到内部 16 位移位寄存器

  • MAX7221:无论数据输入或输出CS必须为低电平。然后数据在LOAD/ CS的上升沿被载入数据寄存器或控制寄存器

  • LOAD/CS端在第 16 个时钟的上升沿之后(或同时),至下个时钟上升沿之前变为高电平,否则数据将会丢失

Ⅶ、寄存器

请添加图片描述

  • 根据时序图,向对应寄存器中写入数据,即可实现对点阵模块的控制
  • 表中列出了 14 个可寻址的数据寄存器和控制寄存器
    • 数据寄存器由一个在片上的8×8的双向 SRAM 来实现。它们可以直接寻址所以只要在 V+大于 2V的情况下每个数据都可以独立的修改或保存
    • 控制寄存器包括编码模式显示亮度扫描限制关闭模式以及显示检测五个寄存器

二、STM32控制点阵屏

Ⅰ、程序框图

请添加图片描述

Ⅱ、程序编写

①、MAX7219.c
#include "stm32f10x.h"
#include "Delay.h"
#include "MAX7219_Img.h"
//驱动MAX7219 8位数码管
//输出:>CS:	PA4
//输出:>SCK:	PA5
//输出:>DIN:	PA7void HardSPI_W_CS(uint8_t BitValue) {		//封装函数控制CS的状态GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue);
}
void HardSPI_W_SCK(uint8_t BitValue) {	//控制时钟线的状态GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue);
}
void HardSPI_W_DIN(uint8_t BitValue) {	//MOSI控制主机输出的信号GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)BitValue);
}//初始化GPIO,并将三个输出引脚设置为默认值
void SoftSPI_Init(void)
{//初始化GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//将SS(软件控制)配置为通用推挽输出GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);HardSPI_W_CS(1);//配置默认电平HardSPI_W_SCK(0);HardSPI_W_DIN(0);
}//写一个字节*********************************************************************
void Max7219_WriteByte(uint8_t Byte)
{uint8_t i = 0;for(i = 0;i < 8;i++){HardSPI_W_DIN(Byte & (0x80 >> i));//取出高位HardSPI_W_SCK(1);//发送数据Delay_us(1);//等待发送HardSPI_W_SCK(0);}
}//写数据*********************************************************************
void Max7219_WriteData(uint8_t Addr, uint8_t Data)
{HardSPI_W_CS(0);//拉低CS片选Max7219_WriteByte(Addr);Max7219_WriteByte(Data);HardSPI_W_CS(1);
}//清除整个点阵屏**************************************************************
void MAX7219_Clear(void)
{uint8_t i;for(i = 1; i <= 8; i++){Max7219_WriteData(i, 0x00);}
}//初始化MAX7219**************************************************************
void Init_MAX7219(void)
{SoftSPI_Init();Max7219_WriteData(0x09, 0);		//译码方式:不译码Max7219_WriteData(0x0A, 5);		//亮度设置:Max7219_WriteData(0x0B, 7);		//扫描界限;8个Max7219_WriteData(0x0C, 1);		//掉电模式:0开启;1关闭Max7219_WriteData(0x0F, 0);		//显示测试:1开启;0关闭MAX7219_Clear();
}//清除一行*******************************************************************
void MAX7219_Clear_Line(uint8_t Addr)
{//清除一行,即对该行地址所在的寄存器写0x00Max7219_WriteData(Addr, 0);
}//显示数组中的数据,即显示整个点阵屏
void MAX7219_ShowImg(uint8_t *parr)
{MAX7219_Clear();uint16_t i;for(i = 1;i <= 8;i++){Max7219_WriteData(i, parr[i - 1]);}
}//显示数字*******************************************************************
void MAX7219_ShowNum(uint8_t Num)
{MAX7219_ShowImg(img_Num[Num]);
}
②、MAX7219.h
#ifndef __MAX7219_H__
#define __MAX7219_H__
#include "stdint.h"void Init_MAX7219(void);//初始化
void MAX7219_Clear(void);//全清除
void MAX7219_Clear_Line(uint8_t Addr);//清除一行
void Max7219_WriteData(uint8_t Addr, uint8_t Data);//写数据(地址+数据)
void MAX7219_ShowNum(uint8_t Num);//显示数字
void MAX7219_ShowImg(uint8_t *parr);//显示整个屏幕#endif
③、MAX7219_Img.h
  • 该头文件中存储的是需要显示的数据
  • 二维数组指针
#ifndef __MAX7219_IMG_H__
#define __MAX7219_IMG_H__
#include "stdint.h"uint8_t img_Num[10][8] = {{0x00,0x7E,0xFF,0xC3,0xC3,0xFF,0x7E,0x00},//	0{0x00,0x00,0x01,0xFF,0xFF,0x41,0x00,0x00},//	1{0x00,0xFB,0xFB,0xDB,0xDB,0xDF,0xDF,0x00},//	2{0x00,0xFF,0xFF,0xDB,0xDB,0xDB,0xC3,0x00},//	3	{0x00,0xFF,0xFF,0x18,0x18,0xF8,0xF8,0x00},//	4{0x00,0xDF,0xDF,0xDB,0xDB,0xFB,0xFB,0x00},//	5	{0x00,0xDF,0xDF,0xDB,0xDB,0xFF,0xFF,0x00},//	6{0x00,0xF0,0xF8,0xDC,0xCF,0xC7,0xC0,0x00},//	7{0x00,0xFF,0xFF,0xDB,0xDB,0xFF,0xFF,0x00},//	8{0x00,0xFF,0xFF,0xDB,0xDB,0xFB,0xFB,0x00},//	9
};#endif
④、main.c
#include "stm32f10x.h"
#include "Delay.h"
#include "MAX7219.h"int main(void)
{Init_MAX7219();uint8_t i;while(1){for(i=0;i<10;i++)	{MAX7219_ShowNum(i);Delay_ms(500);}}
}

http://www.ppmy.cn/news/1565149.html

相关文章

性能调优篇 四、JVM运行时参数

目录 一、三种JVM参数选项1、标准参数选项1&#xff09;特点2&#xff09;各种选项3&#xff09;-server 和 -client 2、-X参数选项3、-XX参数选项 二、添加JVM参数选项1、idea 如何添加jvm参数 三、常见的JVM参数选项1、打印设置的参数选项及其值2、堆、栈、方法区等内存大小设…

1. 基于图像的三维重建

1. 基于图像的三维重建 核心概念三维重建中深度图、点云的区别&#xff1f;深度图点云总结 深度图到点云还需要什么步骤&#xff1f;1. **获取相机内参**2. **生成相应的像素坐标**3. **计算三维坐标**4. **构建点云**5. **处理颜色信息&#xff08;可选&#xff09;**6. **去除…

【Unity3D】3D物体摆放、场景优化案例Demo

目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件&#xff1a;PlaceGameDemo2.unitypackage 链接: https://pan.baid…

Go-Gin Web 框架完整教程

1. 环境准备 1.1 Go 环境安装 Go 语言&#xff08;或称 Golang&#xff09;是一个开源的编程语言&#xff0c;由 Google 开发。在开始使用 Gin 框架之前&#xff0c;我们需要先安装 Go 环境。 安装步骤&#xff1a; 访问 Go 官网下载页面&#xff1a;https://golang.org/dl…

Redis可视化工具--RedisDesktopManager的安装

需要安装使用&#xff0c;0.9.4以上是要收费的 下载地址&#xff1a;https://github.com/uglide/RedisDesktopManager/releases/download/0.9.3/redis-desktop-manager-0.9.3.817.exe 详情&#xff1a;https://blog.csdn.net/u012688704/article/details/82251338 点击进行安…

jvm学习总结

1.类加载运行全过程 当我们使用java命令运行某个main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM. 主要用到的类为loadClass,loadClass的类加载过程有如下过程 加载--》验证--》准备-》》解析》》初始化》》使用》》卸载 加载&#xff1a; 在硬盘上查找…

jvm G1 垃圾收集日志分析示例(GC)

一、gc 日志 2023-11-07 12:40:53 GC log file created /opt/logs/query/gc.log.1 Java HotSpot(TM) 64-Bit Server VM (25.45-b02) for linux-amd64 JRE (1.8.0_45-b14), built on Apr 10 2015 10:07:45 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8) M…

UML-组件图

UML&#xff08;统一建模语言&#xff09;的组件图&#xff0c;又称为构件图&#xff0c;是描述软件系统中物理方面的图形&#xff0c;它主要用于展示系统内部各个组件之间的组织及其相互关系。通过组件图&#xff0c;开发者可以清晰地了解系统的结构&#xff0c;把握组件间的依…