iic应用篇

news2024/12/28 18:43:05

一.iic的优点 

        1. IIC总线物理链路简单,硬件实现方便,扩展性非常好(1个主机控制器可以根据需求增加从机数量,同时删减从机数量也不会影响总线通信);IIC总线只需要SDA和SCL两条信号线,相比于PCI/LocalBus动则几十根信号线要简单太多,就算是SPI总线也至少需要4根信号线,而且片选(CS)数量受限(器件扩展受限);相对UART总线虽然只需要2条信号线,但一般只用于1对1通信(UART的一对多的通信也是可以的,但实现起来比较复杂)。

        2. 采用IIC总线的器件封装更容易实现小型化,对PCB空间的要求较小;采用IIC总线的器件管脚数量得到明显的简化,举个栗子:采用SPI总线的EEPROM至少需要8个管脚,那么IIC总线的EEPROM只需要4个管脚,可以减少一半的器件面积。

        3. IIC总线规范已经成熟稳定,IIC接口在不同行业的应用也非常广泛,大多数处理器/单片机集成了IIC控制器,而且很多种不同应用的器件支持IIC接口;

                1,总线接口的生命力很旺盛,容易找到该总线接口的器件升级;

                2,总线的软硬件接口设计标准化,开发难度低;

                3,用一个总线解决不同器件的管理,简化系统软硬件设计;

                4,IIC总线的各种问题已在大量应用中暴露出来,只需要关注已发现的问题,提前做好设计,就能保证总线的可靠。

        4. IIC总线的故障诊断和调试简单,由于IIC总线信号线少,协议简单,所以如果出现故障,可以很容易通过示波器抓到时钟或信号线上的故障;

        5. IIC总线通信:有抗电磁干扰高,电流损耗小,电源电压范围宽以及工作温度范围广等特点,适合应用于如下需求的板内部器件之间数据通信:

                1,由至少一个主机(Master)和其它外围从机(Slave)组成;

                2,IIC总线在系统中不同器件连接的成本最小;IIC器件接口复杂度小,器件封装小(器件成本小),IIC器件以及器件总线PCB走线所占PCB面积小(PCB成本小)等等;

                3,用于控制功能的系统不要求高速的数据传输(适合低速数据通信);尽管IIC总线没有并行总线的数据吞吐能力,但只需要很少的信号线和连接管脚;总的效益由选择的器件和互连总线结构的种类决定。

二.IIC总线概念

        IIC总线器件通过SDA(串行数据)和SCL(串行时钟线)在器件间传递信息,每个器件都有一个唯一的地址(无论是控制器、LCD、EEPROM或键盘接口),而且都可以作为是发送器或接收器。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机:主机(Master)是初始化总线的数据传输并产生允许传输的时钟信号的器件,而任何被寻址的器件都被认为是从机(Slave)。

三.使用AT24C02进行数据存储

1.开始位和停止位代码

 2.发送字节信息和接收字节信息

 

 

3.发送应答和接收应答

4.字节写

5.随机读代码

6.用AT24C02存储数据在LCD_1602显示屏显示

    使用LCD_1602进行显示,第二行显示num数字,当我们单击按钮时:

  • 点击k1,Num--

  • 点击k2,Num++

  • 点击k3,将Num的数据存储到AT24C02的地址为1的空间中

实现代码

