STM32使用MAX7219控制点阵屏和点阵屏级联

2024-01-21 12:40

本文主要是介绍STM32使用MAX7219控制点阵屏和点阵屏级联,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文仅仅针对如何使用STM32通过使用MAX7219对点阵屏的控制和级联,提供相应的程序说明和简单的芯片说明,具体的芯片说明请查找数据手册(找淘宝商家要最简单)

目录

一、芯片简单介绍

1.芯片管脚配置

1.1管脚描述

 2.时序图

2.1数据格式

二、 如何使用

 1.单字节写入函数

     2.芯片初始化

3.显示函数

三、级联说明


一、芯片简单介绍

1.芯片管脚配置

 

1.1管脚描述

管脚名称功能
1DIN串行数据输入端口。在时钟上升沿时数据被载入内部
的16 位寄存器。
2,3,5-8,10,11DIG 0–DIG
7
八个数据驱动线路置显示器共阴极为低电平。关闭时
7219 此管脚输出高电平,7221 呈现高阻抗。
4,9GND地线(4 脚和9 脚必须同时接地)
12LOAD
(MAX7219)
载入数据。连续数据的后16 位在LOAD 端的上升沿时
被锁定。
CS
(MAX7221)
片选端。该端为低电平时串行数据被载入移位寄存
器。连续数据的后16 位在cs 端的上升沿时被锁定。
13CLK时钟序列输入端。最大速率为10MHz.在时钟的上升
沿,数据移入内部移位寄存器。下降沿时,数据从DOUT
端输出。对MAX7221 来说,只有当cs 端为低电平时时
钟输入才有效。
14-17,20-23SEG
A–SEG G,
DP
7 段和小数点驱动,为显示器提供电流。当一个段驱
动关闭时,7219 的此端呈低电平,7221 呈现高阻抗。
18SET通过一个电阻连接到VDD 来提高段电流。
19V+正极电压输入,+5V
24DOUT串行数据输出端口,从DIN 输入的数据在16.5 个时
钟周期后在此端有效。当使用多个MAX7219/MAX7221
时用此端方便扩展。

 2.时序图

        通过三线控制,当CS拉低时开始传输数据,CLK由低变高时的DIN引脚的高低代表1和0。当CS由0变1时,数据将存入芯片内部。

2.1数据格式

        数据格式上图所示,一帧数据由2部分组成,高8位是地址,低8位是数据。地址由0到15,分别对应数据寄存器和控制寄存器如下图所示:

具体内容参考官方数据手册,关于芯片内部这里只做简单的描述,主要会用就行。

二、 如何使用

        我使用的是共阴极点阵屏,配合寄存器图可知,其实Digit0~7控制的就是点阵屏的第1~8行,当给Digit命令后,相当于拉低电平了,那么这一行都是低电平,只要列是高,那么灯就会亮,所以根据这个特性编写程序。

 1.单字节写入函数

编程的第一步便是通过时序图编写一个写入函数程序如下。

/*3个引脚的控制宏定低    位带操作*/
#define MAX7219_DIN PBout(5)
#define MAX7219_CS 	PBout(6)
#define MAX7219_CLK PBout(7)
void MAX7219_Write_byte(uint8_t data)//单字节写入
{uint8_t i=0;MAX7219_CS=0;//为了防止CS没有拉低,所以每次写都拉低for(i=8;i>0;i--){MAX7219_CLK=0;if(data&0x80)//高位先行{MAX7219_DIN=1;}else{MAX7219_DIN=0;}data=data<<1;//最高位左移以为 次高位变最高位MAX7219_CLK=1;}
}

        基本单字节函数完成后,为了方便使用,所以利用单字节写入函数写一个写入命令函数,如下:

void MAX7219_Write_Command(uint8_t addr,uint8_t data)//写命令
{MAX7219_Write_byte(addr);//寄存器地址MAX7219_Write_byte(data);//需要写入的数据
}

     2.芯片初始化

        首先初始化芯片的几个控制寄存器,程序如下

