数码管驱动芯片TM1640的使用

一、接口时序层介绍与函数编写

图片

图片

这里介绍了数据传输接口时序图。时序图,就是数据按照时间变换的图。时间是从左到右进行的,就像数学里的时间轴T。看时序图需要遵循以下规则,从左到右,从上到下来看时序图。仔细看开始条件和结束条件那里,有一个浅浅的竖线。观察SCLK和DIN哪个先改变电平状态。

图片

图片

图片

图片

图片

图片

下面主要写数据传输,如何通过IIC接口传输一个字节的数据:一个字节8位,每一位只能在SCLK低电平期间改变,在高电平期间,DIN口数据要保持不变。可以这样理解,SCLK高电平时,TM1640会读取DIN上的电平信号,所以,这个时候单片机不要改变DIN上的电平,否则,读取会错误。当SCLK低电平时,DIN电平读取完毕了,这个时候,单片机可以改变DIN的电平。一个字节8位,先传递第0位数据,最后是传递第7位数据。下面看程序。

图片

图片

这个程序很简单啊,就是SCLK先变低,然后,判断,数据的最低位是否为高电平,如果是高电平,DIN就输出1,否则输出0。然后SCLK变高,TM1640读取数据,然后把下一位数据移动到最低位,然后重复上面的步骤,一直到8位传输完毕。到此,TM1640的接口时序就编写完毕了。

二、通信协议层介绍与函数编写

下面我们看看TM1640的通信协议,根据手册有两种模式,固定地址和地址自加模式。

图片

图片

图片

图片

图片

图片

在第五步里,我们要看通讯协议,我们可以发现是按照cmd+data这种格式来传输的。那么我们先了解下命令码。B7 B6两位是不同命令码的识别码,一共三种命令码:数据命令,抵制命令,显示命令。比如,01表示数据命令,剩余的6位是具体的数据命令的区分。一个芯片会有多种数据命令。我们这里地址模式就是通过数据命令来设置的。常用的地址自增模式,也就是默认模式,它的命令码是01000000B = 0x40。自增模式里command1就是用来设置地址模式的。可以设置固定地址模式,自增模式。

那么,command2很明显就是地址了,因为这个命令后面紧跟着是data,所以,肯定是地址。那么,地址怎么设置?上面的表格地址命令B7 B6为11就是表示地址命令,剩余的位就是表示地址。TM1640一共能驱动16位数码管,那么地址就有16个。地址从0到16,所以地址命令码就是0xC0+地址(0-16)。

地址后面就是跟着的数据,这个很简单,直接发送数据就可以了。Command3是啥,手册上说是控制显示,研究了下,是关于数码管显示的亮度的。看下图,我们知道10是显示命令,剩余的位数表示亮度。

图片

图片

好了,这样子,通讯协议基本上了解了。一共三部分,先是设置地址模式,然后设置地址,发送数据,最后设置显示亮度。这样一看,是不是很简单了。这里,亮度设置码我们用宏定义表示了下,便于我们阅读代码。

图片

图片

具体的代码如何写呢?下面我以地址自增模式,显示16位数码管。

图片

图片

图片

图片

上面三个函数就是直接和芯片相关的操作函数。当然了,地址设置,亮度设置一般只需要设置一次。因为TM1640默认是地址自增模式,所以,不需要我们设置。在芯片初始化阶段,我们只要把需要显示的数据发送到TM1640就行了,然后开启显示就OK了。在while循环里,我们只需要定时刷新数码管的数据显示缓存就行了。那么这里,有个注意点,就是显示数据变化时,才执行数据发送函数。这里需要使用memcmp函数比较两个数组内容是否一致。一个数组是存放要显示的数据,一个数组存放的是上次显示的数据。

三、应用层函数编写以及数据​构造

这里数据显示构造了一个联合体类型,见下图。

图片

图片

我们定义了一个联合体数组,我们知道联合体成员具有共同的地址,这样做有什么好处么?好多很多,首先可以对数码管进行直接操作,也可以对数码管进行位操作。在上电的时候,一般会把所有的数码管点亮,用来检测是否有数码管坏掉的显示段。看下面这张图,列出了常见的显示缓存操作。

