返回首页
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
友情链接: 小家电方案 网站地图 宠物医生咨询 展柜定做厂 发那科机器人保养 期货保证金 自动封箱机 音视频设备 人民币大写转换 赚钱吧 世翔抵押车网 无锡网站建设 昆山拖链 氮吹仪北京 加固计算机 中港物流 农贸市场设计 快速卷帘门 安全体感 云母带 水质监测站 星星影院 推广论坛 上海闵行排水许可证 多点防爆热电偶 快速卷帘门 传感器商城 液氮高低温试验箱 接线端子公司 金属托盘 商标购买
©版权所有 2024~2028 深圳市三佛科技有限公司 粤ICP备2022141219号-1