【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 操作无处不在,其重要性不言而喻。然而…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
