TM1637+stm32 HAL库

本文详细介绍了如何使用TM1637数码管,并提供了完整的代码示例。主要内容包括管脚设置、注意事项及具体实现代码。通过本文,读者可以快速掌握TM1637数码管的应用。

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

又到了一年一季的毕业季啊。许多同学毕业设计是少不了数码管了。哎呀!OLED他不香吗?Ips0.96他不香吗?今天一个学妹来问我。T1637.的数码管怎么用?关键问题是我也没用过呀。我又爱面子。就拿来看看吧。不过这东西确实让我踩了不少的坑。今天就写个博客发出来吧。
管脚设置 PB6PB7都是输出就可以
在这里插入图片描述
要注意的几点,
这不是IIC!
这不是IIC!
这不是IIC!
1,该总线传输位的顺序与iic相反
2,该设备独占该总线(没有设备地址可言)
3,应答很奇怪,官方手册说会有应答,但是我用while来测试,从第8个clk-第12个clk都没等到应答,索性跳过应答,delay大法好。
直接上代码。
这是.h文件

#ifndef _TM1637_H_
#define _TM1637_H_


#include "main.h"
#include "gpio.h"
#include "delay.h"

#define CLK_0 	HAL_GPIO_WritePin(TM_IIC_CLK_GPIO_Port,TM_IIC_CLK_Pin,GPIO_PIN_RESET)
#define CLK_1 	HAL_GPIO_WritePin(TM_IIC_CLK_GPIO_Port,TM_IIC_CLK_Pin,GPIO_PIN_SET)

#define DIO_0 	HAL_GPIO_WritePin(TM_IIC_SDA_GPIO_Port,TM_IIC_SDA_Pin,GPIO_PIN_RESET)
#define DIO_1 	HAL_GPIO_WritePin(TM_IIC_SDA_GPIO_Port,TM_IIC_SDA_Pin,GPIO_PIN_SET)

//#define SDA_IN	{GPIOB->MODER&=0xffff3fff;}
//#define SDA_OUT {GPIOB->MODER&=0xffff3fff;GPIOB->MODER|=0xffff7fff;}

//#define SDA_READ HAL_GPIO_ReadPin(TM_IIC_SDA_GPIO_Port,TM_IIC_SDA_Pin)

extern unsigned char tab[];

    //相关函数声明
/************************************
TM1637_DATA_Config
参数
unsigned char fb						;(88):88 显示数字设置
unsigned char fb_show_flag	;(88):88 显示开关设置	1:显示  0不显示
unsigned char sb						;88:(88) 显示数字设置
unsigned char sb_show_flag	;88:(88) 显示开关设置	1:显示  0不显示
unsigned char dot						;88(:)88 显示开关设置	1:显示  0不显示

使用例程 :
TM1637_DATA_Config(11,1,22,1,1);
TM1637_DATA_Display();
显示效果 :11:22

使用例程 :
TM1637_DATA_Config(12,0,34,1,1);
TM1637_DATA_Display();
显示效果 :__:34

使用例程 :
TM1637_DATA_Config(12,0,34,0,1);
TM1637_DATA_Display();
显示效果 :__:__
**************************************/
    void TM1637_DATA_Config(unsigned char fb,unsigned char fb_show_flag,unsigned char sb,unsigned char sb_show_flag,unsigned char dot);
    void I2C_Start(void);
    void I2C_stop(void);
    void TM1637_WriteBit(unsigned char mBit);
    void TM1637_WriteByte(unsigned char Byte);
    void TM1637_WriteCommand(unsigned char mData);
    void TM1637_WriteData(unsigned char addr,unsigned char mData);
    void TM1637_DATA_Display(void);
#endif

这是.c文件

#include "TM1637.h"
unsigned char dt=20; //延时时间参数
unsigned char  dpFlag = 0;//主函数有说明 
unsigned char  Data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char  DataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x80};
struct {
	char shi;
	char ge;
}FB;
 
struct {
	char shi;
	char ge;
}SB;

void TM1637_DATA_Config(unsigned char fb,unsigned char fb_show_flag,unsigned char sb,unsigned char sb_show_flag,unsigned char dot)
{
	if(fb_show_flag==1)
	{
		FB.shi = fb/10;
		FB.ge =  fb%10;
	}
	else
	{
		FB.shi=FB.ge=10;
	}
	if(sb_show_flag==1)
	{
		SB.shi = sb/10;
		SB.ge =  sb%10;
	}
	else
	{
		SB.shi=SB.ge=10;
	}
	dpFlag = dot;
		
}

void I2C_Start(void)
{
  CLK_1;
	DIO_1;
	delay_us(dt);
	
	DIO_0;
	delay_us(dt);
	CLK_0;
	delay_us(dt);
}

void I2C_stop(void)
{
	
	CLK_0;
	delay_us(dt);
  DIO_0;
	delay_us(dt);
	
  CLK_1;
	delay_us(dt);	
	DIO_1;
	delay_us(dt);  	
}

void TM1637_WriteBit(unsigned char mBit)
{
	CLK_0;
	delay_us(dt);
	if(mBit)
		DIO_1;
	else
		DIO_0;
	delay_us(dt);
	CLK_1;
	delay_us(dt);	
}
  
void TM1637_WriteByte(unsigned char Byte)
{
	char loop = 0;
	for(loop = 0;loop<8;loop++)
	{
		 TM1637_WriteBit((Byte>>loop) & 0x01);//先写低位	
	}
	CLK_0;
	delay_us(dt);
	DIO_1;	
	delay_us(dt);
	CLK_1;		
}
void TM1637_WriteCommand(unsigned char mData)
{
	I2C_Start();
	TM1637_WriteByte(mData);
	I2C_stop();
}


/*
*@note  写入地址和数据
*/

void TM1637_WriteData(unsigned char addr,unsigned char mData)
{
	I2C_Start();
	TM1637_WriteByte(addr);
	TM1637_WriteByte(mData);
	I2C_stop();
}
void TM1637_DATA_Display(void)
{
	TM1637_WriteCommand(0x44);
	TM1637_WriteData(0xc0,Data[FB.shi]);
	if(dpFlag)
			TM1637_WriteData(0xc1,DataDp[FB.ge]);
	else
			TM1637_WriteData(0xc1,Data[FB.ge]);
	
	TM1637_WriteData(0xc2, Data[SB.shi]);
	TM1637_WriteData(0xc3, Data[SB.ge]);
	TM1637_WriteCommand(0x88);
 }


代码有借鉴https://blog.youkuaiyun.com/Tesla_0/article/details/86662224,在此基础上,整合了一下。
使用例程 :
TM1637_DATA_Config(12,1,34,1,1);
TM1637_DATA_Display();
显示效果 :12:34(无图言x?)
在这里插入图片描述
工程包我发上来,我只想要5个c币,这可比动辄50个的博主良心多了吧。其实已经发了.c 和.h,也不怎么需要工程包了,我要被我自己感动哭了
点我下载兄弟

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值