STM32 HAL TM1637使用

TM1637属于一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路。

本文主要使用MCU是STM32 ,CubeMX+Keil5进行开发,使用HAL库

简介:TM1637可以带动16个按键以及做数码管驱动

TM1637.C

#include "TM1637.h"

void gpio_out()
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = TM1637_DIO_Pin;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(TM1637_DIO_GPIO_Port, &GPIO_InitStruct);
}

void gpio_in()
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = TM1637_DIO_Pin;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	HAL_GPIO_Init(TM1637_DIO_GPIO_Port, &GPIO_InitStruct);
}

///====================================== 
void TM1637_I2CStart(void) //1637 开始 
	{ 
		TM1637_CLK(1); 
		TM1637_DIO(1); 
		Delay_us(2); 
		TM1637_DIO(0); 
	} 

void TM1637_I2CStop(void) // 1637 停止 
	{ 
		TM1637_CLK(0);
		Delay_us(2); 
		TM1637_DIO(0); 
		Delay_us(2); 
		TM1637_CLK(1);
		Delay_us(2); 
		TM1637_DIO(1);
	} 

void TM1637_I2Cask(void) //1637 应答 
	{ 
		TM1637_CLK(0); 
		Delay_us(5); //在第八个时钟下降沿之后延时 5us,开始判断 ACK 信号 
		gpio_in();
		while(TM1637_DIO_State); 
		gpio_out();
		TM1637_CLK(1);
		Delay_us(2); 
		TM1637_CLK(0);
	} 
///========================================= 
void TM1637_I2CWrByte(uint8_t oneByte) //写一个字节 
	{ 
		uint8_t i; 
		for(i=0;i<8;i++) 
		 {
			TM1637_CLK(0); 
			if(oneByte&0x01) //低位在前 
			 { 
				TM1637_DIO(1); 
			 } 
			else 
			 { 
				 TM1637_DIO(0); 
			 } 
			 Delay_us(3); 
			 oneByte=oneByte>>1; 
			 TM1637_CLK(1); 
			 Delay_us(3); 
		 } 
	} 
//------------------------------------------------- 
uint8_t ScanKey(void) //读按键 
{ 
	 uint8_t rekey = 0,i=0; 
	 TM1637_I2CStart(); 
	 TM1637_I2CWrByte(0x42); //读按键命令 
	 TM1637_I2Cask(); 
	 TM1637_DIO(1); // 在读按键前拉高数据线
	 gpio_in();	
	 for(i=0;i<8;i++) //从低位开始读 
	 { 
		TM1637_CLK(0); 
		rekey=rekey>>1; 
		Delay_us(30); 
		TM1637_CLK(1); 
		if(TM1637_DIO_State) 
		{ 
			rekey=rekey|0x80; 
		} 
		else 
		{ 
			rekey=rekey|0x00; 
		} 
		Delay_us(30); 
	 }
	 gpio_out();	 
	 TM1637_I2Cask(); 
	 TM1637_I2CStop(); 
	 return (rekey); 
} 
//================================================ 
void SmgDisplay(uint8_t add, uint8_t data, uint8_t brightness) //写显示寄存器 
	{ 
		
		TM1637_I2CStart(); 
		TM1637_I2CWrByte(0x44); // 40H 地址自动加 1 模式,44H 固定地址模式
		
		TM1637_I2Cask(); 
		
		TM1637_I2CStop(); 
		TM1637_I2CStart(); 
		TM1637_I2CWrByte(add); //设置首地址, 
		TM1637_I2Cask(); 
		TM1637_I2CWrByte(data); //送数据
		TM1637_I2Cask();
		TM1637_I2CStop(); 
		TM1637_I2CStart(); 
		TM1637_I2CWrByte(brightness); //开显示 ,设置亮度 
		TM1637_I2Cask(); 
		TM1637_I2CStop(); 
	} 
//===========end==================================






	

TM1637.h

#ifndef __TM1637_H__
#define __TM1637_H__

#include "Delay.h"
#include "main.h"

/*定义端口*/
#define TM1637_CLK(x)   do{ x ? \
                      HAL_GPIO_WritePin(TM1637_CLK_GPIO_Port, TM1637_CLK_Pin, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(TM1637_CLK_GPIO_Port, TM1637_CLK_Pin, GPIO_PIN_RESET); \
                  }while(0)

