TM1652段码屏芯片全解析——概况,性能,MCU连接,样例代码

首先,作为四年前就有的LED段码控制芯片,相关的资料及样例程序少的可怜。硬件驱动 作为固定使用的 软件资源,其共享性远低于软件领域的驱动库。人的才智不应浪费在这种不具创造性的重复实验上。

要点总结:

TM1652概述:

在这里插入图片描述

数据:
TM1652是一款共阴LED(发光二极管、数码管、点阵屏)驱动控制专用芯片。内部集成了数字通讯电路、震荡器、LED驱动电路等。显示模式(7段×6位,8段×5位),可调节屏幕亮度(位占空比16级可调、段驱动电流8级可调)。

供电:
供电电压3V~6V;数据接口电压可5V或3.3V(不同供电系统可对接,但尽量避免)。

功能:
支持共阴数码管显示;7段×6位,8段×5位数码管显示;辉度调节电路(位占空比16级可调、段驱动电流8级可调);内置上电复位电路;内置针对暗亮问题的优化电路。

连接:
采用单线SDA控制,可使用UART的TX端口控制,也可使用普通GPIO模拟UART的TX端口控制,支持波特率19200bps(即,每位数据52us)。

TM1652引脚说明:

在这里插入图片描述

在这里插入图片描述

TM1652电气特性:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TM1652 MCU连接:

连接时确定好各段的abcd…的位置连接,方便进行代码控制。(SG1连a;SG2连b;…)

7段x6位电路接法

在这里插入图片描述

8段x5位电路接法

在这里插入图片描述
应用时请在芯片 VDD 与 GND 加一个 104(100nf) 去耦电容。去耦电容与芯片 VDD 和 GND 之间的连线越短,去耦效果就越好,芯片工作就越稳定。

TM1652通信协议

通讯帧结构:

采用异步串口通信(UART)协议,工作原理是将传输数据的每个字符以串行方式一位接一位
的传输。工作模式:
在这里插入图片描述
1、每一位时间为52us
2、起始位(1bit):表示传输数据的开始,由高变低进行表示
3、数据位(8bit):8位数据位,低位在前,二进制数据为1设高,为0设低
4、校验位(1bit):统计数据位中1的个数,为奇数个设低(0),为偶数个设高(1)–(奇校验)
5、停止位(1bit):设高,发送完一个字符数据的结束标志
6、空闲位(1bit):设高,空闲位置高的时间大于 3ms,TM1652 就认为本次数据帧结束,本次数据从暂存器打入相应寄存器开始控制芯片输出。如果一帧数据传输没有结束,那么建议设置空闲位时间范围在
0-0.5ms 以内。

注意:提前说明一个概念,TM1652的数据帧包含两部分,显示帧数据控制帧数据,空闲位在这两个数据帧之间发挥作用。在测试时,如果数据发送是正常的,不能点亮,一般是数据帧异常导致的。包括(1、数据帧不完整;2、数据帧空闲位时间长度不够;)

==波特率:==是衡量数据传输速率的指针。表示为每秒钟传送的二进制位数(bit 数)。TM1652 支持波特率范围为:17500bps~21200bps,这里我们建议用 19200bps 即每位的时间为:1s(秒)/19200≈ 52us(微秒)。TM1652 支持的每位的时间范围为:47us~57us。在用 IO 模拟 UART 通讯时候,SDA 数据的位宽应该满足提供的位宽范围即47us~57us。

TM1652帧数据结构:

注意:TM1652帧数据并非普通意义的数据帧,而是TM1652控制命令的最小单元,它包含两种形式
⑴ 显示地址命令+显示数据;(显示帧数据)
⑵ 显示控制命令+显示控制调节命令;(控制帧数据)
要想把TM1652点亮,据需要完整的发送显示帧数据和控制帧数据。

显示地址命令级显示控制命令格式:(显示地址命令控制显示的位号,显示控制命令控制显示的亮度和显示模式)

在这里插入图片描述
具体位号对应命令:
在这里插入图片描述

