LQB10,AT24C02的使用

news2024/11/28 10:44:39

在这里插入图片描述
在这里插入图片描述
1、单片机用P20和P21和AT24C02通信;
2、比赛提供的开发包里面的代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
头文件
在这里插入图片描述
c文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提供的代码解读以及修改合适自己使用。

#ifndef _IIC_H
#define _IIC_H

void IIC_Start(void); 
void IIC_Stop(void);  
bit IIC_WaitAck(void);  
void IIC_SendAck(bit ackbit); 
void IIC_SendByte(unsigned char byt); 
unsigned char IIC_RecByte(void); 

#endif

看头文件,有6个函数。
开始,停止,等待应答(有个返回值bit),发送应答,发送字节,接收字节。
函数里面的内容不用管。
知道有四个工具就可以了。

修改:
将reg52.h更改为stc15.h,不然有些寄存器会重复定义,编译出错误。

在iic.c里面,有个延时函数的时间,需要修改,不然不能正确读取数据。
在这里插入图片描述
把这个delaytime的5改为60,就合适了。或者60左右。因为stc15的速度是传统51单片机的10-12倍。

补充代码。
AT24C02相当于层楼,有许多房间,每个房间放一个字节的内容。
你想往哪个房间放数据?需要进行指定房间号,指定内容。
怎么放,怎么起始,怎么结束,有什么命令,需要结合24c02的数据手册。
写入一个字节数据到AT24C02的指定地址

需要阅读数据手册的地方。
图7,设备地址。
我们的是AT24C02,放的是2K字节。看第一行。
MSB是一个字节的高位,LSB是一个字节的低位。
前面固定了1010,后面A2A1A0和R、W由硬件和软件设定。
A2A1A0看AT24C02的电路图,解了GND,所以是000,
R高电平,代表是读取read有效,低电平是写write有效。
所以有个写地址,和读地址。
写地址是10100001,0xA1,
读地址是10100000,是0xA0和iic.h对应在这里插入图片描述在这里插入图片描述
图8 字节写的流程。
在这里插入图片描述
解读一下。
SDA线,
第一个是发送一个开始信号,所以要用开始函数;已经写好了;
IIC_Start()
第二个是设备地址要发出去,设备地址是先发MSB高位数据出去。函数也提供了。
是写地址,就是写地址;发0xA0.
IIC_SendByte(0xA0)
第三个是等待一个ACK,你发数据出去,肯定希望别人应答,所以这里是读取等待应答信号。
IIC_WaitAck();
第四个是写一个字节到哪个位置呢,你要先发一个地址。比如房间号,你要告诉它。
IIC_SendByte(房间号)
注意这个房间号,只能放一个字节内容;房间号范围是0x00-0xFF(好像是,忘记了)

第五个,等待应答。
IIC_WaitAck();

第六个,写数据。
IIC_SendByte(数据)
这个数据是一个字节类型。只能一个个字节发送。

第7个,等待应答。
IIC_WaitAck();

第八个,发停止位。
IIC_Stop();

具体流程,如果不懂阅读,看STCISP软件的一个函数,理解一下,这个是发送一串字节,我们看下流程就好了。
在这里插入图片描述
根据上面的流程,我们写出我们的代码,在头文件中,添加函数声明,在c文件中,添加函数的定义。函数有两个形参,地址和数据。
在这里插入图片描述

我们通过上面的过程,知道如何写一个字节数据到at24c02中,我们怎么读取at24c02里面的房间的数据呢?看下手册里面的读取数据的流程图。

在这里插入图片描述
第一个步骤,发送开始信号。
第二个步骤,发送设备的写地址,注意这里有个写地址。
0xA0.
第三个,等待应答信号;
第四个,发送房间号的地址,意思是,你要读取at24c02哪个房间的数据?你要发给他。
第五个,等待应答,你发出去了额,对方有没有收到,需要等待应答。

第6个,发送设备开始信号;
第7,发送读地址。注意,这里是读地址,0xA1
第8,等待应答;
第9,一位位读取数据,我们需要设置一个变量,接收这个字节的数据。
第10,NOACK,发送一个NO ACK信号给at24c02,代表读完成了。
第11,发送停止信号。