/************宏定义方便修改和观察*******************/
#define LEDCOUNT 	4///点阵屏的个数  我用的4连屏
#define DECODEMODE 		0X09	//编码模式
#define INTENSITY  		0X0A	//亮度
#define SCANLIMT		0x0B	//扫描寄存器个数
#define SHUTDOWN   		0X0C	//关闭寄存器
#define DISPLAYTEST		0X0F	//显示测试
/*************************************************/
void MAX7219_INIT(void)
{uint8_t i=0;GPIO_Config();MAX7219_CS=0;for(i=0;i<LEDCOUNT;i++){MAX7219_Write_Command(DECODEMODE,0X00);/*译码寄存器:1使用BCD码   0不使用(数码管的话建议用BCD码)*/}MAX7219_CS=1;//这里发送4次后CS拉高,那么4个点阵屏都收到数据,然后加载到寄存器中MAX7219_CS=0;for(i=0;i<LEDCOUNT;i++){MAX7219_Write_Command(INTENSITY,0X01);/*亮度控制:0x00~0x0F  0是最暗  0xFs是最亮*/}MAX7219_CS=1;MAX7219_CS=0;for(i=0;i<LEDCOUNT;i++){MAX7219_Write_Command(SCANLIMT,0X07);/*点阵屏的行数  数码管的段位  0是1行,7是8行*/}MAX7219_CS=1;MAX7219_CS=0;for(i=0;i<LEDCOUNT;i++){MAX7219_Write_Command(SHUTDOWN,0X01);/*掉电模式:0掉电模式  1正常模式*/}MAX7219_CS=1;MAX7219_CS=0;for(i=0;i<LEDCOUNT;i++){MAX7219_Write_Command(DISPLAYTEST,0X00);/*显示寄存器:0普通模式   1测试模式*/}MAX7219_CS=1;}

3.显示函数

        初始化完成后就可以进行显示了,显示函数如下:

/*字库定义的字库 */const u8 _4x7Num[10][8]={{0x0f,0x09,0x09,0x09,0x09,0x09,0x0f,0x00},//0{0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00},//1{0x0f,0x01,0x01,0x0f,0x08,0x08,0x0f,0x00},//2{0x0f,0x01,0x01,0x0f,0x01,0x01,0x0f,0x00},//3{0x09,0x09,0x09,0x0f,0x01,0x01,0x01,0x00},//4{0x0f,0x08,0x08,0x0f,0x01,0x01,0x0f,0x00},//5{0x0f,0x08,0x08,0x0f,0x09,0x09,0x0f,0x00},//6{0x0f,0x01,0x01,0x01,0x01,0x01,0x01,0x00},//7{0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00},//8{0x0f,0x09,0x09,0x0f,0x01,0x01,0x0f,0x00}//9};
for(i=1;i<9;i++)//点阵屏的第1行到第8行
{MAX7219_CS=0;   for(j=0 ; j< 4; j++)//因为有4个点阵屏,所以同一行需要发4次{   switch(j)//用switch只是为了方便看而已{case 0:MAX7219_Write_byte(i);            MAX7219_Write_byte(_4x7Num[5][i-1]);//控制列的高低电平,行为低电平了,所以列为1时灯亮,如数据为//0xF0 那么这一行就是4个亮4个灭break;case 1:MAX7219_Write_byte(i);			  MAX7219_Write_byte(_4x7Num[6][i-1]);break;case 2:MAX7219_Write_byte(i);			  MAX7219_Write_byte(_4x7Num[7][i-1]);break;case 3:MAX7219_Write_byte(i);			  MAX7219_Write_byte(_4x7Num[8][i-1]);break;         }}MAX7219_CS=1;
}

三、级联说明

        MAX7219的芯片有一个特点就是当CS产生上升沿后,才会将数据保存到寄存器中,而已当超过16位后,再传输一位的时候就会从OUT那溢出以为到下一个点阵屏的max7219的IN中,下表为示意图,第一次发送数据,此时数据在MAX7219①中,如表格中①所示此时CS不拉高继续发送数据,当在发送一个位时,比如0,此时的数据如表格中②所示,那么第一次发送的最高位就会溢出到max7219②中,依此类推,当再发送一个位,比如1,那么如表格中③所示。即当方法第一个16位数据时,数据会在第一个MAX7219中,如果CS拉高,那么寄存器将保存数据,如果没有拉高,当再发送2个字节的数据时,第一个2个字节的数据将被推到第二个MAX7219中,依此类推。

MAX7219①MAX7219②
bit012~1314bit15bit012~1314bit15
1010110101110101
01010110101110101
101010110101110101

这篇关于STM32使用MAX7219控制点阵屏和点阵屏级联的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629585

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi