因为一个项目要使用到数码管,所以今天研究了一下TM1637这款数码管驱动芯片,在这里做个记录,方便以后使用时参考。

最初以为芯片是I2C通信,想将几块不同的芯片挂在同一个I2C总线上,然后开始了研究。

开始先用arduino nano用一个芯片驱动一个数码管,按照上方电路图连接,得到一个奇怪的信号,无法正常点亮数码管,然后无意间发现将DIO的10k上拉电阻去掉就可以了。问题解决。

然后开始研究如何将两个芯片按照i2c的SCK/SDA的方式连接在一起,发现不成功,总是有一个芯片不亮,思考可能是地址设置的不正确,然后开始读数据手册,以及arduino的.cpp库文件

发现里面有一个自动地址增加模式和固定地址模式,就以为通过设置这个地址,我就可以在iic总线上找到对应的芯片并且显示出相应的数字了,然而事实并不是这样。

经过了一番搜索之后呢,发现全网都没有人尝试过将多个TM1637芯片挂在一个IIC bus上,而且有一个人说“TM1637不算iic通信,是自定义的2线通讯而已”,虽然都是两根线,都有开始信号、结束信号、应答…但却不是IIC, 这时才意识到这个芯片就没有这个功能。

然后开始研究替代方案,在arduino论坛 [1] 看到有一个人尝试利用多颗该芯片驱动大于4位的数码管,而他的方法是每多一个芯片就多接两个i/o口,虽然很笨,但却有效,因此最终采用了这个方案。

然后开始仔细读数据手册 [2],并且利用示波器认真分析该芯片的时序。

下方是程序内容:

#include "TM1637.h"
TM1637 tm1637A(2,3);//CLK , DIO
void setup()
{tm1637A.init();//初始化tm1637A.set(7);//亮度最高
}
void loop()
{tm1637A.display(0,8);//在第0位显示数字8delay(100);
}

运行该程序后示波器捕捉到的信号:

里面的1、2、3、4正好就对应我们时序图中的四组数据。

因为我在程序里只设置了第0位点亮,所以第三组”Data1~n”数据中只有1组8位数据。如果是同时点亮4位数码管,则这里的数据就是32位。

首先我们来看第一组数据【设置数据】

我们在示波器上读取到的8位数据是“00100010”,查找数据手册中对应的说明,分别是写数据到显示寄存器、固定地址、普通模式

对应程序中()是这行代码0x44 ADDR_FIXED

然后是下一组【设置地址】

我们读到”00000011″,也就是说显示地址位00H,就意味着我要显示的数位是第0位数码管。

因此这里的地址并不是说I2C的地址,而是位选地址,这也就是为什么这里只有6个值的原因,因为这个芯片最多只支持同时驱动6位数码管。

下一组是【传输显示数据】

读到的是”11110010″,这里的值就表示了我们数码管要点亮哪些led,顺序是A,B,C,D,E,F,G,DP,显示出来后就是数字3,经过转换,我们可以得到十六进制的4F,也可以从TM1637.cpp文件中查看到这个值。

第四组是【显示控制】

读到的值是”11110001″,代表的含义是显示打开,并且亮度最高。

也就是在程序中setup()函数中的TM1637A.set(7)的功能,将数码管的亮度调至最高。

这就是这四组数据的含义分析,我们其实还可以直接打开TM1637.cpp文件,看到display中的这四部分数据的传输过程。

经过今天的研究,对这个芯片比较熟悉了,以后要点亮数码管,除了直接用I/O口驱动、利用有点小贵的MAX7219驱动,又多了一个便宜且好用的选择!

参考资料:


[1] 《How to connect multiple tm1637 based 7 segment display in one arduino 》

[2] 《LED Drive Control Special Circuit TM1637》