明白了流程,我们参考下,stc-isp软件的代码。参考的代码是读取一串数据,所以有个发送应答ack,我们只需要读取一个字节数据,所以少了一个步骤
再改写成自己的代码。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改代码
在这里插入图片描述
。得到上面的两个代码。我们实际使用一下。

案例测试。
注意,一个个字节写,最好延时一下,这里延时了5ms时间。
在main.c中,添加代码。
往0x00房间号,写入dat0这个字节的数据。
往0x02房间号,写入dat1数据,注意,dat0和dat1是char类型的数据;
注意0x01房间号,也能放数据。
往0x03房间号,写入dat2这个字节的数据。
将0x00房间的数据,读取出来,赋值给rdat0。
可以用数码管将这个数据显示一下,看下是不是我们写入,读取的数据,判断是不是能够使用。
在这里插入图片描述

问题。
案例2,假如我有一个数据,1500,要写入at24c02怎么办?
注意,1500超出了一个字节范围,上面的案例代码,我们只写了一个字节的读取和写入。
怎么实现一个int类型额数据读取和写入呢?
方法很多,举一个方法把。
把一个int类型分类高8位和低8位,高8位,放到0x00房间,低八位放0x01房间。
如果读取的话,分别读取出来,再把两个字节合并。

这个思路如何实现呢,如何分离高低八8位呢。
很简单。
int numa=1500;
unsigned char numaH=numa/256;
unsigned char numaL=numa%256;
printf(“numaH=%d”,numaH);
printf(“numaL=%d”,numaL);
可以测试下,numaH=5,numaL=220.
如果我们读取出来,那么就是结果
int ReadData;
ReadData=numaH*256+numaL

注意,比赛的时候,一般存储的数据是正数,所以干脆我们就学习int类型分解成unsigned char就好了。

问题。
如果我要存放一个小数怎么办?
可以把小数点乘以100,放大100倍,然后拆分高字节和低字节,然后写入到里面,
读取的时候,读取出来,然后合并,再除以100就可以了。

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

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

相关文章

产品经理考个 PMP 有用吗?

产品经理考PMP肯定是有用的。学无止境! 这里给一些想要转行项目管理的朋友一些PMP考证资料分享,内含不少考纲知识,题库,解题技巧,思维导图等等,有需要就保存下来,留着下次需要的时候用。 一&a…

二、并发编程的三大特性

文章目录并发编程的三大特性1、原子性什么是并发编程的原子性?保证并发编程的原子性synchronizedCASLock锁ThreadLocal2、可见性什么是可见性?解决可见性的方式volatilesynchronizedLockfinal3、有序性什么是有序性?as-if-serialhappens-beforevolatile并发编程的…

谷歌seo新站如何快速排名?如何提高Google自然排名

本文主要分享谷歌SEO如何做新站排名,很多刚出海的外贸小伙伴不会做谷歌SEO,快来学习。 本文由光算创作,有可能会被剽窃和修改,我们佛系对待这种行为吧。 谷歌seo新站如何快速排名? 答案是:大量优质原创内…

科技新浪推前浪 ChatGPT将元宇宙“拍在沙滩上”?

近期ChatGPT的热度显然已经盖过了元宇宙,回想去年元宇宙大热之际,很多企业纷纷跟进,甚至还有不少公司选择更名以表达All In元宇宙的决心。而如今ChatGPT抢占风头,成为新宠,元宇宙似乎被“抛弃”了,难道元宇…

VCL界面组件DevExpress VCL v22.2 - 拥有全新的矢量图形

DevExpress VCL是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程…

python网络编程详解

最近在看《UNIX网络编程 卷1》和《FREEBSD操作系统设计与实现》这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要的人,更重要的是方便自己整理思路,加…

ElasticSearch Script 操作数据最详细介绍

文章目录ElasticSearch Script基础介绍基础用法List类型数据新增、删除nested数据新增、删除根据指定条件修改数据根据指定条件修改多个字段数据-查询条件也使用脚本根据指定条件删除nested中子数据数据根据条件删除数据删除之后结果创建脚本,通过脚本调用根据条件查…

