【STM32-学习笔记-15-】MAX7219点阵屏模块
文章目录
- 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);}}
}
相关文章:

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

高并发内存池_CentralCache(中心缓存)和PageCache(页缓存)申请内存的设计
三、CentralCache(中心缓存)_内存设计 (一)Span的创建 // 页编号类型,32位下是4byte类型,64位下是8byte类型 // #ifdef _WIN64 typedef unsigned long long PageID; #else _WIN32 typedef size_t PageI…...

elementUI Table组件实现表头吸顶效果
需求描述 当 table 内容过多的时候,页面上滑滚动,表头的信息也会随着被遮挡,无法将表头信息和表格内容对应起来,需要进行表头吸顶 开始编码💪 环境:vue2.6、element UI step1: 给el-table__h…...
语言模型的价值定位与技术突破:从信息处理到创新认知
标题:语言模型的价值定位与技术突破:从信息处理到创新认知 文章信息摘要: 当前语言模型的核心价值主要体现在信息综合与处理能力上,用户友好的交互界面是其成功关键。在模型计算机制方面,推理能力的实现包括chain-of-…...

微信小程序使用上拉加载onReachBottom。页面拖不动。一直无法触发上拉的事件。
1,可能是原因是你使用了scroll-view的标签,用onReachBottom触发加载事件。这两个是有冲突的。没办法一起使用。如果页面的样式是滚动的是无法去触发页面的onReachBottom的函数的。因此,你使用overflow:auto.来使用页面的某些元素滚动…...

Spring Boot 快速创建项目
目录 一. 创建项目 编辑 二. 项目目录 三. 运行项目 (1) 启动项目 (2) 输出HelloWorld 一. 创建项目 我们以idea专业版为例创建Spring项目: 步骤: (1) File --> New --> Project (2) 配置项目基本信息 (3) 依赖: 需要什么就勾选什么. 我们这里就只勾选一个Spri…...
kafka学习笔记5 PLAIN认证——筑梦之路
在Kafka中,SASL(Simple Authentication and Security Layer)机制包括三种常见的身份验证方式: SASL/PLAIN认证:含义是简单身份验证和授权层应用程序接口,PLAIN认证是其中一种最简单的用户名、密码认证方式&…...
直驱式风电储能制氢仿真模型matlab/simulink
接着还是以直驱式风电为DG中的研究对象,上篇博客考虑的风电并网惯性的问题,这边博客主要讨论功率消纳的问题。 考虑到风速是随机变化的,导致风电输出功率的波动性和间歇性问题突出;随着其应用规模的不断扩大以及风电在电网中渗透率…...

excel批量提取批注
打开excel ALTF11 插入代码 Function GetComment(rng As Range) As StringOn Error Resume NextDim commentText As StringcommentText rng.Comment.TextcommentText Replace(commentText, "rina.farriani:", "")GetC…...

