返回首页
18902855590

QQ客服

微信客服

欢迎光临, 深圳市三佛科技有限公司!

24小时全国服务热线:18902855590

新闻中心
联系我们
深圳市三佛科技有限公司
电话:18902855590
地址:深圳市龙华新区民清路50号油松民清大厦701

首页 » 新闻中心 » 产品新闻

TM1637驱动的工作原理是怎样的?深入解析
类别:产品新闻 发布时间:2025-01-17 11:09:28 浏览人数:14388

TM1637是一款广泛应用于数码管显示的驱动芯片,它通过简单的两线接口(时钟线CLK和数据线DIO)与微控制器进行通信,实现对数码管的控制。本文将详细介绍TM1637的驱动原理,帮助您更好地理解和使用这款芯片。



一、引脚功能


TM1637通常有20个引脚,分别为VCC、GND、CLK、DIO、KEY1和KEY2。各引脚功能如下:
  • VCC:电源正极,接3.3V或5V电源。
  • GND:电源负极,接GND。
  • CLK:时钟引脚,与微控制器的IO口相连。
  • DIO:数据输入/输出引脚,与微控制器的IO口相连。
  • KEY1、KEY2:按键引脚,可接至微控制器的IO口,实现按键功能。
  • SG1~SG8:输出(段) 2-9 段输出(也用作键扫描),N 管开漏输出
  • GRID6~GRID1:输出(位) 10-15 位输出,P 管开漏输出


二、通信协议


TM1637采用串行通信协议,通过CLK和DIO与微控制器进行通信。通信过程中,微控制器首先发送起始信号,然后发送指令和数据,最后发送结束信号。


1. 起始信号


起始条件是CLK为高电平时,DIO由高变低。具体实现如下:


c
void TM1637_Start(void){
 TM1637_W_SDA(1);
 TM1637_W_SCL(1);
 TM1637_W_SDA(0);
 TM1637_W_SCL(0);}


2. 结束信号


结束条件是CLK为高电平时,DIO由低变高。具体实现如下:


c
void TM1637_Stop(void){
 TM1637_W_SCL(0);
 TM1637_W_SDA(0);
 TM1637_W_SCL(1);
 TM1637_W_SDA(1);}


3. 数据传输


数据传输过程中,当CLK为高电平时,DIO上的信号必须保持不变;只有CLK为低电平时,DIO上的信号才能改变。数据输入的开始条件是CLK为高电平时,DIO由高变低;结束条件是CLK为高时,DIO由低电平变为高电平。


TM1637的数据传输带有应答信号ACK,当传输数据正确时,会在第八个时钟的下降沿,芯片内部会产生一个应答信号ACK将DIO管脚拉低,在第九个时钟结束之后释放DIO口线。发送一个字节的具体实现如下:


c
void TM1637_Write_Byte(uint8_t data){
 uint8_t i;
 TM1637_W_SCL(0);
 for (i = 0; i < 8; i++)
 {
 if(data & 0x01)
 {
 TM1637_W_SDA(1);
 }
 else
 {
 TM1637_W_SDA(0);
 }
 data = data >> 1;
 TM1637_W_SCL(1);
 TM1637_W_SCL(0);
 }}


4. 接收应答


主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)。具体实现如下:


c
uint8_t TM1637_ReceiveAck(void){
 uint8_t AckBit;
 TM1637_W_SDA(1);
 TM1637_W_SCL(1);
 AckBit = TM1637_R_SDA();
 TM1637_W_SCL(0);
 return AckBit;}


三、指令格式


TM1637的指令格式包括起始位、数据位和结束位。起始位为高电平,数据位为8位,结束位为低电平。指令可以分为显示指令、设置指令和读取指令等。


1. 显示指令


显示指令用于控制数码管的显示内容。通过发送特定的指令和数据,可以设置数码管显示的数字或字符。


2. 设置指令


设置指令用于配置TM1637的各种参数,如显示亮度、扫描频率等。


3. 读取指令


读取指令用于读取TM1637的状态或按键输入数据。


四、显示原理


TM1637内部集成了驱动芯片和LED数码管。驱动芯片负责接收微控制器发送的指令,并将其转换为LED数码管的控制信号,LED数码管则根据控制信号显示相应的数字或字符。



1. 读键扫数据


在有按键按下时,读键数据如下表所示:

SG1SG2SG3SG4SG5SG6SG7SG8
K11110_11110110_11111010_11110010_11111100_11110100_11111000_11110000_1111
K21111_01110111_01111011_01110011_01111101_01110101_01111001_01110001_0111


在无按键按下时,读键数据为:1111_1111,低位在前,高位在后。


五、初始化配置


上电后,需要对TM1637进行初始化,设置显示亮度、扫描频率等参数。具体初始化代码如下:


c
void TM1637_Init(void){
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 GPIO_InitTypeDef GPIO_InitStructure;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);}

六、显示数据


通过DIO和CLK引脚,将显示数据写入TM1637内部寄存器,从而控制数码管的显示内容

。具体显示数据的代码如下:


c
void TM1637_WriteData(uint8_t u8Addr, uint8_t u8Data){
 TM1637_Start();
 TM1637_Write_Byte(u8Addr);
 TM1637_ReceiveAck();
 TM1637_Write_Byte(u8Data);
 TM1637_ReceiveAck();
 TM1637_Stop();}


七、设置亮度


TM1637支持调节显示亮度,满足不同环境需求

。设置亮度的代码如下:

c
void TM1637_SetBrightness(uint8_t u8Brt){
 TM1637_WriteCmd(0x88 | u8Brt);}


八、显示开关


可以通过指令控制TM1637的显示开关。具体代码如下:
c
void TM1637_Switch(bool bState){
 bState ? TM1637_WriteCmd(0x88) : TM1637_WriteCmd(0x80);}


九、总结


TM1637是一款功能强大、易于使用的数码管驱动芯片。通过简单的两线接口与微控制器通信,可以实现对数码管的精确控制。本文详细介绍了TM1637的引脚功能、通信协议、指令格式、显示原理和初始化配置等内容,希望能帮助您更好地理解和使用这款芯片。
联系我们
深圳市三佛科技有限公司
电话:0755-85279055
地址: 深圳市龙华新区民清路50号油松民清大厦701
手机:18902855590
友情链接: 小家电方案 网站地图 无尘投料站 不锈钢烧结过滤器 BX8单管滑线变阻器 世界地图 宠物医生咨询 发那科机器人保养 期货保证金 自动封箱机 音视频设备 人民币大写转换 赚钱吧 无锡网站建设 昆山拖链 氮吹仪北京 加固计算机 中港物流 农贸市场设计 快速卷帘门 安全体感 星星影院 上海闵行排水许可证 多点防爆热电偶 快速卷帘门 传感器商城 液氮高低温试验箱 金属托盘 商标购买
©版权所有 2024~2028 深圳市三佛科技有限公司 粤ICP备2022141219号-1