TM1637数码管模块的使用

这个数码管模块有意思的地方不是中间有两个小点,而是它的控制方式:只需要两个引脚就能够控制,通信方式与iic很像。
tm1637的通信比iic要简单些,可以作为iic入门的学习,还是有一定帮助的。
模块简介
先说明一下,tm1637是天微电子的一款驱动芯片,数码管是普通的共阳数码管,模块是连接了驱动芯片和数码管的板子,模块的功能不完全代表芯片的功能。
相比于直接使用数码管,这一模块有这些优点:
占用的io少,只需要2个io口就能控制;驱动芯片带有显存,不需要占用资源做动态显示;不需要写pwm程序,可以直接调节数码管的亮度;价格不高,两块多一个,淘宝到处都有卖(误)。此外,tm1637还有按键扫描功能,可以接8*2bit的矩阵键盘,可惜这模块并没有引出相应的引脚。
相比于iic的通信方式,tm1637没有设备地址,直接发送数据,且传输数据时是按从低位到高位的顺序。
通信内容
简单介绍完毕,因为这模块只有数码管显示功能,下面就只以控制数码管显示为例,说说怎么玩这个模块。
tm1637芯片引脚图
tm1637的数据指令只有3种,以最高两位比特位b7、b6进行区别:
一个完整数据指令包含四个部分(按传输顺序排列):
开始命令数据指令应答信号结束命令1、开始与结束命令
当clk在高电平时,dio从高变为低为开始命令,从低变为高为结束命令。
除了开始与结束命令外,在传输其他数据时dio都不能在clk为高电平时发生变化,否则会影响数据的传输。
如果在指令或数据传输时发送了结束命令,那么当前传输的指令或数据无效(之前传输的会保留),通信会被初始化。
2、应答信号
当传输数据正确时,tm1637会在第八个时钟的下降沿,产生一个应答信号ack将dio拉低,在第九个时钟结束之后释放dio。
翻译一下就是,每过了8个时钟,在第9个时钟dio会变为低电平,第10个时钟才可以开始发送下一部分数据。
判断应答信号可以知道数据是否正确传输:先将dio置高电平,若dio不被拉低,则数据没有正确传输。
3、数据指令
数据指令有三种:数据命令设置、地址命令与显示数据、显示控制。
数据命令设置:设置tm1637的通信模式与通信方式。显示控制命令设置:设置数码管的亮度。地址命令设置:对数码管进行段选和位选。
说明:为了配合数据手册的时序图,下面按1→3→2的顺序讲,这一顺序不会对实际效果产生影响。3.1、数据命令设置
数据命令设置包含三部分:数据读写模式设置、地址增加模式设置、测试模式设置。
在控制数码管时,数据读写模式设置、测试模式设置都是固定的,地址增加模式设置可以根据情况进行调整:
自动地址增加模式:
在设置了地址后,每传输完一个显示数据,地址会自动加一,当出现结束命令时停止。
举例:该模式下,假设进行位选选中第二个数码管后发送段选数据,当段选数据完成后,位选会自动选中第三个数码管。
固定地址模式:
在设置了地址后,后面只有一个显示数据,之后发送结束命令。
举例:该模式下,对每位数码管发送段选数据后位选不会自动加一,只能控制一位数码管;若需要控制多位,在发送完一次段选数据后需要再发送下一位数码管的位选数据。
3.2、地址命令设置
这一步开始就是真正的数码管控制了,和直接控制数码管的步骤一样,tm1637先处理地址命令(位选),随后处理显示数据(段选)。
位选:
该模块一共有4位共阳数码管(芯片最多能控制6个),地址从00h到03h,中间的小点由第二位数码管的小数点控制
段选:
显示数据一共8个比特位,从低位到高位对应着数码管的8个段(就是段选,一样一样的),需要注意数码管共阳与共阴的数据是相反的。
例如,需要控制第2位数码管显示数字2,需要发送以下数据(以固定地址模式为例):
【灰色】发送开始命令;【红色】发送地址命令(进行位选)0xc1(1100 0001);【绿色】tm1637产生ack应答;【蓝色】发送显示数据(进行段选)0x5b(0101 1011,共阳数码管显示数字2);【绿色】tm1637产生ack应答;【黄色】发送结束命令。3.3、显示命令设置
tm1637可以调节8级占空比:
需要注意,b3控制显示的开关,只有为1时数码管才会进行显示。
编程流程
下面结合一个例子,说说tm1637的通信流程。
假设需要控制第一位数码管显示2,第二位数码管显示3,模式为固定地址模式,亮度为最大亮度。
大致流程:
发送设置数据;发送数码管显示数据;发送亮度数据。第一步:发送设置数据
发送开始命令;进行数据命令设置,发送0x44(0100 0100);tm1637产生ack应答;发送结束命令;第二步:发送数码管显示数据
(和上面那个例子一样,看过上面的这里跳过就行了)
*发送开始命令;
*发送地址命令(进行位选)0xc0(1100 0000);*tm1637产生ack应答;
*发送显示数据(进行段选)0x5b(0101 1011,共阳数码管显示2);tm1637产生ack应答;发送结束命令。*发送开始命令;
*发送地址命令(进行位选)0xc1(1100 0001);*tm1637产生ack应答;
*发送显示数据(进行段选)0x4f(0100 1111,共阳数码管显示3);tm1637产生ack应答;发送结束命令。第三步:发送亮度数据
*发送开始命令;
*进行显示控制,发送0x8f(1000 1111);tm1637产生ack应答;发送结束命令。这里就完成了数码管的显示控制,流程不多,也比较简单。
再进一步,可以写一下计数程序:
前面提到过,tm1637有显存功能,当不对其进行控制时,会一直显示之前显示的数据。
假设之前显示的是1234,然后按上面的例子只对第一、第二位数码管发送了数据,那么显示的的就是2334。
如果不能正常显示,可以检查一下是否没设置亮度,以及数据传输是否按照要求。
这里推荐一个小东西:逻辑分析仪,20多元的、像u盘的那种就够了,这东西在我之前舵机的那篇文章中出现过,但它正真的作用是分析通信的时序,在检查数据传输时非常有用。
最后
兜兜转转最后还是在玩灯哈哈
像上面说的,这芯片的通信方式与iic类似,正在学习iic的同学可以尝试一下玩玩这个。
这里只是简单讲了下这一芯片的控制,要想了解这块芯片的更多玩法可以去看官方的数据手册。

课程概述与如何学好FPGA
chiplet和soc有什么区别?
WT2605-24SS音频解码芯片的参数及工作原理
金属可焊性试验方法及测量原理
全球半导体领域都有哪些重大的并购事件?
TM1637数码管模块的使用
基于ARM9的汽车视频监控防盗系统设计
测量器具的技术性能指标
蓝思科技消费电子产品外观防护玻璃项目正加快建设
嵌入式UART转CAN应用案例
什么是 GaN 氮化镓?2
如何精确的计量分析并设计三相智能电表非线性负载?
英特尔终止了与紫光展锐在5G芯片上的合作伙伴关系
变电所开关室SF6环境综合监控系统的组成及工作原理
新型电力系统发展蓝皮书发布,氢能发展安全不容忽视!
维智科技参编全国首个城市数字孪生地方标准
搭载长江存储闪存的消费级SSD产品推出
荣耀xSport PRO蓝牙耳机成为了2019年年度最佳运动耳机
宇瞻科技为嵌入式系统打造DDR3-1600高速内存模块
晶闸管触发电路应用实例