.net7窗口编程c#2022实战(1)-zip压缩精灵(1)

目录 创建ZIP精灵项目拖控件OpenFileDialog 类压缩与解压缩编写我们自己的代码其它参考内容创建ZIP精灵项目 VS2022中新建项目。 为窗体取一个标题名称 拖控件 左边工具栏里选择控件 拖三个按钮控件和一个listbox控件

动态规划问题汇总(一)

基本步骤 文章目录基本步骤509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯62.不同路径63. 不同路径 II343. 整数拆分96.不同的二叉搜索树509. 斐波那契数 递归版本 class Solution {public int fib(int n) {if(n0){return 0;}if(n1){return 1;}return fib(n-1)fib(n-2);} …

【华为OD机试模拟题】用 C++ 实现 - 求字符串中所有整数的最小和

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

2023年2月22日 [随记] 理想、面包

一些简单的吐槽,可以当个故事看一下。 文章目录简单的经历书籍清单这些是买了看过的买了没有仔细看的眨眼间也从业2年11个月多一点(就当是三年了),在2023年1月初,距离过年还有两周的时间,因为一些个人原因裸…

拓扑排序的思想?用代码怎么实现

目录 一、拓扑排序的思想 二、代码实现(C) 代码思想 核心代码 完整代码 一、拓扑排序的思想 以西红柿炒鸡蛋这道菜为例,其中的做饭流程为: 中间2 6 3 7 4的顺序都可以任意调换,但1和5必须在最前面,这是…

详细介绍React生命周期和diffing算法

事件处理 1.通过onXxx属性指定事件处理函数(注意大小写) React使用的是自定义(合成)事件, 而不是使用的原生DOM事件 —— 为了更好的兼容性;React中的事件是通过事件委托方式处理的(委托给组件最外层的元素) ——为了的高效。 2.通过event.target得到发生事件的DOM…

数据挖掘,计算机网络、操作系统刷题笔记54

数据挖掘,计算机网络、操作系统刷题笔记54 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

搭建kafka集群

Kafka集群依赖ZK,需要先启动ZK集群 机器:hadop101,hadoop102, hadoop103 【1】在hadoop101解压: tar -zxvf kafka_2.12-2.4.1.tgz -C ../module/ 【2】在hadoop101修改server.properties配置: #指定broker的id,类似zk…

亚马逊云科技SageMaker:实现自动、可视化管理迭代

现如今,AI正在成为跨时代的技术,在数字经济发展中登上舞台,发挥关键作用。在Gartner发布的《2022年新兴技术成熟度曲线》*报告中,AIGC(即AI Generated Content,人工智能自动生成内容)被列为2022…

微搭使用笔记(四) 通过循环展示组件+json配置生成表单及数据获取

背景及整体思路 上篇文章我们通过微搭提供的数据模型完成了问卷表单页面的创建和数据采集,相对来说除了数据模型配置略显复杂外其他的倒还算方便。 本文我们通过for循环加上json文件配置的方式实现一个通用表单页面,如果更换了表单只需要替换掉json配置…

stm32 VM8978 音乐播放

一、WAV文件 1、WAV文件简介 2、WAV文件的解析 二、WM8978 1、WM8978介绍 2、WM8978特点 3、WM8978接口 4、WM8978框架 5、 WM8978 寄存器 三、IIS详解 1、IIS介绍 2、 IIS 的特点 3、IIS框架 4、 音频协议 5、 IIS Philips 标准 6、 IIS 时钟 四、音乐播放硬件…

力扣-删除重复的电子邮箱

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:196. 删除重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其…

2.22Linux系统搭建

一.搭建Linux运行环境需要部署Java程序到服务器上,这样程序才能被外面的用户访问到1.安装jdkyum install develop x86_642.安装tomcat1)下载好,通过xshell直接拖到服务器上,依赖了rz命令2)解压缩unzip命令3)使.sh都有可执行权限chmod x *.sh4)启动 sh startup.sh5) 验证 ①ps a…