void main(void)
{
  LCD_Init();
  LCD_ShowNum(1,1,Num,5);
  while(1)
  {
    KeyNum = Keynum_Get();
    if(KeyNum == 1)
    {
      Num++;
      LCD_ShowNum(1,1,Num,5);
    }
    if(KeyNum == 2)
    {
      Num--;
      LCD_ShowNum(1,1,Num,5);
    }
    if(KeyNum == 3)
    {
      AT24C02_WriteByte(0,Num%256);//取低八位放到0字节地址
      AT24C02_WriteByte(1,Num/256);//取高八位放到1字节地址
      LCD_ShowString(2,1,"Write OK!");
      delay_ms(1000);
      LCD_ShowString(2,1,"         ");
    }
    if(KeyNum == 4)
    {
      Num = AT24C02_ReadByte(0);//读低八位(地址0的数据)
      Num |= AT24C02_ReadByte(1) << 8;//读高八位(地址1的数据),程序自动数据类型转化,将一个字节的返回值转换成两个字节的数据,然后左移八位变成高八位
//      Num |= (unsigned int)AT24C02_ReadByte(1) << 8;
      LCD_ShowNum(1,1,Num,5);
      LCD_ShowString(2,1,"Read OK!");
      delay_ms(1000);
      LCD_ShowString(2,1,"        ");
    }
  }
}

        这样我们每次重启时就可以看到上次存储的数字了。

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

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

相关文章

python和pygame实现烟花特效

python和pygame实现烟花特效 新年来临之际&#xff0c;来一个欢庆新年烟花祝贺&#xff0c;需要安装使用第三方库pygame&#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 效果图及源码 先看效果图&#xff1a…

c#异常强大的统计运行时间功能,一行代码,监控 C# 方法执行耗时

MethodTimer.Fody MethodTimer.Fody 是一个功能强大的库&#xff0c;可以用于测量 .NET 应用程序中的方法的执行时间。 它使用 Fody 插件框架可以无缝集成到您的项目中&#xff0c;所以向代码中添加性能测量功能变得非常容易。 如何使用 首先&#xff0c;需要安装 Nuget 包&am…

程序员必备的十种排序算法

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

MS913/914 25-100MHz 10/12 位用于平面显示器链路Ⅲ的具有直流平衡编码和双向控制通道的串化器和解串器

MS913/MS914 芯片组是 25MHz~100MHz 10 位/12 位 FPD Link III SER/DES(串化器/解串器)&#xff0c;它提供高速 FPD-Link III 接口和高速正向通路以及用于差分对上数据发送的双向 控制通路。广泛应用于车载摄像&#xff0c;医疗设备&#xff0c;管道探测等领 域。 主要特点…

改进的A*算法的路径规划(2)

子节点优化选择策略 (1)子节点选择方式 为了找到从起始点到终点的路径&#xff0c;需定义一种可以选择后续节点的方式。在 A*算法中两种常见的方法为4-邻接(见图5-7(a) 和8-邻接(见图5-7(b)), 但考虑到 在复杂越野环境上&#xff0c;我们希望智能车辆允许更多的自由运动来更…

20231210原始编译NanoPC-T4(RK3399)开发板的Android10的SDK

20231210原始编译NanoPC-T4(RK3399)开发板的Android10的SDK 2023/12/10 17:27 rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ mkdir nanopc-t4 rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ cd nanopc-t4/ …

企业U盘防泄密的必备秘籍!迅软DSE答疑解析一切你需要知道的!

关于U盘防泄密&#xff1a; U盘是企事业单位办公时经常需要用到的存储介质&#xff0c;而一旦U盘不慎丢失或是落入他人手中&#xff0c;都会面临U盘内数据泄密的情况发生。 因此&#xff0c;企事业单位可通过天锐绿盾安全U盘系统对公司重要数据进行U盘防泄密保护&#xff0c;确…

二分查找|双指针:LeetCode:2398.预算内的最多机器人数目

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 滑动窗口 单调队列&#xff1a;计算最大值时&#xff0c;如果前面的数小&#xff0c;则必定被淘汰&#xff0c;前面的数早出队。 题目 你有 n 个机器人&#xff0c;给你两…

【CANoe】CANoe手动发送XCP报文读取观测量

文章目录 1、硬件连接&#xff1a;配置CANoe的CAN端口&#xff0c;连接到ECU标定对应的CAN口2、配置CAN IG模块报文&#xff1a;连接XCP&#xff0c;读取观测量&#xff0c;断开XCP3、报文解析4、参考资料 1、硬件连接&#xff1a;配置CANoe的CAN端口&#xff0c;连接到ECU标定…