显示数据格式:(控制从显示地址命令设定的位开始显示的该位的a、b、c…段号的亮灭)

在这里插入图片描述

显示控制调节命令格式:(控制命令+控制调节命令组成控制帧数据,控制数据用于调节显示亮度与显示方式每一次显示帧数据的发送,都要跟上控制帧数据才能生效

在这里插入图片描述

TM1652显示控制

帧数据发送顺序:

首先如果先发控制帧数据(开显示),显示寄存器没有清零,此时就会输出显示寄存器里面的随机数据,导致数码管显示乱码。因此要先发显示帧数据,再发控制帧数据(开显示)避免乱码。
由于数码管有多位,因此一个显示地址命令可以跟多个byte显示数据。后续 byte数据按地址累加 1 放入相应暂存器中。数据超出地址的部分无效。

显示数据:

在这里插入图片描述
上图给出共阴数码管的连接示意图,如果让该数码管显示“0”,则需要在GR1为低电平时置SG1,
SG2,SG3,SG4,SG5,SG6为高电平,置SG7,SG8为低电平
在这里插入图片描述
即显示数据为0b00111111=0x3f

数据包传输方式:(显示帧数据+控制帧数据=数据包)

1、地址自动加1模式(上面介绍了多个显示数据会自动放入地址加1的寄存器中)
在这里插入图片描述
这就是一条完整的TM1652命令了,可以控制TM1652显示。

Command1:选择显示地址命令(0x08)
Data1~Data n:发送显示数据(1byte数据为1位,最多支持6位)
Time:数据线置高时间(最小时间为3ms)就是上面的空闲位,分割显示帧数据和控制帧数据
CommandX:选择显示控制命令(0x18)
CommandY:发送显示控制调节命令(包括位占空比、段驱动电流以及显示模式设置)

2、固定地址模式(对每一个数据发送一个地址)
在这里插入图片描述
这也是一条完整的TM1652命令,可以控制TM1652显示。

Command1–Command n:选择显示地址命令(0x08:位号1;0x88:位号2…)
Data1~Data n:发送显示数据(最多6 bytes)
Time:数据线置高时间(最小时间为3ms)就是上面的空闲位,分割显示帧数据和控制帧数据
CommandX:发送显示控制命令(0x18)
CommandY:发送显示控制调节命令(包括位占空比、段驱动电流以及显示模式设置)
可以看到固定地址模式每个显示帧数据都需要至少间隔3ms,不推荐(官方说明芯片严格来说只有一种地
址自动加1模式,间隔只是分离了操作)

举例说明:

1、地址自动加1模式

发送命令:08 3F 06 5B 4F FF
间隔5ms:delay_ms(5)
发送命令:18 18

0x08:GR1地址
0x3F :GR1数据0
0x06 :GR2数据1
0x5B :GR3数据2
0x4F :GR4数据3
0xFF :GR5数据8.
0x18 :显示控制命令
0x18 :设置占空比为 8/16,设置段驱动电流为 2/8,设置 8 段 5 位输出

TM1652串口调试助手测试

使用串口调试助手就可以测试驱动TM1652。
将USB转TTL的供电连接TM1652的供电(3.3V或5V均可),其次将TXD连接TM1652的SDA引脚。
1、打开串口调试助手 V5.0.2.12 免费版
2、选择串口号,波特率,校验位,数据位。停止位。并打开串口
3、接收及发送设置选择HEX,其他不选。
4、先发送显示帧数据 08 3F 06 5B 4F FF
在这里插入图片描述

5、再发送控制帧数据 18 18
在这里插入图片描述

6、手输即可,间隔超过3ms即可。显示效果展示:
在这里插入图片描述

TM1652样例代码(基于HC32L130)

串口调试助手已经测过串口控制方式,下面代码使用GPIO模拟方式进行控制。使用任意GPIO即可。
tm1652.h文件

#ifndef __TM1652_H__
#define __TM1652_H__#include "ddl.h"
#include "gpio.h"//TM1652 GPIO定义
#define TM1652_SDA_PORT				GpioPortA
#define	TM1652_SDA_PIN				GpioPin2void delay_52us(uint32_t u32Cnt);
void tm1652_init(void);
void tm1652_send(uint8_t data);
uint8_t tm1652_transform(uint8_t showChar) ;
void tm1652_show_updata(uint8_t char1, uint8_t char2, uint8_t char3, uint8_t char4, uint8_t char5);#endif /* __TM1652_H__ */

tm1652.c文件(52us使用软定时,方便引用,如有精确定时可替换)

#include "tm1652.h"文件//TM1652显示控制调节命令
//位驱动占空比8/16,段驱动电流2/8,显示模式8段5位输出
uint8_t tm1652ShowMode=0x18;#define TM1652_SDA_PIN_LOW 		Gpio_ClrIO(TM1652_SDA_PORT,TM1652_SDA_PIN);
#define TM1652_SDA_PIN_HIGH 	Gpio_SetIO(TM1652_SDA_PORT,TM1652_SDA_PIN);//延时取27为4MHz的取值,delay_52us(x)延时时长约52us
//若使用ddl库中的delay1us()函数则不能取到,delay1us(0)的延时时间超过59us
uint32_t x = 27;//一个while循环大约5个时钟周期,一个时钟周期271ns
//进入退出循环大约8个时钟周期
//加上函数调用大约15个时钟周期
//一个时钟周期271ns
void delay_52us(uint32_t u32Cnt)
{//while一次循环约1.25us//一次函数调用约4.2uswhile(u32Cnt--);
} //TM1652GPIO初始化
void tm1652_init(void) 
{stc_gpio_cfg_t 	GpioInitStruct;DDL_ZERO_STRUCT(GpioInitStruct);///<使能GPIO外设时钟门控开关Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);///<配置SDA引脚输出模式GpioInitStruct.enDir = GpioDirOut;GpioInitStruct.enDrv = GpioDrvL;//低驱动///<配置SDA引脚上拉GpioInitStruct.enPu = GpioPuEnable;GpioInitStruct.enPd = GpioPdDisable;Gpio_Init(TM1652_SDA_PORT,TM1652_SDA_PIN,&GpioInitStruct); 
}//向TM1652发送1byte数据
void tm1652_send(uint8_t data)
{uint8_t nBit=0;uint8_t fParity =0;TM1652_SDA_PIN_LOWdelay_52us(x);for(nBit=0; nBit<8; nBit++){if(data&0x01){fParity ++;TM1652_SDA_PIN_HIGH}else{TM1652_SDA_PIN_LOW}delay_52us(x);data>>=1;}if(fParity%2==0){TM1652_SDA_PIN_HIGH}else{TM1652_SDA_PIN_LOW}delay_52us(x);TM1652_SDA_PIN_HIGH        delay_52us(x);delay_52us(x);
}//数码管显示字符对应显示数据转换
uint8_t tm1652_transform(uint8_t showChar) 
{uint8_t data = 0xff;switch(showChar){case '0':		data = 0x3F;	break;	// 0case '1':		data = 0x06;	break;	// 1case '2':		data = 0x5B;	break;	// 2case '3':		data = 0x4F;	break;	// 3case '4':		data = 0x66;	break;	// 4case '5':		data = 0x6D;	break;	// 5case '6':		data = 0x7D;	break;	// 6case '7':		data = 0x07;	break;	// 7case '8':		data = 0x7F;	break;	// 8case '9':		data = 0x6F;	break;	// 9case 'A':		data = 0x77;	break;	// Acase 'B':		data = 0x7C;	break;	// Bcase 'C':		data = 0x39;	break;	// Ccase 'D':		data = 0x5E;	break;	// Dcase 'E':		data = 0x79;	break;	// Ecase 'F':		data = 0x71;	break;	// F}return data;
};//TM652 5位数码管显示字符更新函数
void tm1652_show_updata(uint8_t char1, uint8_t char2, uint8_t char3, uint8_t char4, uint8_t char5)
{//显示帧数据tm1652_send(0x08);tm1652_send(tm1652_transform(char1));tm1652_send(tm1652_transform(char2));tm1652_send(tm1652_transform(char3));tm1652_send(tm1652_transform(char4));tm1652_send(tm1652_transform(char5));//命令间隔delay1ms(3);//控制帧数据tm1652_send(0x18);tm1652_send(tm1652ShowMode);
}

main.c文件

#include "gpio.h"
#include "ddl.h"
#include "tm1652.h"int main(void)
{tm1652_init();while(1){tm1652_show_updata('1','2','3','4','5');delay1ms(1000);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络层】IP报文解析和网段划分

文章目录 网络层的作用IP协议协议报头格式网段划分DHCPCIDR划分方案 IP地址的数量限制私有IP地址和公网IP地址LAN和WAN 路由 网络层的作用 前面学习了应用层和传输层&#xff0c;应用层的作用是为用户和应用程序提供网络服务&#xff0c;传输层的作用是提供端口到端口的通信服…

数据结构与算法--二叉树的遍历及应用

文章目录 回顾二叉树的五个重要性质 提要二叉树的遍历二叉树遍历流程图前序遍历流程图&#xff08;根左右&#xff09;中序遍历流程图&#xff08;左根右&#xff09;后序遍历流程图&#xff08;左右根&#xff09; 二叉树遍历的示例根据遍历序列确定二叉树的形态确定方法 二叉…

界面组件Kendo UI for Vue 2024 Q2亮点 - 发布一系列新组件

随着最新的2024年第二季度发布&#xff0c;Kendo UI for Vue为应用程序开发设定了标准&#xff0c;包括生成式AI集成、增强的设计系统功能和可访问的数据可视化。新的2024年第二季度版本为应用程序界面提供了人工智能(AI)提示&#xff0c;从设计到代码的生产力增强、可访问性改…

arXiv2024.8.6 | LLaVA-OneVision:Easy Visual Task Transfer

Comment: Project Homepage: https://llava-vl.github.io/blog/2024-08-05-llava-onevision/ 论文标题&#xff1a;LLaVA-OneVision&#xff1a;Easy Visual Task Transfer 论文地址&#xff1a;https://arxiv.org/abs/2408.03326 GitHub&#xff1a;https://llava-vl.githu…

MTK Android12 SystemUI 手势导航 隐藏导航栏底部布局

问题:android12 平台手势导航情况下,app页面未设置全屏情况下,底部导航栏会有一个高度的颜色,底部导航会有一个手势导航提示条 需求:去掉手势导航情况下底部的导航栏和手势提示条 文章目录 相关资源修改问题描述解决方案代码跟踪中间提醒小方块代码查找底部手势导航条跟踪…

【实战】MFC客户端Python后端之仿造QQ聊天

项目概述 这里介绍一个很多年以前做的一个小项目&#xff0c;新手小白可以参考学习。本项目旨在开发一个功能丰富的即时通讯及聊天室系统&#xff0c;类似于QQ&#xff0c;具备客户端与服务端通讯、多人聊天室、界面友好度、一对一聊天、通讯内容加密、服务端与数据库交互等功能…

【学习笔记】Matlab和python双语言的学习(非线性规划法)

文章目录 前言一、非线性规划法二、例题&#xff1a;选址问题1.确定决策变量2.确定约束条件3.确定目标函数4.建立模型5.求解 三、代码实现----Matlab1.Matlab 的 fmincon 函数&#xff08;1&#xff09;基本用法&#xff08;2&#xff09;简单示例 2.Matlab 代码第一问&#xf…

数字货币市场历史数据获取API(含源代码)

加密数字货币市场历史数据获取API&#xff08;含源代码&#xff09; 数字货币市场历史数据获取API&#xff08;含源代码&#xff09;1. Binance API运行结果BTCUSDT.csv 文件截图 2. CoinGecko API3. CryptoCompare API总结 数字货币市场历史数据获取API&#xff08;含源代码&a…

关闭Windows安全中心

打开Windows安全中心的病毒和威胁防护。 打开该选项的管理设置。 关闭实时保护。

【Scene Transformer】scene transformer论文阅读笔记

文章目录 序言(Abstract)(Introduction)(Related Work)(Methods)(Scene-centric Representation for Agents and Road Graphs)(Encoding Transformer)(Predicting Probabilities for Each Futures)(Joint and Marginal Loss Formulation) (Results)(Discussion)(Questions) sce…

【网络基础一】几乎不讲任何网络协议细节,搭建网络基本结构

文章目录 问题认识“协议”计算机通信问题技术问题应用问题 协议分层那么网络分层应该怎么分层呢&#xff1f; 统编程帮助我们处理数据&#xff0c;网络编程帮助我们获取数据&#xff0c;网络配上我们写的线程池模块很快就搭建起来了。 问题 网卡是文件吗&#xff1f; 是的&am…

24暑假算法刷题 | Day30 | 贪心算法 IV | 452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间

目录 452. 用最少数量的箭引爆气球题目描述题解 435. 无重叠区间题目描述题解 763. 划分字母区间题目描述题解 452. 用最少数量的箭引爆气球 点此跳转题目链接 题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中…

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计

文章目录 1. 五种数据访问模式1.1 在线访问1.2 DAO1.3 DTO1.4 离线数据模式1.5 对象/关系映射 (O/R Mapping) 2. 工厂方法模式在数据访问层应用3 ORM、Hibernate与CMP2.0设计思想3.1 ORM3.2 Hibernate1&#xff09;概述2&#xff09; Hibernate的架构&#xff08;2023年的考题&…

【Web开发手礼】探索Web开发的秘密(十八)-Vue2(4)部门管理页面、路由、打包部署

主要介绍了部门管理页面、路由、打包部署&#xff01;&#xff01;&#xff01; 文章目录 前言 部门管理页面 Vue路由 打包部署 打包 部署 总结 前言 主要介绍了部门管理页面、路由、打包部署&#xff01;&#xff01;&#xff01; 部门管理页面 <template><div>&…

云手机在海外社交媒体运营中的作用

随着社交媒体的全球普及&#xff0c;海外社交媒体运营成为众多企业与个人提升品牌影响力和扩大市场份额的重要策略。在这一进程中&#xff0c;海外云手机以其独特的功能&#xff0c;为海外社交媒体运营提供了强大的支持。 那么&#xff0c;海外云手机在海外社交媒体运营中究竟扮…

展馆室内导航系统:增强现实技术与数据可视化分析在展馆中的应用

随着科技的飞速发展&#xff0c;展览行业正经历着前所未有的变革。作为信息交流与文化传播的重要场所&#xff0c;展馆在吸引访客、展示展品方面扮演着至关重要的角色。然而&#xff0c;在信息爆炸、时间宝贵以及访客需求日益多样化的今天&#xff0c;传统展馆在导览、管理和服…

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃 1.背景 营销 Agent 指的是在营销过程中洞察客户并作出决策以及行动的 AI 智能体,包括感知、理解、决策、交互、反馈多个模块。对话 SOP 是交互模块中非常重要的部分,如何在缺少数据的情况下快速实现千人…

Java数组的类名是什么以及数组相关操作的指令有什么?

写在前面 不知道你想过没有&#xff0c;我们常说数组也是对象&#xff0c;既然是对象&#xff0c;肯定要有一个类名称了&#xff0c;那么&#xff0c;数组的类名称是什么呢&#xff1f;数组相关的操作对应的指令又是什么呢&#xff1f;本文就一起来看下。 1&#xff1a;叨叨叨…

大数据面试SQL(六):共同使用ip用户检测问题

文章目录 共同使用ip用户检测问题 一、题目 二、分析 三、SQL实战 四、样例数据参考 共同使用ip用户检测问题 一、题目 现有用户登录日志表&#xff0c;记录了每个用户登录的IP地址&#xff0c;请查询共同使用过3个及以上IP的用户对。 样例数据&#xff1a; 结果数据&…