STM32F1开发指南笔记20----数码管驱动芯片TM1640解析

本文介绍了STM32F1单片机如何使用数码管驱动芯片TM1640,阐述了TM1640的特性与应用,以及在实际项目中的优势。主要内容包括TM1640的电路原理、封装类型和与单片机的连接方式,并提供了驱动代码的相关文件。

以前在单片机学习中,驱动数码管是直接将数码管连接单片机,在单片机上需要编写很复杂的程序,并且对数码管需要实时扫描。在实际项目开发中,一般使用数码管专用控制芯片来驱动数码管,提高开发效率。

TM1640是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。主要应用于电子产品LED显示屏驱动。采用SOP28封装形式。TM1640只是数码管驱动芯片的一种,还有很多其他的驱动芯片,具体芯片选择需要根据项目需求及预算来决定。
在这里插入图片描述

在这里插入图片描述
可驱动16位数码管。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有共阴极与共阳极两种电路图,根据开发板上的数码管实际连接来决定使用哪个。
在这里插入图片描述
在这里插入图片描述
这两个引脚分别与单片机的两个GPIO相连。

在这里插入图片描述
8位数码管
在这里插入图片描述
这八个共阴极的LED灯相当于一个数码管,可以当成一个数码管来处理。

驱动代码如下:

main函数

#include "stm32f10x.h" 
#include "sys.h"
#include "delay.h"
#include "rtc.h"
#include "TM1640.h"

int main (void)
{
   
   
	u8 c=0x01;
	RCC_Configuration(); //系统时钟初始化 
	RTC_Config();  		//RTC初始化
	TM1640_Init(); 		//TM1640初始化
	
	while(1)
	{
   
   
		if(RTC_Get()==0)	//读出RTC时间
		{
   
    
			TM1640_display(0,rday/10);	//天
			TM1640_display(1,rday%10+10);	//+10是为了显示后面的小数点
			TM1640_display(2,rhour/10); //时
			TM1640_display(3,rhour%10+10);
			TM1640_display(4,rmin/10);	//分
			TM1640_display(5,rmin%10+10);
			TM1640_display(6,rsec/10); //秒
			TM1640_display(7,rsec%10);

			TM1640_led(c); //与TM1640连接的8个LED全亮
			c<<=1; //数据左移 流水灯
			if(c==0x00)c=0x01; //8个灯显示完后重新开始
			delay_ms(125); //延时
		}
	}
}

TM1640.c函数

#include "TM1640.h"
#include "delay.h"

#define DEL  1   //宏定义 通信速率(默认为1,如不能通信可加大数值)

//地址模式的设置
//#define TM1640MEDO_ADD  0x40   //宏定义	自动加一模式
#define TM1640MEDO_ADD  0x44   //宏定义 固定地址模式(推荐)

//显示亮度的设置
//#define TM1640MEDO_DISPLAY  0x88   //宏定义 亮度  最小
//#define TM1640MEDO_DISPLAY  0x89   //宏定义 亮度
//#define TM1640MEDO_DISPLAY  0x8a   //宏定义 亮度
//#define TM1640MEDO_DISPLAY  0x8b   //宏定义 亮度
#define TM1640MEDO_DISPLAY  0x8c   //宏定义 亮度(推荐)
//#define TM1640MEDO_DISPLAY  0x8d   //宏定义 亮度
//#define TM1640MEDO_DISPLAY  0x8f   //宏定义 亮度 最大

#define TM1640MEDO_DISPLAY_OFF  0x80   //宏定义 亮度 关


//通信时序 启始(基础GPIO操作)(低层)
void TM1640_start()
{
   
    
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(1)); //接口输出高电平1	
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(1)); //接口输出高电平1	
	delay_us(DEL);
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(0)); //接口输出0	
	delay_us(DEL);
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(0)); //接口输出0	
	delay_us(DEL);
}


