大家好,欢迎来到IT知识分享网。
TM1640入门学习手册
TM1640概述
TM1640 是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 驱动等电路。本产品性能优良,质量可靠。主要应用于电子产品LED显示屏驱动。采用SOP28、SSOP28的封装形式。
特性说明
- 采用CMOS工艺
- 显示模式(8 段×16 位)
- 辉度调节电路(占空比 8 级可调)
- 两线串行接口(SCLK,DIN)
- 振荡方式:内置RC振荡
- 内置上电复位电路
- 封装形式:SOP28、SSOP28
管脚定义:
管脚功能定义:
逻辑电源电压 为5V,SEG 脚驱动拉电流(VDD = 4.5~ 5.5 V、Vo = 0V)为90mA;GRID脚驱动灌电流200 mA;最大时钟频率为1MHz;
接口说明
数据指令
实例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”;
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”:
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”:
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”:
4 入门视频
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-68)] 4 入门视频
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118029.html


