一、模块介绍
上图为使用的模块,顶部8个LED,8个数码管;中间TM1638芯片,右侧是8个二极管(非发光二极管);最下方是8个按键。
电路图如下图所示
二、TM1638
1、数据传输格式
在传输数据时,先将STB拉低,传输的每1个Bits数据都是在时钟的上升沿操作,即先将CLK拉低,如果需要传输0,则将DIO拉低,传输1则将DIO拉高,最后再将CLK拉高。在传输完成后,即上图中传输完8bits,最后将STB拉高。
拉高:电平置为1
拉低:电平置为0
2、数据传输的两种地址模式
数据传输时有两种模式可供选择,一种是地址增加模式,另一种是固定地址模式。两种模式设置将在[3.1 数据命令设置](#3.1 数据命令设置)中介绍。
2.1 地址增加模式
此命令模式下,可传输多个数据Data1n,Data1会传输至Command3设置的地址内,后面的数据Data2n写入后续的地址,地址自动加1。
其中前面的Command1、Command2如果与之前传输保持一致,也可不设置,直接跳过。
2.2 固定地址模式
其与地址增加模式的区别就是每个数据对应一个地址,且传输完一组需要将STB拉高,然后再拉底传输下一组。
3、指令说明
3.1 数据命令设置
如表中,传输数据为 0x44 表示为使用固定地址模式且写数据到寄存器,0x40 则表示自动地址增加模式且写数据到寄存器。
0x44 表示十六进制,二进制为 0100 0100 也就对应上表的第4行加第1行。
0x40 表示十六进制,二进制为 0100 0000 也就对应上表的第3行加第1行。
3.2 地址命令设置
这一部分的地址需要结合寄存器地址进行介绍。
3.3 显示控制
设置8个数码管和8个LED灯的开关和亮度。0x8f,则表示显示开,且脉冲宽度为14/16(即亮度为最大)。
4、寄存器地址
-
00HL、00HU、01HL、01HU 寄存器地址都可表示 GRID1 。
(1)其中 HL 和 HU 分别表示为:
Ⅰ. HL 是指数码管显示寄存器(Display Data Register),该寄存器用于设置数码管的显示内容。
Ⅱ. HU 是指数码管控制寄存器(Display Control Register),该寄存器用于控制数码管的显示方式和闪烁效果。
这部分区别似乎在这个模块中并没有显示出来。
(2)00 和 01 的区别
上表中左边 00(0000 0000)、02(0000 0010)、04(0000 0100)、…、0E(0000 1110)其低位都为 0
上表中右边 01(0000 0001)、03(0000 0011)、05(0000 0101)、…、0F(0000 1111)其地位都为 1
我的理解就是:
当使用左边的地址,也就是最低为 1 时,其寄存器地址表示为 seg8 seg7 seg6 seg5 seg4 seg3 seg2 seg1,即 0000 0101 表示 seg1 和 seg3 为1,其他位为 0
而当使用右边的地址时,在本模块中,最低为用来控制 seg9的(也就是控制顶部的8个LED灯),其他位都是无效的,当最低位为1时,seg9为1,LED灯亮,为0时,seg9为0,LED灯灭。其他位可为任意值。
即使用 00H 表示 GRID1, 如果 0x01,表示 seg1 为 1, 其他为 0
而使用 01H 表示 GRID1,传输 0x01,表示的就是 seg9 为1。
上表中左边的是用来控制数码管的,右边是用来控制顶部的LED灯的。
在设置 GRIDx 地址时,需要结合[3.2 地址命令设置](#3.2 地址命令设置)进行使用,即 00H 传输的地址为 0xc0(1100 0000)。
不符合[3.2 地址命令设置](#3.2 地址命令设置)的地址(最高的两位不为1的地址)都是无效地址,都会控制最后一个数码管。
5、具体使用
5.1 LED灯
LED灯分别对应着GR1~8,与SEG9相连,且只有SEG9为1时灯才会亮。
例如:想要点亮LED2,则地址对应为GR2,对应的4、寄存器地址右边的地址,为 03H,再结合[3.2 地址命令设置](#3.2 地址命令设置),写入的数据应为 0xc3(1100 0011)。然后再将seg9置为1,也就是数据的最低位为1即可,ox01(0000 0001)、0x03(0000 0011)、…、0xff(1111 1111)都可实现点亮LED2。
注意:每次只能控制一个LED灯,既不能同时使 GR1 和 GR2 为1,如果想要多个LED灯同时亮,分别操作即可,即需要点亮LED1~3,就先点亮LED1,再点亮LED2,最后点亮LED3。它们并不会相互影响,4、寄存器地址表中的地址00H到OFH对应着16个寄存器地址,每个地址里面有8位,而最低位为1的是控制8个LED灯的,最低为0的就是控制数码管的,对他们操作不会产生影响(我的理解)
5.2 数码管
GR1~8分别对应数码管的位置1~8,即第一个数码管对应GR1、…、第八个数码管对应GR8。
单个数码管是由8个LED构成,分别为a、b、c、d、e、f、g、DB(左下角的点),它们又分别对应SEG1~8。
例如:想要使第二个数码管显示“0”,则地址对应为GR2,对应的4、寄存器地址左边的地址,为 02H,再结合[3.2 地址命令设置](#3.2 地址命令设置),写入的数据应为 0xc2(1100 0010)。然后显示数字“0”,则需要点亮a、b、c、d、e、f,他们分别对应seg1~6,即写入的数据为 0x3f(0011 1111)。
以上内容仅为个人理解,可能存在错误。