图片

图片

数码管用户层函数就两个,一个是数据显示数组刷新函数,另一个就是数据发送函数。我们想显示哪段LED,就向联合体数组里写数据,然后,在数据发送函数里检测数据是否变化,如果变化,就把联合体数组里的数据发送出去。

最后,总结一下关于芯片的​驱动程序结构。

最底层是接口数据传输层,这里传输是按照位数据传输,这一层又叫做接口时序层。start(),stop(),TM1640_WriteData()都属于接口时序层。

中间层是通信数据协议层,这一层主要是说明单片机和芯片按照什么格式来传输数据。地址模式设置函数,数据发送函数,显示亮度显示函数都属于这一层。

最后,就是用户层,这一层主要是构造数据结构,以及编写具体的用户应用。比如,数据刷新函数,缓存检测函数。又或者根据具体的需要,定时关闭数码管显示。还有就是数据显示函数,显示数字456,要把456拆分成4,5,6分别送到显示数组里。这些都属于具体的应用。不管是数码管还是其他显示屏,这些用户层都是共用的。当我们,更换使用屏时,只需要修改低层代码就行了。

要掌握根据时序图写程序的方法,这个很重要。在以后学习中,我们可以不写驱动程序,使用别人的程序也是可以的,但是,你要有写驱动程序的能力。还有就是掌握程序的分层方法,规范合理的程序结构有利于程序的阅读和修改。

### TM1640驱动程序的下载、安装与使用 #### 下载 对于TM1640驱动程序的获取,可以参考类似的开源项目来理解如何操作。有一个基于STM32微控制器的TM1628驱动程序可供借鉴[^1]。虽然这是针对TM1628的设计,但是考虑到两者都是LED驱动芯片,在某些方面具有相似性。然而,更直接的方式是寻找专门针对TM1640的资料。 实际上,有具体的例子展示了基于STM32CubeMX配置并使用TM1640的过程[^2]。这表明可以通过官方渠道或者其他社区资源找到适用于特定硬件平台(如STM32系列单片机)的TM1640驱动库或应用实例。 为了获得最准确和最新的TM1640驱动程序及相关文档,建议访问制造商官方网站或者查阅目标开发板配套材料中的链接。如果是在Arduino或其他平台上工作,则应探索对应生态系统的资源库。 #### 安装 通常情况下,“安装”这个词更多用于描述计算机软件而非嵌入式设备上的固件加载过程。但对于像TM1640这样的外设来说,“安装”的概念主要体现在将其初始化代码加入到主控单元(MCU)项目的启动序列里,并确保能够通过SPI/IIC接口正常通信。 具体而言,当涉及到STM32这类MCU时,一般会先利用IDE工具链(比如Keil, IAR 或者 STM32CubeIDE),将必要的头文件(.h)以及源码文件(.c/.cpp)添加至工程目录下;接着按照API指南编写相应的调用函数完成初始化设置等工作。值得注意的是,由于TM1640内部集成了数据锁存机制,因此一旦发送指令给它之后就能保持当前状态直到下次更新命令到来前无需持续刷新屏幕内容。 #### 使用教程 要成功运用TM1640显示屏,首先要熟悉其基本原理——即它是怎样接收来自MCU的数据并通过内置寄存器控制各个像素点亮度变化从而形成字符图形输出的。其次就是掌握好编程技巧,包括但不限于: - 设置正确的波特率以便于串行通讯; - 编写合适的位模式映射算法转换欲显示的信息为适合传输的形式; - 处理可能出现的各种错误情况以提高系统稳定性。 下面给出一段简单的伪代码作为入门指导: ```c // 初始化TM1640模块 void tm1640_init(void){ // 配置GPIO引脚方向等参数... } // 向TM1640发送一字节数据 void tm1640_write_byte(uint8_t data){ // 实现SPI/IIC协议的具体细节... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值