K_A39_004 基于STM32等单片机驱动AT24C02模块 串口+OLED0.96显示

news2024/11/24 16:01:48

K_A39_004 基于STM32等单片机驱动AT24C02模块 串口+OLED0.96显示

  • 所有资源导航
  • 一、资源说明
  • 二、基本参数
    • 参数
    • 引脚说明
  • 三、驱动说明
    • 时序
    • 对应程序:
  • 四、部分代码说明
    • 1、接线引脚定义
      • 1.1、STC89C52RC+AT24C02模块
      • 1.2、STM32F103C8T6+AT24C02模块
  • 五、基础知识学习与相关资料下载
  • 六、视频效果展示与程序资料获取
  • 七、注意事项
  • 八、接线说明
    • STC89C52RC
    • STM32F103C8T6

请添加图片描述

所有资源导航

其他资料目录 直戳跳转

一、资源说明

单片机型号测试条件模块名称代码功能
STC89C52RC晶振11.0592MAT24C02模块STC89C52RC驱动AT24C02模块 串口与OLED0.96双显示
STM32F103C8T6晶振8M/系统时钟72MAT24C02模块STM32F103C8T6驱动AT24C02模块 串口与OLED0.96双显示

二、基本参数

参数

请添加图片描述

引脚说明

AT24C02模块引脚说明
VIN正极 3.3/5V供电
GNDGND 电源负极
SCLIIC时钟线
SDAIIC数据线

三、驱动说明

时序

请添加图片描述
请添加图片描述
请添加图片描述

对应程序:

以51为例

/*******************************************************************************
* 函数名         : Delay10us()
* 函数功能		   : 延时10us
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

void Delay10us()
{
	uint8_t a,b;
	for(b=1;b>0;b--)
		for(a=2;a>0;a--);

}
/*******************************************************************************
* 函数名         : I2cStart()
* 函数功能		 : 起始信号:在AT24C0X_SCL时钟信号在高电平期间AT24C0X_SDA信号产生一个下降沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 起始之后AT24C0X_SDA和AT24C0X_SCL都为0
*******************************************************************************/

void I2cStart()
{
	AT24C0X_SDA=1;
	AT24C0X_SCL=1;
	Delay10us();//建立时间是AT24C0X_SDA保持时间>4.7us
	AT24C0X_SDA=0;
	Delay10us();//保持时间是>4us
	AT24C0X_SCL=0;			
	Delay10us();		
}
/*******************************************************************************
* 函数名         : I2cStop()
* 函数功能		 : 终止信号:在AT24C0X_SCL时钟信号高电平期间AT24C0X_SDA信号产生一个上升沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 结束之后保持AT24C0X_SDA和AT24C0X_SCL都为1;表示总线空闲
*******************************************************************************/

void I2cStop()
{
	AT24C0X_SDA=0;
	AT24C0X_SCL=1;
	Delay10us();//建立时间大于4.7us
	AT24C0X_SDA=1;
	Delay10us();	
	
}
/*******************************************************************************
* 函数名         : I2cSendByte(uint8_t dat)
* 函数功能		 : 通过I2C发送一个字节。在AT24C0X_SCL时钟信号高电平期间,保持发送信号AT24C0X_SDA保持稳定
* 输入           : num
* 输出         	 : 0或1。发送成功返回1,发送失败返回0
* 备注           : 发送完一个字节AT24C0X_SCL=0,AT24C0X_SDA=1
*******************************************************************************/

uint8_t I2cSendByte(uint8_t dat)
{
	uint8_t a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。		
	for(a=0;a<8;a++)//要发送8位,从最高位开始
	{
		AT24C0X_SDA=dat>>7;	 //起始信号之后AT24C0X_SCL=0,所以可以直接改变AT24C0X_SDA信号
		dat=dat<<1;
		Delay10us();
		AT24C0X_SCL=1;
		Delay10us();//建立时间>4.7us
		AT24C0X_SCL=0;
		Delay10us();//时间大于4us		
	}
	AT24C0X_SDA=1;
	Delay10us();
	AT24C0X_SCL=1;
	Delay10us();
	while(AT24C0X_SDA)//等待应答,也就是等待从设备把AT24C0X_SDA拉低
	{
		b++;
		if(b>200)	 //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
		{
			//AT24C0X_SCL=0;
			Delay10us();
			return 0;
		}
	}
	AT24C0X_SCL=0;
	Delay10us();
 	return 1;		
}
/*******************************************************************************
* 函数名         : I2cReadByte()
* 函数功能		   : 使用I2c读取一个字节
* 输入           : 无
* 输出         	 : dat
* 备注           : 接收完一个字节AT24C0X_SCL=0,AT24C0X_SDA=1.
*******************************************************************************/

uint8_t I2cReadByte()
{
	uint8_t a=0,dat=0;
	AT24C0X_SDA=1;			//起始和发送一个字节之后AT24C0X_SCL都是0
	Delay10us();
	for(a=0;a<8;a++)//接收8个字节
	{
		AT24C0X_SCL=0;
		Delay10us();
		AT24C0X_SCL=1;
		Delay10us();
		dat<<=1;
		dat|=AT24C0X_SDA;
		Delay10us();
		AT24C0X_SCL=0;
		Delay10us();
	}
	return dat;		
}


/*******************************************************************************
* 函数名         : void At24c02Write(uint8_t addr,uint8_t dat)
* 函数功能		   : 往24c02的一个地址写入一个数据
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

void At24c02Write(uint8_t addr,uint8_t dat)
{
	I2cStart();
	I2cSendByte(0xa0);//发送写器件地址
	I2cSendByte(addr);//发送要写入内存地址
	I2cSendByte(dat);	//发送数据
	I2cStop();
}
/*******************************************************************************
* 函数名         : uint8_t At24c02Read(uint8_t addr)
* 函数功能		   : 读取24c02的一个地址的一个数据
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

void At24c02Read( uint8_t *pReadBuf,uint8_t addr,uint8_t usSize)
{
	uint8_t i;
	I2cStart();
	I2cSendByte(0xa0); //发送写器件地址
	I2cSendByte(addr); //发送要读取的地址
	I2cStart();
	I2cSendByte(0xa1); //发送读器件地址
	for (i = 0; i < usSize-1; i++)
	{
		pReadBuf[i]=I2cReadByte(); //读取数据
		 Ack_I2c(0);
	}
	pReadBuf[i]=I2cReadByte(); //读取数据
	Ack_I2c(1);
	I2cStop();
	
}
/********************************************************************
                     应答子函数
函数原型:  void Ack_I2c(bit a);
功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(bit a)
{
  
  if(a==0)AT24C0X_SDA=0;              /*在此发出应答或非应答信号 */
  else AT24C0X_SDA=1;
  Delay10us();     
  AT24C0X_SCL=1;
  Delay10us(); 
  AT24C0X_SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/
  Delay10us();   
}

四、部分代码说明

1、接线引脚定义

需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改

1.1、STC89C52RC+AT24C02模块

//AT24C02模块引脚定义
sbit AT24C0X_SCL=P1^3;
sbit AT24C0X_SDA=P1^2;


//OLED0.96模块引脚定义
sbit SCL=P1^1; //串行时钟
sbit SDA=P1^0; //串行数据

1.2、STM32F103C8T6+AT24C02模块

//AT24C02模块引脚定义

#define EEPROM_GPIO_PORT_I2C	GPIOB			/* GPIO端口 */
#define EEPROM_RCC_I2C_PORT 	RCC_APB2Periph_GPIOB		/* GPIO端口时钟 */
#define EEPROM_I2C_SCL_PIN		GPIO_Pin_8			/* 连接到SCL时钟线的GPIO */
#define EEPROM_I2C_SDA_PIN		GPIO_Pin_9			/* 连接到SDA数据线的GPIO */
//OLED0.96模块引脚定义					
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)

五、基础知识学习与相关资料下载

1、STC89C52RC程序下载 直戳跳转

2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转

3、OLED0.96程序说明 直戳跳转

4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转

六、视频效果展示与程序资料获取

视频连接 直戳跳转
资料获取 ( 滑到最后添加个人号)

七、注意事项

1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良

八、接线说明

STC89C52RC