高性能PCIE硬件加密卡:满足大数据时代的安全需求
在大数据时代,数据的海量增长和快速流动带来了前所未有的安全挑战。如何确保数据的机密性、完整性和可用性,成为企业和组织必须面对的重要问题。高性能PCIE硬件加密卡作为一种专业的数据安全解决方案,凭借其卓越的性能和安全性,正…...
C语言小项目——通讯录
功能介绍: 1.联系人信息:姓名年龄性别地址电话 2.通讯录中可以存放100个人的信息 3.功能: 1>增加联系人 2>删除指定联系人 3>查找指定联系人的信息 4>修改指定联系人的信息 5显示所有联系人的信息 6>排序(名字&…...

uni-app连接EventSource
前言 uniapp默认是不支持event-source,这里是借助renderjs进行SSE连接 正文 引入event-source-polyfill 这里演示的是直接将代码下载到本地进行引入 下载地址 把里面的eventsource.min.js文件放到项目中的static文件夹 项目封装event-source.vue组件 <templ…...
Spring Boot 实战:轻松实现文件上传与下载功能
目录 一、引言 二、Spring Boot 文件上传基础 (一)依赖引入 (二)配置文件设置 (三)文件上传接口编写 (一)文件类型限制 (二)文件大小验证 ࿰…...

火狐浏览器Firefox一些配置
没想到还会开这个…都是Ubuntu的错 一些个人习惯吧 标签页设置 常规-标签页 1.按最近使用顺序切换标签页 2.打开新标签而非新窗口(讨厌好多窗口) 3.打开新链接不直接切换过去(很打断思路诶) 4.关闭多个标签页时不向我确认 启动…...

[STM32 HAL库]串口中断编程思路
一、前言 最近在准备蓝桥杯比赛(嵌入式赛道),研究了以下串口空闲中断DMA接收不定长的数据,感觉这个方法的接收效率很高,十分好用。方法配置都成功了,但是有一个点需要进行考虑,就是一般我们需要…...

C++入门 详细版
欢迎来到干货小仓库!! 一分耕耘一分收获,离自己的目标越来越近。 passion!passion!!passion!!! 1.命名空间 由于C语言无法避免名字或者函数重复等问题,当有多…...

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动
近日,以“构建‘中试’生态,赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节,成都元来云志科技有限…...

网络编程 | UDP组播通信
1、什么是组播 在上一篇博客中,对UDP的广播通信进行了由浅入深的总结梳理,本文继续对UDP的知识体系进行探讨,旨在将UDP的组播通信由浅入深的讲解清楚。 组播是介于单播与广播之间,在一个局域网内,将某些主机添加到组中…...
T-SQL语言的语法
T-SQL深度解析与应用 T-SQL(Transact-SQL)是微软SQL Server使用的一种扩展SQL(结构化查询语言)。它不仅支持标准SQL的所有功能,而且增加了许多实用的扩展和特性,使得数据库的操作更加灵活和强大。本文将对…...
Java开发提效秘籍:巧用Apache Commons IO工具库
一、引言 在 Java 开发的广袤领域中,输入输出(I/O)操作宛如一座桥梁,连接着程序与外部世界,从文件的读取与写入,到网络数据的传输,I/O 操作无处不在,其重要性不言而喻。然而…...

ASP.NET Core使用Quartz部署到IIS资源自动被回收解决方案
iis自动回收的原因 回收机制默认配置,间隔时间是1740分钟,意思是:默认情况下每1740分钟(29小时)回收一次,定期检查应用程序池中的工作进程,并终止那些已经存在很长时间或已经使用了太多资源的工作进程 进程模型默认配…...

构建 MCP 服务器:第 3 部分 — 添加提示
这是我们构建 MCP 服务器的四部分教程的第三部分。在第一部分中,我们使用基本资源创建了第一个MCP 服务器;在第二部分中,我们添加了资源模板并改进了代码组织。现在,我们将进一步重构代码并添加提示功能。 什么是 MCP 提示&#…...

Harmony核心:动态方法修补与.NET游戏Mod开发
一、Harmony的核心定位与设计哲学 Harmony是一个运行时动态方法修补库,专为修改已编译的.NET/Mono应用程序而设计,尤其适用于游戏Mod开发。其核心创新在于: 非破坏性修改:保留原始方法完整性,避免直接替换或覆盖。多…...
升级centos 7.9内核到 5.4.x
前面是指南,后面是工作日志。 wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.2…...
uniapp 设置手机不息屏
在使用 UniApp 开发应用时,有时需要在设备长时间未操作时实现息屏保护功能,以节省电量和保护屏幕。以下是如何在 UniApp 中实现这一功能的步骤。 示例一 // 保持屏幕常亮 uni.setKeepScreenOn({keepScreenOn: true });// 监听应用进入后台事件 uni.onH…...
SpringAI Alibaba实战文生图
1️⃣ 前置准备:搭建开发环境与服务配置🚀 🔧 1.1 环境要求 JDK 17(推荐 JDK 21)、Spring Boot 3.x(本案例使用 3.3.4)、阿里云百炼大模型服务 API Key。需在阿里云控制台完成服务开通并获取有…...
Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决
如果你的Obsidian文档在Linux与Windows间来回切换,可能会涉及到文件的保存换行符问题,但这样的话就容易导致一个问题,那就是内容无差异,Obsidian却提示unexplained changes,Windows系统下的解决方法如下,找…...

如何使用Webhook触发器,在 ONLYOFFICE 协作空间构建智能工作流
在数字化办公中,ONLYOFFICE 协作空间作为一款功能强大的文档协作平台,提供了丰富的自动化功能。对于开发者而言,Webhook 触发器是实现业务流程自动化与系统集成的关键工具。本文将深入探讨如何在 ONLYOFFICE 协作空间中高效利用 Webhook&…...
Python的浅拷贝与深拷贝
一、浅拷贝 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 浅拷贝有几种方法: 1、 使用数据类型本身的构造器 list1[1,2,3]list2 list(list1) # 使用了数据类型本身的构造器 list…...
《Java 并发神器:深入理解CompletableFuture.supplyAsync与线程池实战优化》
一、背景介绍 在 Java 后端开发中,我们经常会遇到以下问题: 需要并行执行多个数据库查询或远程调用;单线程执行多个 .list() 方法时耗时过长;希望提升系统响应速度,但又不想引入过多框架。 这时,Java 8 …...