TM1637四数码管驱动

本文详细介绍了TM1637模块的结构、管脚定义、接口操作、数据指令、驱动程序示例以及遇到的问题及解决方案。重点讲解了如何正确配置和使用TM1637进行四位数码管显示和按键扫描,以及解决数码管不亮的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TM1637

1. TM1637概述

在这里插入图片描述
共阳,8段数码管x6个,还有按键扫描,可以调节亮度,串行接口、内置自动消隐电路。

模块图:

在这里插入图片描述

2. 管脚定义

在这里插入图片描述
可以看出,有两个IO用于串行数据输入/输出。此芯片不仅能够驱动数码管,还能够作为矩阵按键扫描。

3.接口说明

在这里插入图片描述
根据手册描述,数据在CLK为低时刻准备好,CLK为高(上升沿)被传输过去,每传输一个字节,在第八个时钟下降沿,1637都会产生一个ACK,会拉低DIO总线。
我使用的是地址自动加1模式,首先空闲状态都为高电平,发送start信号,然后命令,从机ack应答(拉低DIO),接着stop信号。然后start信号,设置地址,从机ack应答,然后data1,ack…,最后stop信号。

4.数据指令

在这里插入图片描述
可以看出,这两位是来区分,数据命令或者显示控制命令,或者地址命令的。

1.数据命令设置

在这里插入图片描述
0x40为写数据到显示寄存器、自动地址增加

2.地址命令设置

在这里插入图片描述
0xC0为第一个数码管显示寄存器地址,下一个地址加一,依次类推。

3.显示控制

在这里插入图片描述
脉冲宽度表示这个是控制显示亮度的,可根据自己场景选择。
下面0x88是显示打开!!!

5.四位数码管模块原理图

在这里插入图片描述

6.程序驱动

采用固定地址的程序流程图

在这里插入图片描述

程序代码

main.c
#include "tm1637.h"
int main(void)
{
   
    tm1637_init();		//数码管初始化
    smg_display(2142,0);//显示2142,冒号不显示
    while(1)
    {
   

	}
}
tm1637.c
#include "tm1637.h"
#include "main.h"
#include "uart.h"
#include <stdio.h>
#include <string.h>
#include "retarget.h"

//段码表
const uint8_t num_tab[] =
        {
   
                //0,	1,	2,	3,	4,	   5,	6,   7,  8,   9,    A,   b,  C,   d,   E,   F, :(数码管中间那两点)
                0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x80
        };

//显示缓冲区,要准备显示的段码值,从左到右
uint8_t show_buffer[4] = {
   0};
/**
* @brief: tm1637初始化
 * @param: void
 * @return: none
*/
void tm1637_init(void)
{
   
    GPIO_InitTypeDef tm1637_gpio_init;
    TM1637_CLK_GPIO_CLK_ENABLE(
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值