#define TM1637_DIO(x)   do{ x ? \
                      HAL_GPIO_WritePin(TM1637_DIO_GPIO_Port, TM1637_DIO_Pin, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(TM1637_DIO_GPIO_Port, TM1637_DIO_Pin, GPIO_PIN_RESET); \
                  }while(0)	

#define TM1637_DIO_State        HAL_GPIO_ReadPin(TM1637_DIO_GPIO_Port, TM1637_DIO_Pin)
				  		  
				  
/*外部接口函数*/
				  
void SmgDisplay(uint8_t add, uint8_t data, uint8_t brightness); //写显示寄存器 

#endif /* __TM1637_H__ */

        注意:TM1637在进行读写时需要应该应答信号反馈,当没有应答时容易则一直while循环,这是一个弊端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/631630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springcloud+nocos从零开始

首先是去nacos官网下载最新的包&#xff1a;Nacos 快速开始 | Nacos win下启动命令&#xff1a;startup.cmd -m standalone 这样就可以访问你的nacos 了。 添加一个配置&#xff0c;记住你的 DataId,和Group名字。 创建一个pom项目&#xff0c;引入springCloud <?xml ve…

windows快速计算文件的SHA256数值的步骤

在文件路径打开cmd窗口 输入命令 用Windows自带的certutil命令来计算一个文件的校验值1&#xff1a; certutil支持的算法有&#xff1a;MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512。 certutil的使用方法非常简单&#xff0c;只需要执行“certutil -hashfile 文件名 校验值类型”…

SpringAI应用开发

一、人工智能简述 四次工业革命推动了人类社会发展和变革&#xff1a; 蒸汽时代&#xff0c;发生在18世纪60年代~19世纪中期&#xff08;大约是1760年到1860年&#xff09;&#xff0c;这一时期的特点是机械化生产和大规模生产。电气时代&#xff0c;发生在19世纪下半叶~20世纪…

齐护K210系列教程(二十七)_语音识别

语音识别 1.烧录固件和模型2.语音识别程序2.1训练并识别2.2使用本地文件语音识别 3.课程资源联系我们 1.烧录固件和模型 注&#xff1a;本应用只适用于有麦克风功能的型号&#xff1a;AIstart_pro、AIstart_掌机、AIstart_Mini, 其它型号不支持&#xff01; 机器码生成以及模…

人工智能到底是什么玩意儿?

说实话&#xff0c;每次听到“人工智能”这个词&#xff0c;我都感觉像是在听天书一样。它似乎总是被包裹在一堆高大上的术语和概念里&#xff0c;让人摸不着头脑。但今天&#xff0c;我决定挑战一下自己&#xff0c;把这个问题搞个明白&#xff01; 首先&#xff0c;我得承认&…

5 个免费使用 GPT-4o 的方法

5 个免费使用 GPT-4o 的方法 虽然距离 OpenAI 发布 GPT-4o 已过去一天&#xff0c;我仍然对 GPT-4o 感到震撼。Demo 中语音助手功能实在是太令人惊叹了——它咯咯的笑声、准确的语气感叹和歌唱方式让 Siri 和 Google Assistant 显得相形见绌。 虽然备受期待的语音助手功能还要…

论文阅读-《MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation》

目录 1 摘要 2 介绍 3 相关工作 3.1 3D HPE 3.2 ViT 3.3 多假设方法 4 MHFormer 4.1 概述 4.2 准备阶段 4.2.1 多头自注意力机制&#xff08;MSA&#xff09; 4.2.2 多层感知器&#xff08;MLP&#xff09; 4.3 MHG-多假设生成 4.3.1 概述 4.3.2 详细解释&#x…

数学建模——建立数学模型(1)

前言 这个也是对《数学模型》&#xff08;姜启源第四版&#xff09;书内容的摘抄 建立数学模型 数学模型这个词汇现在越来越多地出现在现代入的 生产、工作和社会活动中&#xff0e;广大的科学技 术人员和应用数学工作者来说&#xff0c;建立数学模型是沟通摆在面前的实际问…

Redis第17讲——Redis zset结构实现滑动窗口限流

一、什么是滑动窗口限流 滑动窗口限流是一种流量控制策略&#xff0c;用于控制在一定时间内允许执行的操作数量或请求频率。它的工作方式类似于一个滑动时间窗口&#xff0c;对每个时间窗口的请求数量进行计数&#xff0c;并根据预先设置的限流策略来限制或调节流量&#xff0…

