一、根本概述

TM1620是一种LED(发光二极管显现器)驱动操控专用IC,内部集成有MCU数字接口、数据锁存

器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。首要适用于家电设备(智能热

水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管或LED显现设备。

二、根本的特性阐明

  • 选用CMOS工艺

    显现形式(8 段6 位~10段4位)

    辉度调理电路(8 级占空比可调)

    串行接口(CLK,STB,DIN)

    振动方法:内置RC振动

    内置上电复位电路

    内置数据锁存电路

    内置针对LED反偏漏电导致暗亮问题优化电路

    抗干扰能力强

    封装形式:SOP20

一种LED驱动专用操控电路

三、管脚界说

一种LED驱动专用操控电路

四、指令阐明

一种LED驱动专用操控电路

五、运用电路

TM1620驱动共阴数码屏硬件电路图(18)

一种LED驱动专用操控电路

1、VDD、GND之间滤波电容在PCB板布线应尽量靠近TM1620芯片放置,加强滤波效果。

2、衔接在DIN、CLK、STB通讯口上下拉三个100pF电容能够降低对通讯口的干扰。

3、因蓝光数码管的导通压降压约为3V,因此TM1620供电应选用5V。

六、电气参数

一种LED驱动专用操控电路
一种LED驱动专用操控电路

七、封装形式

一种LED驱动专用操控电路
一种LED驱动专用操控电路

本项目运用的是6位8段的数码管,即0x020。

留意:芯片显现寄存器在上电瞬间其内部保存的值或许是随机不确定的,此刻我们直接发送开屏指令,将有或许出现显现乱码。所以建议对显现寄存器进行一次上电清零操作,即上电后向12位显存地址(00H-0BH)中全部写入数据0x00。具体操作方法是:初始化TM1620时运用(2)数据指令中的自动地址添加指令,顺次给所有地址写0x00。

八、硬件电路

一种LED驱动专用操控电路

TM1620的STB、CLK、DIN引脚分别衔接单片机的PC0、PC1、PC2引脚。

初始化:

初始化TM1620的3个输出引脚:

代码部分:

界说结构体类型:

typedef struct
{
	Brightness_level_t  Brightness;
	void (*TM1620_Init)(void);                          //TM1620初始化
	void (*Disp)(Disp_NUM_t,uint8_t,Disp_DP_Status_t);  //数码管显现
} Display_t;

写入字节函数:

/*
	* @name   TM1620_Write_Byte
	* @brief  TM1620写入字节
	* @param  dat -> 待写入数据
	* @retval None      
*/
static void TM1620_Write_Byte(uint8_t dat) 
{
	uint8_t i = 0;
	CLR_STB;
	for(i=0;i<8;i++)
	{
		CLR_CLK;
		//准备数据位
		if((dat & BIT0) == BIT0) //BIT0为宏界说,为0x01
			SET_DIN;
		else
			CLR_DIN;
		dat = dat >> 1; //移位,为发送下一位做准备
		//拉高CLK,发送数据	
		SET_CLK;	
		__nop();
	}	
}

TM1620初始化函数:

/*
	* @name   TM1620_Init
	* @brief  TM1620初始化
	* @param  None
	* @retval None      
*/
static void TM1620_Init() 
{
	uint8_t i = 0;
	//设置显现形式
	TM1620_Write_Byte(Disp_Mode_GRID6_SEG8); 
	SET_STB;  
    //设置地址自动添加形式
	TM1620_Write_Byte(Write_Data_Addr_Auto_Add); 
	SET_STB;
	//利用循环清除显现寄存器地址
	TM1620_Write_Byte(Disp_SFR_Addr_00H); //首地址
	for(i=0;i<Disp_SFR_Addr_Num;i++)
		TM1620_Write_Byte(0x00); 
    SET_STB; 
	//调理数码管辉度
    TM1620_Write_Byte(Display.Brightness);
	SET_STB; 
}

数码管显现函数:

/*
	* @name   Disp
	* @brief  数码管显现
  * @param  Disp_NUM:       数码管编号
            Dat             数据0~F
            Disp_DP_Status  小数点显现状态
	* @retval None      
*/
static void Disp(Disp_NUM_t Disp_NUM,uint8_t Dat,Disp_DP_Status_t Disp_DP_Status) 
{
	//查看参数范围
	if(Dat > 0x0F)
	{
		System.Assert_Failed();
	}
	//设置显现形式
	TM1620_Write_Byte(Disp_Mode_GRID6_SEG8); 
	SET_STB;
	//设置地址固定形式
	TM1620_Write_Byte(Write_Data_Addr_Fix); 
	SET_STB;
	//写地址(数码管编号)
	TM1620_Write_Byte(Disp_NUM);
	//写数据,并判别有无小数点
	if(Disp_DP_Status == Disp_DP_ON)
		TM1620_Write_Byte(Disp_Decode[Dat] + 0x80); 
    //Disp_Decode数组存贮的是数码管显现“0”~“F”的译码。
	else
		TM1620_Write_Byte(Disp_Decode[Dat]);
	SET_STB;
	//设置辉度
  TM1620_Write_Byte(Display.Brightness);
	SET_STB; 
}

外部中止0回调函数:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == KEY1_Pin)
	{
		LED.LED_Flip(LED2);
		switch(Display.Brightness)
		{
			case Brightness_level_1: Display.Brightness = Brightness_level_2; break;
			case Brightness_level_2: Display.Brightness = Brightness_level_3; break;
			case Brightness_level_3: Display.Brightness = Brightness_level_4; break;
			case Brightness_level_4: Display.Brightness = Brightness_level_5; break;
			case Brightness_level_5: Display.Brightness = Brightness_level_6; break;
			case Brightness_level_6: Display.Brightness = Brightness_level_7; break;
			case Brightness_level_7: Display.Brightness = Brightness_level_8; break;
			case Brightness_level_8: Display.Brightness = Brightness_level_1; break;
			default: Display.Brightness = Brightness_level_3;
		}
	}
}

九、立创商城供货信息

一种LED驱动专用操控电路
一种LED驱动专用操控电路