LeetCode:1631. 最小体力消耗路径(SPFA Java)

目录 1631. 最小体力消耗路径 题目描述&#xff1a; 实现代码与解析&#xff1a; BFSDP 原理思路&#xff1a; 1631. 最小体力消耗路径 题目描述&#xff1a; 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights &#xff0c;其中 heights[row][col] 表…

掌握Selenium中元素缓存技巧,提高测试效率!

一、前言 / INTRODUCTION 本篇文章我们再来看下如何在Selenium中使用缓存 页面对象模型是UI自动化测试中的一种很好的设计模式&#xff0c;我们使用FindBy和FindAll注释来标记Page Object中的WebElement。 本次要讲的CacheLookup是一个非常重要但被忽视的注释&#xff0c;它可…

【UE5.2】通过Water插件使物体漂浮在水面上

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡&#xff0c;添加初学者内容包到内容浏览器 2. 在插件中启用“Water”插件&#xff0c;然后重启工程 3. 重启后提示“碰撞描述文件设置不包括水体碰撞描述文件的条目&#xff0c;水碰撞必须使用该描述文件才能正常工作…

Node后端框架Express与Koa接口统一响应封装

背景 以前在写 SpringBoot 全栈开发的系列文章中全栈开发之后端脚手架&#xff1a;SpringBoot集成MybatisPlus代码生成&#xff0c;分页&#xff0c;雪花算法&#xff0c;统一响应&#xff0c;异常拦截&#xff0c;Swagger3接口文档&#xff0c;有提到对后端接口的响应数据进行…

flink找不到隐式项

增加 import org.apache.flink.streaming.api.scala._ 即可

逆向思考 C. Fence Painting

Problem - 1481C - Codeforces 思路&#xff1a;逆序考虑&#xff0c;因为每一块木板都是被最后一次粉刷所决定的。 从后往前开始&#xff0c;对于 c i c_i ci​来说&#xff0c; 如果这个颜色还有没有涂的木板&#xff0c;那么涂到其中一个木板即可如果这个颜色下没有未涂的…

2024最新软件测试八股文,能不能拿心仪Offer就看你背得怎样了

前言 鉴于目前测试就业越来越严峻&#xff0c;内卷也成了测试领域的代名词了。我的一个HR朋友告诉我&#xff0c;由于门槛较低&#xff0c;现在普通测试岗&#xff08;偏功能&#xff09;的投递比已经将近100&#xff0c;也就是一个岗位差不多有百分简历投进来。 所以现在还想…

云原生之深入解析OOM和CPU节流

一、前言 使用 Kubernetes 时&#xff0c;内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题&#xff0c;这是为什么呢&#xff1f;云应用程序中的 CPU 和内存要求变得越来越重要&#xff0c;因为它们与云成本直接相关。通过 limits 和 requests &#xff0c;可…

表单参数绑定(如何解决一个输入框绑定两个参数)

表单参数绑定(如何解决一个输入框绑定两个参数) 问题复现 <el-form-item label"会议编号" prop"meetingNum"><el-select v-model"form.meetingNum" placeholder"请选择会议编号" style"width: 100%;":disabled&quo…

C语言:高精度除法(除低精度)

P1480 A/B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 由图知&#xff0c;被除数的上一位的余数乘10加这位就是这一位结果的除数。 c[i] (d * 10 a[i]) / b #include<stdio.h> #include<string.h> char x[50005];//存储被除数&#xff0c;转为字符…

leetcode 30. 串联所有单词的子串(优质解法)

代码&#xff1a; class Solution {public static List<Integer> findSubstring(String s, String[] words) {List<Integer> integerListnew ArrayList<>();int lengthwords.length; //words 数组中的字符串个数int sizewords[0].length(); //words 数组…