TM1637芯片驱动数码管 – play with TM1637 seven segment display driver
因为一个项目要使用到数码管,所以今天研究了一下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相关推荐
- KST-51单片机利用HC138芯片驱动数码管显示
学习笔记--HC138芯片驱动数码管显示 说说今天心情,刚刚上完学校老师里的单片机课,自己也迫不及待的拿出尘封已久的KST-51开发板在宿舍写写C51代码,玩玩数码管显示.初次写笔记,不好见谅哈! 本 ...
- 4位数码管显示模块TM1637芯片C语言驱动程序
一.概述 TM1637 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数 字接口.数据锁存器.LED 高压驱动.键盘扫描等电路.芯片手册已上传到资源,需要的可以下 ...
- Arduino UNO驱动TM1637四位时钟数码管显示时间
Arduino UNO驱动TM1637四位时钟数码管显示时间 一.TM1637简介 二.引脚定义 三.Arduino UNO与数码管模块接线 四.测试代码 五.实验结果 一.TM1637简介 TM16 ...
- TM1650芯片驱动四位数码管
文章目录 自言自语 一.芯片图 二.通讯协议 开始信号 终止信号 发送一字节数据 获取TM1650的应答 三.TM1650的各个功能 数码管显示 数码管关闭 数码管显示数字 自言自语 今天上班被丢了块 ...
- TM1637芯片使用(I2C总线协议学习),含完整程序
目录 1.TM1637芯片(大自然的搬运工) 芯片介绍 引脚图 时序图 其他关键 管脚功能 命令格式 封装 2. 51单片机程序编写 I2C_START(): I2C_WR(): I2C_ACK(): ...
- WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案
WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案 现代人除了写字楼及个别家庭在使用饮水机消费纯净水或蒸馏水外,大多数的家庭仍然是饮用烧开的自来水.而早前流行于欧 ...
- 定时器驱动数码管c语言程序,74hc595驱动数码管时间程序
74hc595驱动数码管时间程序 这里是电路图: 下面是51单片机驱动74hc595芯片的程序: #include //包含51单片机的头文件 # ...
- 蓝桥杯单片机DS1302时钟芯片驱动代码注释
蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...
- Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真
Arduino 74HC595驱动数码管0-9循环显示+Proteus仿真 Proteus仿真 实例代码(do{}while();实现方法) /*74HC595控制1位共阳数码管* * * * * * ...
最新文章
- 提防iostream使用中的一个“陷阱”
- 我在ChinaUnix上看到的有点点用的帖子
- java 序列化 例子_Java序列化和反序列化例子
- containerd镜像导入import和push命令 gzip压缩解压缩命令
- php网站搭建致命错误203终止,PHP致命错误:无法重新分配$this
- Oracle 11G 安装详解
- shiro-权限概述
- CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88...
- aws docker_如何使用Docker的功能来摆脱AWS Lambda函数的困境
- html里球是哪个单词,html tag是什么意思
- python中area是什么意思_Python案例 下面这个代码if item.area self.free_area:中item.area是在哪里定义的呢?...
- 鸿蒙系统怎么连wifi,鸿蒙入门:Hi3861 WiFi操作,热点连接
- CABAC 基础二-算术编码
- android 自定义menu菜单按键功能
- Android客户端之“微服私访”App的系统学习(一) 本地服务端环境的搭建和部署
- 手机突然间不能上网了,无线数据网络正常?
- 装机——恢复系统 Windows 10 自带一键还原
- 39岁单身程序员入住养老院
- 关于python无法显示中文的问题:SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding
- 续谈登录相关数据的安全加密策略——密码泄露事件杂谈之二
热门文章
- 苹果屏幕录制没有声音_有没有简单实用的屏幕录制软件推荐?
- 2017cad光标大小怎么调_cad光标设置,小编教你CAD的十字光标如何设置大小
- 9.FLINK Sink\API\自定义sink
- 与语音信号处理有关的java书籍_MATLAB在语音信号分析与合成中的应用 中文pdf扫描版[198MB]...
- 2/8法则系列 | 你真的了解二八法则吗?
- 玖逸云黑v1.4-更高级的云黑系统
- git pull出现“fatal: refusing to merge unrelated histories“
- ubuntu安装java_如何在Ubuntu系统上安装Java
- 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解
- thinkPHP 接口访问限制