TM1640入门学习手册

TM1640入门学习手册

TM1640概述

TM1640 是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 驱动等电路。本产品性能优良,质量可靠。主要应用于电子产品LED显示屏驱动。采用SOP28、SSOP28的封装形式。

特性说明

  • 采用CMOS工艺
  • 显示模式(8 段×16 位)
  • 辉度调节电路(占空比 8 级可调)
  • 两线串行接口(SCLK,DIN)
  • 振荡方式:内置RC振荡
  • 内置上电复位电路
  • 封装形式:SOP28、SSOP28

管脚定义:

image

管脚功能定义:

image

逻辑电源电压 为5V,SEG 脚驱动拉电流(VDD = 4.5~ 5.5 V、Vo = 0V)为90mA;GRID脚驱动灌电流200 mA;最大时钟频率为1MHz;

接口说明

微处理器的数据通过两线总线接口和 TM1640 通信,在输入数据时当 CLK 是高电平时,DIN 上的信号必须保持不变;只有 CLK 上的时钟信号为低电平时,DIN 上的信号才能改变。数据的输入总是低位在前,高位在后传输.数据输入的开始条件是 CLK 为高电平时,DIN 由高变低;结束条件是 CLK 为高时,DIN 由低电平变为高电平。
指令数据传输过程如下图:
image

这里我们使用写 SRAM 数据地址自动加 1 模式:
image

Command1:设置数据
Command2:设置地址
data1~N:传输显示数据(最多 16 字节,不能多写)
Command3:控制显示

数据指令

指令用来设置显示模式和LED 驱动器的状态。
在指令START有效后由DIN输入的第一个字节作为一条指令。经过译码,取最高B7、B6两位比特位以区别
不同的指令。
image

数据 命令设置:
image

地址命令设置:
image

上电时,地址默认设为C0H。
显示数据与芯片管脚以及显示地址之间的对应关系如下表所示:
image

显示控制 命令
image

实例1 EgTM1640——【基于CH32V103】

本节我们目标是实现TM1640点亮16位共阴极数码管,显示“0~F”数字;

1 硬件设计

GPIO初始化配置 SCL(PB6) SDA(PB7);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C;

2 软件设计

首先是TM1640初始化TM1640_GPIO_INIT,设置为开漏极输出,如下:

/*********************************************************************
 * @fn      TM1640_GPIO_INIT
 *
 * @brief   Initializes GPIOB.6 GPIOB.7
 *
 * @return  none
 */
void TM1640_GPIO_INIT(void) {

    GPIO_InitTypeDef GPIO_InitStructure = { 0 };

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB, GPIO_Pin_6);//SCL
    GPIO_SetBits(GPIOB, GPIO_Pin_7);//SDA
}

接着设置TM1640,并写入段码

void TM1640_Handle(void)
{
    u8 i;
    TM1640_Generate_START();
    TM1640_WriteData(0x40);//数据命令设置:普通模式,地址自动加一
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(0xC0);地址命令设置:初始地址00H
    for(i=0;i<16;i++)  //发送16位显示数据
    {
        TM1640_WriteData(CODE[i]);
    }
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(0x8c);    //显示控制:显示开,脉冲宽度设为11/16
    TM1640_Generate_STOP();
    Delay_Ms(10);

}

3 下载验证

显示"0~F";

image

4 入门视频

TM1640驱动原理介绍以及基于CH32V103实现TM1640控制点亮16位共阴极数码管

实例2 EgTM1640——【基于STM32F103】

本节我们目标是实现TM1640点亮16位共阴极数码管,显示“0~F”数字;

1 硬件设计

GPIO初始化配置 SCL(PB6) SDA(PB7);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C;

2 软件设计

首先是TM1640初始化MX_GPIO_Init,设置为开漏极输出,如下:

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
  /*Configure GPIO pins : PB6 PB7 */
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

接着设置TM1640,并写入段码

void TM1640_Handle(void)
{
    u8 i;
    TM1640_Generate_START();
    TM1640_WriteData(0x40);//数据命令设置:普通模式,地址自动加一
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(0xC0);地址命令设置:初始地址00H
    for(i=0;i<16;i++)  //发送16位显示数据
    {
        TM1640_WriteData(CODE[i]);
    }
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(0x8c);    //显示控制:显示开,脉冲宽度设为11/16
    TM1640_Generate_STOP();
    delay_ms(10);
}

其中,

TM1640_WriteData(0x40);是Command1数据命令设置,普通模式,地址自动加一;

TM1640_WriteData(0xC0);是Command2地址命令设置,初始地址00H;

TM1640_WriteData(CODE[i]);是传输显示数据(最多 16 字节,不能多写);

TM1640_WriteData(0x8c);是Command3控制显示:显示开,脉冲宽度设为11/16

3 下载验证

