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

这篇具有很好参考价值的文章主要介绍了STM32使用MAX7219控制点阵屏和点阵屏级联。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

一、芯片简单介绍

1.芯片管脚配置

1.1管脚描述

 2.时序图

2.1数据格式

二、 如何使用

 1.单字节写入函数

     2.芯片初始化

3.显示函数

三、级联说明


stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32

一、芯片简单介绍

1.芯片管脚配置

 

stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32

1.1管脚描述

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

 2.时序图

stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32

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

2.1数据格式

stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32

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

stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32

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

二、 如何使用

stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32stm32 max7219驱动8×8led点阵,应用,单片机,嵌入式硬件,c语言,stm32

        我使用的是共阴极点阵屏,配合寄存器图可知,其实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中,依此类推。文章来源地址https://www.toymoban.com/news/detail-762475.html

MAX7219① MAX7219②
bit0 1 2~13 14 bit15 bit0 1 2~13 14 bit15
1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 1
0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 1
1 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 1

到了这里,关于STM32使用MAX7219控制点阵屏和点阵屏级联的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Proteus仿真】| 51单片机——MAX7219 驱动数码管

    系列文章 todo: 该文章目的:让大家快速上手——知道如何使用MAX7219。故MAX7219就不做详细介绍了(需要了解的话可以看其他博文及数据手册)。 max7219是一个串行输入/输出 共阴极 数码管(点阵)驱动芯片。1个MAX7219最多可以驱动8位数码管。它具有自动扫描(切换位),BCD译码器(即

    2024年02月15日
    浏览(43)
  • 要使用ESP32控制INMP441采集并用MAX98357播放音频实现对讲机

    要使用ESP32控制INMP441采集并用MAX98357播放音频,您需要遵循以下步骤: 1.准备所需的硬件和软件 ESP32开发板 INMP441麦克风模块 MAX98357音频放大器模块 Arduino IDE 2.将ESP32与INMP441连接 将ESP32和INMP441连接如下: ESP32 3.3V引脚 - INMP441 VCC引脚 ESP32 GND 引脚 - INMP441 GND 引脚 ESP32 GPIO22引脚 -

    2023年04月27日
    浏览(35)
  • 一文教你玩LED点阵屏32*64/64*64----基于STM32

    以32*64点阵屏为例,详解LED点阵屏驱动全过程         首先要了解LED点阵屏幕的显示原理。         一般LED点阵屏在某一时间段内只能点亮某一行或者某一列,因为人的眼睛只有24帧速度,只要屏幕速度超过这个值,我们看到的是一个连续完整的画面。一般拿手机的高

    2024年02月05日
    浏览(36)
  • STM32定时器级联功能

    参考:官方文档《stm32f4xx参考手册.pdf》 级联功能,可以把两个定时器的功能关联起来,具体有以下几种: 本文只讲其中一个功能,定时器1给定时器2当分频器。这种功能可以把两个32位定时器,合并为为一个64位定时器,可以把2个16位定时器合并为一个32位定时器、甚至可以

    2024年02月13日
    浏览(47)
  • stm32 74hc595级联编程

    原理图如下  代码如下\\\"xl74hc595.c\\\" \\\"xl74hc595.h\\\" 代码如下 GPIO初始化 具体IO口根据实际需求进行修改 支持任意长度的的595芯片级联  

    2024年02月06日
    浏览(53)
  • HC595级联原理及实例 - STM32

            74HC595的最重要的功能就是:串行输入,并行输出。其次,74HC595里面有2个8位寄存器:移位寄存器、存储寄存器。74HC595的数据来源只有一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。 引脚图 14脚:DIN(SER),串行数据输入引脚 13脚:

    2024年03月28日
    浏览(46)
  • MAX17058_MAX17059 STM32 iic 驱动设计

    MAX17058-MAX17059STM32iic驱动设计内含有代码、详细设计过程文档,实际项目中使用代码,稳定可靠资源-CSDN文库 MAX17058/MAX17059 IC是微小的锂离子(Li +)在手持和便携式设备的电池电量计。MAX17058工作在单节Li +电池和两节Li +在一系列MAX17059。插入电池,IC的去抖初始电压测量,以提高

    2024年02月07日
    浏览(29)
  • stm32+MAX30102+OLED

    stm32 + 1个心率血氧模块(MAX30102)+ 1个WiFi模块(ESP8266-01S) + 蜂鸣器 + OLED显示+ 本地数据保存(内置Flash ROM或附加SD卡) 背景:对医院住院危重患者的心率和血氧进行实时监测并报警。 主要功能与要求: 1)了解外置心率血氧模块(MAX30102)检测心率和血氧浓度的原理;模块的接

    2024年01月21日
    浏览(48)
  • 单片机设计:基于stm32蓝牙音响(mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app)

    单片机设计:基于stm32蓝牙音响(mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app) 一、主要功能: 1.手机app播放内存卡的音乐、同时点阵屏随音乐进行跳动 2.0LED、手机app显示当前音量以及当前状态 3.手机app远程调节音量阈值,可以切换上一首、下一首,音乐播放结束后自动下一首      当

    2024年02月10日
    浏览(73)
  • STM32--基于STM32F103的MAX30102心率血氧测量

    本文介绍基于STM32F103ZET6+MAX30102心率血氧测量+0.96寸OLED(7针)显示(完整程序代码见文末链接) 一、简介 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。它集成了一个红光LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。 MA

    2024年01月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包