提示:TM1640 最大可以驱动16个8位数码管
一、引脚描述
如图,TM1640 的 GRID1–GRID16 一共16个脚连接共阴数码管的阴极,SEG1–SEG8连接数码管的8个阳极,MCU通过SCLK和DIN将16个数据对应发送到 TM1640的16个地址里面,然后TM1640就会根据这些数据自动扫描驱动16个数码管显示对应的数据,不再需要MCU扫描操作。
二、通信协议
本来有两种操作方式,但是我一般使用数据地址自动加1模式:
1.Command1:设置数据
要发送数据 B7B6 = 01 使用地址自动加1模式所以 B3B2 = 00 所以 发送 0x40
2.Command2:设置地址
所以我们发送 0xC0 地址后,再接着发送16个数据就可以了,因为地址会自动加1
3.data1~N:传输显示数据
这里我们固定发送16个字节数据,每一个字节对应显示一个8段数码管
注意: 芯片显示寄存器在上电瞬间其内部保存的值可能是随机不确定的,此时客户直接发送开屏命令, 将有可能出现显示乱码。 所以我司建议客户对显示寄存器进行一次上电清零操作,即上电后向16位显存地址 (C0H-CDH) 中全部写入数据0x00。
4.Command3:控制显示
控制显示关,发送 0x80
控制显示开,发送 0x88 (0x88亮度最低,我们一般会设置亮度高一点)
三、程序编写
我们这里使用 QuecPython 编写
from machine import Pin
import utime
# 定义TM1640的引脚
DIN_PIN = Pin(Pin.GPIO23, Pin.OUT) # CLK引脚
CLK_PIN = Pin(Pin.GPIO24, Pin.OUT) # DATA引脚
# TM1640的命令定义
CMD_START = 0x8A
CMD_DISP_ON = 0x88
CMD_DISP_OFF = 0x80
def start