打印
[RISC-V MCU 应用开发]

用CH32V103驱动TM1637四位数码管模块

[复制链接]
1144|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lmn2005 于 2023-5-10 19:23 编辑

本人参考https://bbs.21ic.com/icview-3060796-1-1.html一文,用CH32V103驱动TM1637数码管成功,代码很简单,望各位大佬勿喷。

TM1637.h:
#ifndef __TM1637_H__
#define __TM1637_H__

#include "ch32v10x_conf.h"

#define  TM1637_DIO_H  GPIO_SetBits(GPIOA,GPIO_Pin_1)    //配置SDA接口高电平
#define  TM1637_DIO_L  GPIO_ResetBits(GPIOA,GPIO_Pin_1)  //配置SDA接口低电平

#define  TM1637_CLK_H  GPIO_SetBits(GPIOA,GPIO_Pin_2)    //配置SCL接口高电平
#define  TM1637_CLK_L  GPIO_ResetBits(GPIOA,GPIO_Pin_2)  //配置SCL接口低电平

#define  TM1637_SDA_READ()  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)  //读SDA口线状态

void TM1637_Init(void);              //初始化TM1637引脚
void TM1637_start(void);               // IIC开始
void TM1637_ack(void);                 // IIC应答
void TM1637_stop(void);                // IIC停止
void TM1637_Write(unsigned char DATA); // 写数据函数
void TM1637_SetBRI(unsigned char i);   // 设置亮度
void TM1637_display(unsigned char a, unsigned char b,
                    unsigned char c, unsigned char d); // 按顺序显示

#endif
TM1637.c:
#include "TM1637.h"
unsigned char tab[] =
    {
        0x3F, /*0*/
        0x06, /*1*/
        0x5B, /*2*/
        0x4F, /*3*/
        0x66, /*4*/
        0x6D, /*5*/
        0x7D, /*6*/
        0x07, /*7*/
        0x7F, /*8*/
        0x6F, /*9*/
        0x77, /*10 A*/
        0x7C, /*11 b*/
        0x58, /*12 c*/
        0x5E, /*13 d*/
        0x79, /*14 E*/
        0x71, /*15 F*/
        0x76, /*16 H*/
        0x38, /*17 L*/
        0x54, /*18 n*/
        0x73, /*19 P*/
        0x3E, /*20 U*/
};


void TM1637_Init(void)//初始化TM1637引脚
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;//使用PA1和PA2作为模拟IIC引脚,PA1对应SDA,PA2对应SCL
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    //IIC_Idle_State();
}

void TM1637_start(void) // IIC开始
{
    TM1637_CLK_H;
    TM1637_DIO_H;
    Delay_Us(2);
    TM1637_DIO_L;
}

void TM1637_ack(void) // IIC应答
{
    u8 i=0;
    TM1637_CLK_L;
    Delay_Us(5);
    TM1637_CLK_H;
    while (TM1637_SDA_READ() == 1 && (i < 250))
        i++;
    TM1637_CLK_H;
    Delay_Us(2);
    TM1637_CLK_L;
}

void TM1637_stop(void) // IIC停止
{
    TM1637_CLK_L;
    Delay_Us(2);
    TM1637_DIO_L;
    Delay_Us(2);
    TM1637_CLK_H;
    Delay_Us(2);
    TM1637_DIO_H;
    Delay_Us(2);
}

void TM1637_Write(unsigned char DATA) // 写数据函数
{
    unsigned char i;
    for (i = 0; i < 8; i++)
    {
        TM1637_CLK_L;
        if (DATA & 0x01)
            TM1637_DIO_H;
        else
            TM1637_DIO_L;
        Delay_Us(2);
        DATA = DATA >> 1;
        TM1637_CLK_H;
        Delay_Us(2);
    }
    // TM1637_ack();
}