/************************************************************************************
//  功能描述   : AT24C02模块测试程序
//  测试条件   : STC89C52RC   晶振11.0592
接线
AT24C02 -------------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1.3 //
SDA------------------------------------P1.2 //	

OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------5V
GND------------------------------------GND
SCL------------------------------------P1^1
SDA------------------------------------P1^0
*************************************************************************************/

STM32F103C8T6

  
/************************************************************************************
//  功能描述   : AT24C02模块测试程序
//  测试条件   : STM32F103C8T6   晶振8M  系统时钟72M
接线
AT24C02模块----------------------------STM32F103C8T6
VCC------------------------------------3.3/5V
GND------------------------------------GND
SCL------------------------------------PB8 //
SDA------------------------------------PB9 //	


OLED0.96(IIC) -------------------------STM32F103C8T6
VCC------------------------------------3.3V
GND------------------------------------GND
SCL------------------------------------PB6
SDA------------------------------------PB7
*************************************************************************************/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

〖技术人必学的职业规划白宝书 - 职业规划篇②〗- 进入职场前必须要考虑的问题

历时18个月&#xff0c;采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴&#xff0c;该专栏有你想要的职业规划、简历、面试的答案。说明&#xff1a;该文属于 技术人必学的职业规划白宝书 专栏&#xff0c;购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

如何优雅的使用各类LLM

近几个月&#xff0c;随着ChatGPT的风靡&#xff0c;大型语言预训练模型也如雨后春笋般地涌现&#xff0c;虽然效果差强人意&#xff0c;好在不受限制。配置稍好的电脑也能跑个7B、13B参数的大语言模型。 虽然模型众多&#xff0c;但是如果给每一个模型都单独去配置环境&#x…

Go语言的条件判断和循环语句

目录 【if语句】 if语句的内部变量 if语句的优雅写法 【switch语句】 switch语句的特点 switch语句的表达式类型 switch获取变量类型 x.(type) 【for语句】 for语句的变体 for...range break 和 continue goto for 语句的常见“坑”与避坑方法 Go语言的条件判断有…

数组map用法以及特殊值的情况

数组map用法以及特殊值的情况 一、map用法的说明 map(callbackFn, thisArg); // callbackFn回调函数&#xff0c;thisArg可选 callbackFn是个回调函数&#xff0c;该回调函数的参数按照顺序为element&#xff08;当前正在处理的元素&#xff09;&#xff0c;index&#xff0…

深化企业数据智能应用 用友敢当“急先锋”

面对扑面而来的数字经济时代&#xff0c;一场轰轰烈烈的企业数智化转型正进行得如火如荼。 然而许多企业虽然明知道数智化转型势在必行&#xff0c;但是又担忧自己不具备相关能力。这些企业在数据和智能上面临哪些挑战&#xff1f;如何才能如何加速数智化创新&#xff1f;AIGC和…

人机融合智能与哲学

GPT系列的大型语言模型&#xff08;LLM&#xff09;在初步成功之后&#xff0c;需要人们重新审视图灵的计算理论&#xff0c;重新认识计算的本质和形式&#xff0c;重新思考计算机和计算机理论&#xff0c;以及深入思考计算的家族、广义的计算和计算的哲学等问题。这是因为GPT系…

从面对代码下不去的文章,到DBA群讨论

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

小米加速技术突破,为充电生态赋能,领航未来

5月13日&#xff0c;中国电工技术学会电力电子专业委员会第十八届学术年会在上海召开。小米公司作为快充技术领域代表&#xff0c;手机部基带总监杨玉巍出席本次年会并发表以《小米下一个十年的“助推器”——硬件技术创新与应用》为主题的报告&#xff0c;介绍小米最新的充电技…

简单做一下 银川第九届数模A题

A题 随着三年新冠疫情结束后第一个五一假期的到来&#xff0c;许多人选择出门旅游&#xff0c;在有限的几天假期怎样玩好就是一件值得考虑的事。小明是一位旅游爱好者&#xff0c;想在五一期间到宁夏一些著名景点旅游。由于跟着旅游团会受到若干限制&#xff0c;所以他&#xf…

Google Bard 对战 ChatGPT4