//通信时序 结束(基础GPIO操作)(低层)
void TM1640_stop()
{
   
    
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(0)); //接口输出0	
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_SCLK,(BitAction)(1)); //接口输出高电平1	
	delay_us(DEL);
	GPIO_WriteBit(TM1640_GPIOPORT,TM1640_DIN,(BitAction)(1)); //接口输出高电平1	
	delay_us(DEL)
### STM32 驱动 TM1650 数码管的相关资料与代码示例 #### 资料概述 TM1650 是一款专门用于驱动四位共阴数码管的芯片,其特点包括接口简单、驱动能力强以及低功耗等特性[^4]。对于 STM32 平台上的开发者来说,可以通过特定的驱动代码来实现对 TM1650 的控制并完成数字显示功能。 以下是关于 STM32TM1650 数码管驱动的一些具体参考资料和代码示例: --- #### 参考资料链接 1. **STM32F103 学习笔记中的 TM1650 使用说明** - 提供了详细的 TM1650 数码管驱动教程,适用于 STM32F103 微控制器平台。 - 地址: [https://gitcode.com/Resource-Bundle-Collection/249b1](https://gitcode.com/Resource-Bundle-Collection/249b1)[^3] 2. **TM1650 数码管驱动芯片驱动数码管读取按键程序** - 包含了针对 TM1650 的初始化函数 `Tube_Key_Init`,以及设置亮度和状态的函数 `Tube_CMD`。 - 还提供了按键检测的功能支持,便于扩展更多交互逻辑。 - 地址: [相关内容见 h 文件定义][^5] --- #### 示例代码 以下是一个简单的 STM32 驱动 TM1650 数码管的代码框架,展示了基本的初始化过程和数字显示操作。 ```c #include "stm32f1xx_hal.h" #include "tm1650.h" // 初始化 TM1650 模块 void TM1650_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置数据线 (DIO) 和时钟线 (CLK) __HAL_RCC_GPIOA_CLK_ENABLE(); // DIO 引脚配置 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // CLK 引脚配置 GPIO_InitStruct.Pin = GPIO_PIN_1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } // 显示指定数值到数码管 void DisplayNumber(uint8_t number) { uint8_t data[4]; int i; // 将输入数字分解为每位数 for(i=0; i<4; i++) { data[i] = number % 10; number /= 10; } // 发送数据至 TM1650 TM1650_SendData(data); } ``` 上述代码片段实现了 TM1650 的基础初始化流程,并通过调用自定义函数 `DisplayNumber` 来向数码管发送待显示的数据。 --- #### 关键点解析 - **硬件连接**: TM1650 主要依赖两根信号线——DIO(数据)和 CLK(时钟)。需确保这两条线路正确连接到 STM32 的对应引脚上。 - **软件协议**: TM1650 基于串行通信方式工作,在实际编程过程中需要注意遵循其规定的帧格式及时序要求[^5]。 - **功能拓展**: 如果需要增加按键识别等功能,则可以参考已有的头文件定义 (`__TUBE_KEY_H`) 中的内容进一步完善项目结构。 --- ###
TM1640共阴驱动是指TM1640芯片在驱动LED显示器时使用的一种编码方式。在TM1640中,LED的共阴极被连接在一起,通过控制引脚的高低电平来点亮LED。共阴极表示LED的负极或阴极是共用的,而每个LED的正极或阳极则分别通过TM1640芯片的引脚来控制。通过改变引脚的电平,可以实现对LED的点亮和熄灭。 TM1640是一种LED显示器驱动控制专用电路芯片,内部集成了MCU数字接口、数据锁存器、LED驱动等电路。它采用共阴驱动编码方式,可以实现对LED显示器的控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [TM1640共阳数码管驱动源码](https://download.csdn.net/download/hl0012/10868697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [STM32F1开发指南笔记20----数码管驱动芯片TM1640解析](https://blog.csdn.net/qq_38958704/article/details/105643335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字](https://blog.csdn.net/ic2121/article/details/128550455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值