显示"0~F":

image

4 入门视频

TM1640驱动原理介绍以及基于STM32F103实现TM1640控制点亮16位共阴极数码管

实例3 EgTM1640——【基于CH32V003】

本节我们目标是实现TM1640点亮16位共阴极数码管,显示“0~F”数字;

1 硬件设计

GPIO初始化配置 SCL(PC1) SDA(PC2);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C;

2 软件设计

首先是TM1640初始化TM1640_GPIO_INIT,设置为开漏极输出,如下:

void TM1640_GPIO_INIT(void) {

    GPIO_InitTypeDef GPIO_InitStructure = { 0 };

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_SetBits(GPIOC, GPIO_Pin_1);//SCL
    GPIO_SetBits(GPIOC, GPIO_Pin_2);//SDA
}

接着设置TM1640,并写入段码

void TM1640_Handle(void)
{
    u8 i;
    TM1640_Generate_START();
    TM1640_WriteData(0x40);//数据命令设置:普通模式,地址自动加一
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(0xC0);地址命令设置:初始地址00H
    for(i=0;i<16;i++)  //发送16位显示数据
    {
        TM1640_WriteData(CODE[i]);
    }
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(0x8c);    //显示控制:显示开,脉冲宽度设为11/16
    TM1640_Generate_STOP();
    Delay_Ms(10);

}

其中,

TM1640_WriteData(0x40);是Command1数据命令设置,普通模式,地址自动加一;

TM1640_WriteData(0xC0);是Command2地址命令设置,初始地址00H;

TM1640_WriteData(CODE[i]);是传输显示数据(最多 16 字节,不能多写);

TM1640_WriteData(0x8c);是Command3控制显示:显示开,脉冲宽度设为11/16

3 下载验证

显示"0~F":

image

4 入门视频

实例4 EgTM1640——【基于CH32V203】

本节我们目标是优化TM1640驱动;

1 硬件设计

GPIO初始化配置 SCL(PC1) SDA(PC2);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C;

2 软件设计

首先是TM1640.h:

/*
 * LED.h
 *
 *  Created on: May 22, 2022
 *      Author: LDSCITECHE
 */

#ifndef MYBSP_TM1640_H_
#define MYBSP_TM1640_H_

#include "ch32v20x.h"

typedef enum {
    COMM_ADDR_PLUS_ONE = 0x40, 
    COMM_ADDR_FIXED = 0x4C,
} TMDatComm_Typedef;

typedef enum {
    START_ADDR1 = 0xC0,
    ADDR2,
    ADDR3,
    ADDR4,
    ADDR5,
    ADDR6,
    ADDR7,
    ADDR8,
    ADDR9,
    ADDR10,
    ADDR11,
    ADDR12,
    ADDR13,
    ADDR14,
    ADDR15,
    ADDR16
} TM_Addr_Typedef;

typedef enum {
    PWM_1P16=0x88,
    PWM_2P16,
    PWM_4P16,
    PWM_10P16,
    PWM_11P16,
    PWM_12P16,
    PWM_13P16,
    PWM_14P16,
    PWM_OFF=0x80,

} TMDispCtrlTypedef;
extern unsigned char CODE[16]; 


extern void TM1640_GPIO_INIT(void);
extern void TM1640_Handle(TMDatComm_Typedef DatComm,TM_Addr_Typedef Addr,
        TMDispCtrlTypedef CommDisp,u8* data);
#endif /* MYBSP_LED_H_ */

接着设置TM1640.c,

/**
 * @brief TM1640_Handle
 * 
 * @param DatComm 
 * @param Addr 
 * @param CommDisp 
 * @param data 
 */
void TM1640_Handle(TMDatComm_Typedef DatComm,TM_Addr_Typedef Addr,
        TMDispCtrlTypedef CommDisp,u8* data)
{
    u8 i;
    TM1640_Generate_START();
    TM1640_WriteData(DatComm);
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(Addr);
    for (i = 0; i < 16; i++)
    {
        TM1640_WriteData(data[i]);
    }
    TM1640_Generate_STOP();

    TM1640_Generate_START();
    TM1640_WriteData(CommDisp);
    TM1640_Generate_STOP();
    Delay_Ms(10);

}

3 下载验证

显示"0~F":

image

4 入门视频

(DatComm);
TM1640_Generate_STOP();

TM1640_Generate_START();
TM1640_WriteData(Addr);
for (i = 0; i < 16; i++)
{
    TM1640_WriteData(data[i]);
}
TM1640_Generate_STOP();

TM1640_Generate_START();
TM1640_WriteData(CommDisp);
TM1640_Generate_STOP();
Delay_Ms(10);

}





### 3 下载验证

显示"0~F":

[外链图片转存中...(img-FvI9M71x-1712250015668)]

### 4 入门视频



  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值