话题之一&#xff1a;如何降低血压 我家老爷子血压有点高&#xff0c;所以我挑了这么个话题。 如果用中文来问 Bard, 有点欺负它&#xff0c;那么索性用英文 1. Bard 在速度上占有绝对优势 2. GPT4 在最后一条监测就医建议上&#xff0c;完胜。 很多老人得过且过&#xff0c;不…

OpenCV实战(24)——相机姿态估计

OpenCV实战&#xff08;24&#xff09;——相机姿态估计 0. 前言1. 相机姿态估计2. 3D 可视化模块 cv::Viz3. 完整代码小结系列链接 0. 前言 校准相机后&#xff0c;就可以将捕获的图像与物理世界联系起来。如果物体的 3D 结构是已知的&#xff0c;那么就可以预测物体如何投影…

【Shell脚本】Linux安装Nexus的两种方式以及开机自启

目录 一、Linux安装Nexus的两种方式1、直接把下载好的安装包上传到服务器①、打开Nexus页面后&#xff0c;登录时会出现以下提示&#xff0c;根据路径提示可找到初始密码②、找到初始登录Nexus的初始密码 2、通过wget安装Nexus①、修改Nexus端口号②、默认的端口号为8081&#…

华为OD机试真题 Java 实现【找数字】【2023Q2 100分】

一、题目描述 给一个二维数组nums&#xff0c;对于每一个元素nums[i]&#xff0c;找出距离最近的且值相等的元素&#xff0c;输出横纵坐标差值的绝对值之和&#xff0c;如果没有等值元素&#xff0c;则输出-1。 例如 输入数组nums为 0 3 5 4 2 2 5 7 8 3 2 5 4 2 4 对于 n…

Java每日一练(20230517) 重复元素、链表重复元素、旋转数组

目录 1. 存在重复元素 &#x1f31f; 2. 删除排序链表中的重复元素 &#x1f31f; 3. 旋转数组 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 存在重…

让孩子们零基础也能学习人工智能,这家科技企业是这样做的

在偏远地区的孩子&#xff0c;即便没有任何人工智能知识和理论基础&#xff0c;也可以一步步迈入人工智能科技的殿堂&#xff1f; 你没有看错&#xff0c;这就是亚马逊云科技推出的“AI在未来”公益计划项目&#xff0c;如今已经进入了第二个学年。 “AI在未来”公益计划走进宁…

案例分享|地弹现象导致DCDC电源芯片工作不正常

很多读者都应该听过地弹&#xff0c;但是实际遇到的地弹的问题应该很少。本案例就是一个DCDC电源芯片的案例。 1. 问题描述 如下图1 &#xff0c;产品其中一个供电是12V转3.3V的电路&#xff0c;产品发货50K左右以后&#xff0c;大约有1%的产品无法启动&#xff0c;经过解耦定…

【Java8新特性】史上最全Optional实战教程,太厉害了!

目录 一、前置基础 二、什么是Optional 2.1理论拓展 三、为什么要用Optional 3.1俄罗斯式套娃判空详解 四、Optional基本知识 4.1API的思考 五、工作中如何正确使用Optional 5.1 orElseThrow 5.2 filter 5.3 orElse和orElseGet 5.4 map和flatMap 5.5 项目实战 实战…

16位单片机去哪儿了?

关注星标公众号&#xff0c;不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 最近网友问了一个问题&#xff1a;为什么现在很少看见16位单片机了&#xff1f; 你是不是也有这样的疑问&#xff1a;现在市面上大多都是32位Arm Coretx-M内核的单片机&#xff0c;…

〖技术人职业规划白宝书 - 职业规划篇①〗- 大学生选择职业前的自我认知与剖析

历时18个月&#xff0c;采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴&#xff0c;该专栏有你想要的职业规划、简历、面试的答案。说明&#xff1a;该文属于 技术人职业规划白宝书 专栏&#xff0c;购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区&am…

【JS】1684- 重学 JavaScript API - Resize Observer API

❝ 前期回顾&#xff1a; 1. Page Visibility API 2. Broadcast Channel API 3. Beacon API ❞ &#x1f3dd; 什么是 Resize Observer API Resize Observer API[1] 可以帮助我们监听元素尺寸的变化&#xff0c;并在尺寸变化时执行一些操作。例如&#xff0c;我们可以使用 Resi…