「AIGC算法」近邻算法原理详解

本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于距离的分类算法&#xff0c;其核心思想是距离越近的样本点&#xff0c;其类别越有可能相似。以下是KNN算法的原理详解&#xff1a; 1. 算…

STM32手写寄存器的方式实现点亮LED灯

这次是从头开始学习STM32&#xff0c;看野火的视频开始学习&#xff0c;感觉需要记录的时候就要记录一下学习的心得。野火视频学习的老师讲的还是很到位的&#xff0c;能够学习到很多的细节之处&#xff0c;有时会感觉很啰嗦&#xff0c;但是不得不说确实很详细&#xff0c;只有…

cpu卡片详解(FM1208)

​ 目录 ​1. 引言 1.1 FM1208 CPU卡芯片 2. FM1208 CPU卡芯片概述 2.1 FM1208及其在智能卡中的作用 2.2 FM1208功能框图 3.FM1208的技术规格 4.FM1208工作流程 5.&#xff26;&#xff2d;1208文件结构 6.FM1208与其他智能卡技术的比较 7.FM1208安全特性 7.1 DES/…

水泡传感器内部结构

水泡传感器内部结构&#xff1a; 水泡传感器放大电路 电路是基于1.6V做的TIA I2V&#xff0c; 也就是输出部分基于1.6V做电压的增加或减少。

OpenAI GPT-4o:开启人工智能交互新纪元

引言 在人工智能领域&#xff0c;OpenAI一直是创新的代名词。2024年5月14日&#xff0c;OpenAI再次以GPT-4o模型震撼了科技界&#xff0c;这款全新的旗舰生成模型不仅免费向公众开放&#xff0c;更以其革命性的多模态交互能力&#xff0c;引领我们进入了一个全新的科幻时代。 …

react 图片没有加载出来的问题

react 图片没有加载出来的问题 我原来是这样写的 <Layout><Sider><imgsrc"../images/login/topdivbg20221202.png"/></Sider><Content><Menu onClick{onClick} selectedKeys{[current]} mode"horizontal" it…

停车场车位引导系统是什么,停车场车位引导系统有哪些作用?

随着城市交通的快速发展&#xff0c;车辆的数量也在迅速增长&#xff0c;随之而来的就是停车难的问题&#xff0c;那么在城市中&#xff0c;如何合理的利用好现有资源&#xff0c;让停车资源得到合理利用呢&#xff1f;这就需要一套科学有效的智能停车场系统&#xff0c;可以帮…

MySQL单表查询案例演示

目录 一、创建数据库lianxi 二、选择数据库为lianxi 三、新建一个数据表grade&#xff0c;在grade表中插入数据 四、开始进行查询操作&#xff08;验证表中数据&#xff09; 1、查询1945班的成绩信息 2、查询1945班&#xff0c;语文成绩大于60小于90的成绩信息 3、查询学…

谷歌举办Gemini API开发者大赛;ChatGPT iOS版更新支持中文

&#x1f989; AI新闻 &#x1f680; 谷歌举办Gemini API开发者大赛&#xff0c;大奖1981款电动DeLorean 摘要&#xff1a;IT之家 5 月 15 日消息&#xff0c;在 2024 年谷歌 I/O 开发者大会上&#xff0c;谷歌宣布举办 Gemini API 开发者大赛&#xff0c;主要面向个人开发者…

NASA数据集——GES DISC 的 AIRS-CloudSat 云掩模、雷达反射率和云分类匹配 V3.2 (AIRS_CPR_MAT)

AIRS-AMSU variables-CloudSat cloud mask, radar reflectivities, and cloud classification matchups V3.2 (AIRSM_CPR_MAT) at GES DISC GES DISC 的 AIRS-CloudSat 云掩模、雷达反射率和云分类匹配 V3.2 (AIRS_CPR_MAT) 简介 这是 NetCDF-4 格式的 AIRS-CloudSat 定位子…

CET6级(笔试备考)

CET6笔试 做题技巧 备考注意 感觉考前一个月还是要多刷几套真题啊&#xff0c;刷个10套吧。 参考链接&#xff1a;https://blog.csdn.net/m0_57656758/article/details/130707582