TM1637芯片驱动数码管 – play with TM1637 seven segment display driver相关推荐

  1. KST-51单片机利用HC138芯片驱动数码管显示

    学习笔记--HC138芯片驱动数码管显示 说说今天心情,刚刚上完学校老师里的单片机课,自己也迫不及待的拿出尘封已久的KST-51开发板在宿舍写写C51代码,玩玩数码管显示.初次写笔记,不好见谅哈! 本 ...

  2. 4位数码管显示模块TM1637芯片C语言驱动程序

    一.概述 TM1637 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数 字接口.数据锁存器.LED 高压驱动.键盘扫描等电路.芯片手册已上传到资源,需要的可以下 ...

  3. Arduino UNO驱动TM1637四位时钟数码管显示时间

    Arduino UNO驱动TM1637四位时钟数码管显示时间 一.TM1637简介 二.引脚定义 三.Arduino UNO与数码管模块接线 四.测试代码 五.实验结果 一.TM1637简介 TM16 ...

  4. TM1650芯片驱动四位数码管

    文章目录 自言自语 一.芯片图 二.通讯协议 开始信号 终止信号 发送一字节数据 获取TM1650的应答 三.TM1650的各个功能 数码管显示 数码管关闭 数码管显示数字 自言自语 今天上班被丢了块 ...

  5. TM1637芯片使用(I2C总线协议学习),含完整程序

    目录 1.TM1637芯片(大自然的搬运工) 芯片介绍 引脚图 时序图 其他关键 管脚功能 命令格式 封装 2. 51单片机程序编写 I2C_START(): I2C_WR(): I2C_ACK(): ...

  6. WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案

    WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案 现代人除了写字楼及个别家庭在使用饮水机消费纯净水或蒸馏水外,大多数的家庭仍然是饮用烧开的自来水.而早前流行于欧 ...

  7. 定时器驱动数码管c语言程序,74hc595驱动数码管时间程序

    74hc595驱动数码管时间程序 这里是电路图: 下面是51单片机驱动74hc595芯片的程序: #include                            //包含51单片机的头文件 # ...

  8. 蓝桥杯单片机DS1302时钟芯片驱动代码注释

    蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...

  9. Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真

    Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真 Proteus仿真 实例代码(do{}while();实现方法) /*74HC595控制1位共阳数码管* * * * * * ...

最新文章

  1. 提防iostream使用中的一个“陷阱”
  2. 我在ChinaUnix上看到的有点点用的帖子
  3. java 序列化 例子_Java序列化和反序列化例子
  4. containerd镜像导入import和push命令 gzip压缩解压缩命令
  5. php网站搭建致命错误203终止,PHP致命错误:无法重新分配$this
  6. Oracle 11G 安装详解
  7. shiro-权限概述
  8. CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88...
  9. aws docker_如何使用Docker的功能来摆脱AWS Lambda函数的困境
  10. html里球是哪个单词,html tag是什么意思
  11. python中area是什么意思_Python案例 下面这个代码if item.area self.free_area:中item.area是在哪里定义的呢?...
  12. 鸿蒙系统怎么连wifi,鸿蒙入门:Hi3861 WiFi操作,热点连接
  13. CABAC 基础二-算术编码
  14. android 自定义menu菜单按键功能
  15. Android客户端之“微服私访”App的系统学习(一) 本地服务端环境的搭建和部署
  16. 手机突然间不能上网了,无线数据网络正常?
  17. 装机——恢复系统 Windows 10 自带一键还原
  18. 39岁单身程序员入住养老院
  19. 关于python无法显示中文的问题:SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding
  20. 续谈登录相关数据的安全加密策略——密码泄露事件杂谈之二

热门文章

  1. 苹果屏幕录制没有声音_有没有简单实用的屏幕录制软件推荐?
  2. 2017cad光标大小怎么调_cad光标设置,小编教你CAD的十字光标如何设置大小
  3. 9.FLINK Sink\API\自定义sink
  4. 与语音信号处理有关的java书籍_MATLAB在语音信号分析与合成中的应用 中文pdf扫描版[198MB]...
  5. 2/8法则系列 | 你真的了解二八法则吗?
  6. 玖逸云黑v1.4-更高级的云黑系统
  7. git pull出现“fatal: refusing to merge unrelated histories“
  8. ubuntu安装java_如何在Ubuntu系统上安装Java
  9. 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
  10. thinkPHP 接口访问限制