void TM1637_display(unsigned char a, unsigned char b, unsigned char c, unsigned char d) // 按顺序显示
{
    TM1637_start();
    TM1637_Write(0x40);
    TM1637_ack();
    TM1637_stop();
    TM1637_start();
    TM1637_Write(0xc0);
    TM1637_ack();

    TM1637_Write(tab[a]);
    TM1637_ack();
    TM1637_Write(tab[b]);
    TM1637_ack();
    TM1637_Write(tab[c]);
    TM1637_ack();
    TM1637_Write(tab[d]);
    TM1637_ack();
    TM1637_stop();
}

void TM1637_SetBRI(unsigned char i) // 设置亮度
{
    TM1637_start();
    TM1637_Write(0x87 + i);
    TM1637_ack();
    TM1637_stop();
}


用CH32V103驱动TM1637数码管.rar

465.44 KB

使用特权

评论回复

相关帖子

沙发
kissdb| | 2023-5-10 15:31 | 只看该作者
点赞支持一下,

使用特权

评论回复
板凳
tifmill| | 2023-6-10 11:54 | 只看该作者

TM1637能替换TM1640吗?  

使用特权

评论回复
地板
cemaj| | 2023-6-10 13:11 | 只看该作者
TM1637: 这款芯片用来同时控制多达6个数码管

使用特权

评论回复
评论
lmn2005 2023-6-11 08:57 回复TA
对 
5
louliana| | 2023-6-13 20:57 | 只看该作者
TM1637是一种数字管驱动芯片,主要用于驱动4位共阳或共阴的7段LED数码管。它采用I2C总线通信协议,并且具有集成调光控制器和键扫描功能。

使用特权

评论回复
评论
lmn2005 2023-7-5 18:49 回复TA
1637只支持共阳,不支持共阴 
6
pmp| | 2023-6-13 22:00 | 只看该作者
tm1637电压3.3v可以用吗

使用特权

评论回复
评论
lmn2005 2023-6-14 09:20 回复TA
亮度比正常的低,最好还是用5V 
7
albertaabbot| | 2023-6-14 10:21 | 只看该作者
TM1637数码管驱动芯片的键扫电路的原理是什么呢

使用特权

评论回复
8
ulystronglll| | 2023-6-14 10:36 | 只看该作者
模拟I2C总线通信,实现了TM1637驱动4位数码管的功能。

使用特权

评论回复
9
timfordlare| | 2023-6-14 11:29 | 只看该作者
LED驱动控制专用电路TM1637

使用特权

评论回复
10
hilahope| | 2023-6-14 12:59 | 只看该作者
TM1637可以通过几个寄存器进行配置和控制。

使用特权

评论回复
11
sesefadou| | 2023-7-5 15:56 | 只看该作者
建议查阅TM1637库的文档以获取更详细的说明和使用示例。

使用特权

评论回复
12
hudi008| | 2023-7-5 16:34 | 只看该作者
需要初始化TM1637对象,并设置相关参数,如亮度、引脚等。然后,通过调用相应的函数来显示您想要的数字、字符或符号。

使用特权

评论回复
13
wengh2016| | 2023-7-5 16:39 | 只看该作者
TM1637是一款常用的四位数码管驱动芯片,具有简单易用和低功耗等特点。

使用特权

评论回复
评论
lmn2005 2023-7-5 18:49 回复TA
是的,方便易用。 
14
saservice| | 2023-7-5 20:46 | 只看该作者
调用刷新函数以在数码管上显示设置的内容。这样,设置的内容就会显示在数码管上。

使用特权

评论回复
15
maudlu| | 2023-7-5 21:08 | 只看该作者
可以通过控制其中两个引脚(DIO和CLK)来实现对四位共阳或共阴数码管的控制。

使用特权

评论回复
评论
lmn2005 2023-7-6 18:13 回复TA
1637只能支持共阳,不支持共阴的 
16
mnynt121| | 2023-7-5 21:56 | 只看该作者
将TM1637模块的VCC引脚连接到3.3V或5V电源,GND引脚连接到地线,然后将DIO引脚连接到控制器的一个数字I/O引脚,CLK引脚连接到另一个数字I/O引脚。

使用特权

评论回复
17
lmn2005|  楼主 | 2023-7-6 18:14 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

457

帖子

1

粉丝