当前位置: 首页 > news >正文

【51单片机】I2C总线详解 + AT24C02

学习使用的开发板:STC89C52RC/LE52RC
编程软件:Keil5
烧录软件:stc-isp

开发板实图:
在这里插入图片描述

文章目录

  • AT24C02介绍
    • 存储器
  • I2C总线介绍
    • I2C时序结构
    • 数据帧
    • AT24C02数据帧
  • 编程实例 —— 按键控制数据大小&存储器写入读出

AT24C02介绍

  • AT24C02 是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想永久保存的数据信息
  • 存储介质:E2PROM
  • 通讯接口:I2C总线
  • 容量:256字节

在这里插入图片描述

引脚及应用电路如下:

在这里插入图片描述

详细结合I2C通信协议讲解

存储器

存储器大致分为两类:
RAM(Random Access Memory,随机存取存储器),掉电丢失
ROM(Read Only Memory,只读存储器),掉电不丢失

在这里插入图片描述

RAM

  • SRAM(静态随机存储器):访问时间短,速度快,用于CPU高速缓存(Cache)。
  • DRAM(动态随机存储器):访问时间长,速度较慢,用于主存,也就是运行内存。

ROM

  • Mask ROM:在制作过程写入,写入后不可更改,类似磁带,只用于读取
  • PROM:可改写一次的只读存储器。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的PROM相反,出场全为0), 以实现对其“编程”的目的
  • EPROM(可擦除可编程ROM):具有可擦除功能,擦除后即可进行再编程,但是缺点是擦除需要使用紫外线照射一定的时间,且时间较长
  • E2PROM/E2PROM/EEPROM(电可擦除):可直接用电信号擦除,也可用电信号写入,写入时间为ms级别
  • Flash(闪存):属于E2PROM的改进产品。最大特点是必须按块(Block)擦除(每个区块的大小不定,不同厂家的产品有不同的规格), 而EEPROM则可以一次只擦除一个字节(Byte)。
  • 硬盘、软盘、光盘:相应控制器 + Flash闪存芯片

I2C总线介绍

单片机常用的通信方式有:UART(串口)、SPI、I2C、DS232

UART常用于两个单片机进行通信,详情参看【51单片机】串口通信
UART有三个缺陷:不能远距离传输、传输速度慢、不能一对多通信。针对这三个缺陷,衍生出了其他的通信方式:

远距离传输:RS232/RS485

传输速度:SPI(加了个clock线提供时钟信号),常用于SD卡,屏幕这类对通信速度要求高的外设

一对多通信:I2C —— 常用于开发板中,单片机与其他外设进行通信


  • I2C总线(Inter IC BUS) 是由 Philips 公司开发的一种通用数据总线
  • 同步、半双工、带数据应答
  • 有两根通信线:SCL(Serial Clock)、SDA(Serial Data)

所有I2C设备的 SCL 连接在一起,SDA 连在一起
设备的 SCL 和 SDA 均要配置成开漏输出模式

在这里插入图片描述

开漏输出可参看B站up主工科男孙老师的《推挽 开漏 高阻 这都是谁想出来的词??》
开漏输出可用于适配不同电压的芯片;在总线通信时避免不同设备输出高低电平导致设备烧毁。通过搭配外接上拉电阻输出高低电平
当 SCLKN1OUT 关闭,SCLKIN 为高电平;当 SCLK1OUT 打开,SCLKIN 为低电平


SCL 和 SDA 各添加一个上拉电阻,阻止一般为4.7KΩ左右
上拉电阻可参看B站up主工科男孙老师的《单片机的上拉电阻 到底在拉什么?》
上拉电阻阻值过小,会漏电;阻值过大,驱动能力(将低电平拉高的速度)下降。

当总线挂载设备增多时,可适当降低上拉电阻阻值

在这里插入图片描述
开漏输出 和 上拉电阻 的共同作用实现了“线与”的功能,解决多机通信互相干扰的问题
当总线设备较多且通信速度要求高,可以适当降低上拉电阻的阻值

详情参看B站up主工科男孙老师的《单片机I2C通信入门(上):硬件部分有哪些注意点?》

I2C时序结构

因为总线上挂载多个设备,需要约定通信协议才能让通信正确无误,畅通无阻
例如一次读数据通信,需要知道什么时候发起,向谁读数据,对方是否存在,读数据,停止读数据。
I2C通信协议将上述操作都抽象成了一个个时序,最终拼接成数据帧

总共有六个时序结构,如下:

起始条件 —— 数据帧的起始,表示开始通信

  • SCL 高电平期间,SDA 从高电平切换到低电平
    在这里插入图片描述

终止条件 —— 数据帧的结尾,表示通信结束

  • SCL 高电平期间,SDA 从低电平切换到高电平
    在这里插入图片描述

发送一个字节 —— 可发送数据,I2C地址,字地址…

  • SCL 低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高 SCL,从机(对方设备)将在 SCL 高电平期间读取数据位。SCL 高电平期间 SDA 不允许有数据变化,依次循环上述过程8次,即可发送一个字节数据
    在这里插入图片描述

注意:先拉低 SCL,再将数据放到 SDA,然后拉高 SCL,此时从机会读取 SDA 数据

接收一个字节 —— 主机(MCU) 接收从机数据

  • SCL 低电平期间,从机将数据依次放到 SDA 线上(高位在前),然后拉高 SCL,主机将在 SCL 高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
    在这里插入图片描述

注意:先拉高 SDA,释放总线给从机。从机在 SCL 低电平时将数据放到 SDA ,主机拉高 SCL 读取数据,再拉低 SCL 让从机放数据

发送应答 —— 接收从机数据后,告诉从机无误或有误

  • 在接收完一个字节之后,主机在下一个时钟发送一位数据、数据0表示应答,数据1表示非应答。发送流程同发送一位数据
    在这里插入图片描述

接收应答 —— 主机发送一字节数据后,接收从机的接收应答

  • 在主机发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0 表示应答,数据1 表示非应答(主机在接收之前,需要释放SDA)
    在这里插入图片描述

数据帧

I2C数据帧描述具体的一次通信,由上述时序结构拼接而成。

发送一帧数据 —— 向谁发什么

在这里插入图片描述

协议格式中第一个字节(为slave address)由7位地址和一位R/W读写位组成的,这字节是个器件地址。

I2C 挂载多个设备,通过从机地址(slave address)标识对哪个设备进行读/写操作

常用I2C接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位。
如格式如下:

在这里插入图片描述

  1. 器件类型:A6 - A3 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。本开发板为 1010

  2. 用户自定义地址码:A2 - A0 共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。AT24C02 的寻址码为 000
    在这里插入图片描述

  3. 最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号中写上面有一横线,表示低电平)。所以I2C设备通常有两个地址,即读地址和写地址

综上,AT24C02 的写地址为0xA0,读地址为0xA1


在这里插入图片描述

回到数据帧,发送一帧数据流程如下

S(起始位) -> 发送从机地址 + W -> 从机返回接收应答 -> 发送一字节数据 -> 从机返回接收应答 … -> P(终止位)


接收一帧数据

在这里插入图片描述

S(起始位) -> 发送从机地址 + W -> 从机返回接收应答 -> 接收一字节数据 -> 主机发送应答 -> … -> P(终止位)


复合格式 —— 先发送再接收

在这里插入图片描述

AT24C02数据帧

AT24C02是一个存储器,本质就是写入数据和读取数据,其数据帧分为字节写随机读

字节写

在这里插入图片描述
存储器内部还有字地址,需要指明将数据写到存储器的哪个位置 —— word address

随机读

在这里插入图片描述

需要先告诉 AT24C02 要读哪个地址的数据,再进行读字节数据帧

编程实例 —— 按键控制数据大小&存储器写入读出

按键和数码管部分参看【51单片机】独立按键 和 【51单片机】数码管

首先对I2C的时序结构进行封装,读者可以对照上述时序图,代码如下:

#include <REGX52.h>
#include "Delay.h"sbit I2C_SDA = P2^0;//数据线
sbit I2C_SCL = P2^1;//Clock线/*** @brief		I2C开始标志* @parm		无* @retval		无*/
void I2C_Start()
{//起始条件:SCL高电平期间,SDA从高电平切换到低电平//先置SDA = 1,确保从高电平切到低电平I2C_SDA = 1;//SCL置高电平I2C_SCL = 1;//SDA由高电平切换为低电平I2C_SDA = 0;//SCL恢复低电平I2C_SCL = 0;
}
/*** @brief		I2C停止标志* @parm		无* @retval		无*/
void I2C_Stop()
{//终止条件:SCL高电平期间,SDA从低电平切换到高电平//先置SDA = 0,确保从低电平切到高电平I2C_SDA = 0;//SCL置高电平I2C_SCL = 1;//SDA由低电平切换为高电平I2C_SDA = 1;
}
/*** @brief		I2C发送字节数据* @parm		Byte:要发送的数据,范围: 0 ~ 255* @retval		无*/
void I2C_SendByte(unsigned char Byte)
{//发送数据:从高位开始//SCL低电平期间,SDA写数据,SCL拉高后,从机读取数据unsigned char i = 0;for(i = 0; i < 8; ++i){I2C_SDA = Byte & (0x80 >> i);I2C_SCL = 1;//此处要注意若机器频率过快,可能导致从机还没读到数据,SCL就被拉低了I2C_SCL = 0;//需要查看手册。}
}
/*** @brief		I2C读取一字节数据* @parm		无* @retval		读取到的数据*/
unsigned char I2C_ReceiveByte()
{//接收数据,从高位开始//SCL高电平时,从SDA读数据unsigned char Byte = 0, i;//将SDA置高电平,释放SDA给从机I2C_SDA = 1;for(i = 0; i < 8; ++i){I2C_SCL = 1;if(I2C_SDA)	Byte |= (0x80 >> i);I2C_SCL = 0;}return Byte;
}
/*** @brief		发送应答* @parm		AckBit为0表示应答,为1表示非应答* @retval		无*/
void I2C_SendAck(unsigned char AckBit)
{//在读完一个字节后,主机在下一个时钟发送一位数据//数据0表示应答,数据1表示非应答I2C_SDA = AckBit;I2C_SCL = 1;I2C_SCL = 0;
}
/*** @brief		接收应答* @parm		无* @retval		Ack为0表示应答,为1表示非应答*/
unsigned char I2C_ReceiveAck()
{//在发完一个字节后,主机在下一个时钟接收一位数据,判断从机是否应答//数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)unsigned char Ack;//释放SDAI2C_SDA = 1;//SCL置高电平I2C_SCL = 1;//读响应Ack = I2C_SDA;//SCL置低电平I2C_SCL = 0;return Ack;
}

然后封装 AT24C02 的两个数据帧,对 I2C 的时序结构进行拼接

#include <REGX52.h>
#include "I2C.h"
//AT24C02的从机地址写,从机地址读需 |= 0x01
#define AT24C02_ADDRESS 0xA0/*** @brief		向AT24C02暂存器写入数据* @parm		WordAddress:写到暂存器的什么地址* @parm		Data:要写入的数据	* @retval		无*/
void AT24C02_WriteByte(unsigned char WordAddress, unsigned char Data)
{I2C_Start();I2C_SendByte(AT24C02_ADDRESS);I2C_ReceiveAck();I2C_SendByte(WordAddress);I2C_ReceiveAck();I2C_SendByte(Data);I2C_ReceiveAck();I2C_Stop();
}
/*** @brief		从AT24C02读取数据* @parm		WordAddress:读什么地址的数据* @retval		读出的数据*/
unsigned char AT24C02_ReadByte(unsigned char WordAddress)
{unsigned char Data;I2C_Start();I2C_SendByte(AT24C02_ADDRESS);I2C_ReceiveAck();I2C_SendByte(WordAddress);I2C_ReceiveAck();I2C_Start();I2C_SendByte(AT24C02_ADDRESS | 0x01);//此处是读I2C_ReceiveAck();Data = I2C_ReceiveByte();I2C_SendAck(1);I2C_Stop();return Data;
}

主程序 —— 监控按键按下,并执行相应操作

  • 按键一:变量++
  • 按键二:变量–
  • 按键三:将变量写入 AT24C02
  • 按键四:将数据读出 At24C02
#include <REGX52.h>
#include "AT24C02.h"
#include "SoleKey.h"
#include "LCD1602.h"
#include "Delay.h"void main()
{unsigned char Key = 0;unsigned int Count = 0;LCD_Init();//LCD1602初始化LCD_ShowNum(1, 1, Count, 5);while(1){Key = SoleKey();//获取哪个按键按下if(Key){if(Key == 1)//1按键按下,Count++{Count++;LCD_ShowNum(1, 1, Count, 5);}else if(Key == 2)//2按键按下,Count--{Count--;LCD_ShowNum(1, 1, Count, 5);}else if(Key == 3)//3按键按下,存储数据{AT24C02_WriteByte(0x00, Count / 256);Delayms(5);//因为写速度较慢,不能连续写,会导致数据错误AT24C02_WriteByte(0x01, Count % 256);LCD_ShowNum(1, 1, Count, 5);	//显示写入成功LCD_ShowString(2, 1, "Write OK!");Delayms(1000);LCD_ShowString(2, 1, "         ");}else if(Key == 4)//4按键按下,读出数据{Count = AT24C02_ReadByte(0x00) * 256 + AT24C02_ReadByte(0x01);LCD_ShowNum(1, 1, Count, 5);//显示读出成功LCD_ShowString(2, 1, "Read OK! ");Delayms(1000);LCD_ShowString(2, 1, "         ");}}}
}

效果如下:

【51单片机AT24C02 & I2C通信】

完整项目链接:

AT24C02 存储数据 & I2C通信


以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

相关文章:

【51单片机】I2C总线详解 + AT24C02

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 AT24C02介绍存储器 I2C总线介绍I2C时序结构数据帧AT24C02数据帧 编程实例 —— 按键控制数据大小&存储器写入读出 AT24C02介绍 …...

直接插入排序法

任务描述 本关任务&#xff1a;要求编写程序实现直接插入排序的功能。 相关知识 直接插入排序&#xff0c;是指将无序序列中的各元素依次插入到已经有序的数组中。 假设数组中前 i-1 元素已经有序&#xff0c;现在要将线性表中第 i 个元素插入到前面的有序子表中&#xff0c;…...

mysql中InnoDB索引与MyISAM索引

mysql索引 InnoDB 索引存储 主键索引&#xff08;聚簇索引&#xff09; 定义&#xff1a;主键索引是 InnoDB 存储引擎的聚簇索引&#xff0c;它决定了表中数据的物理存储顺序。每个 InnoDB 表都有一个且仅有一个聚簇索引。存储&#xff1a;主键索引的叶子节点直接包含表的数…...

Redis如何保证数据不丢失(可靠性)

本文主要以学习为主&#xff0c;详细参考&#xff1a;微信公众平台 Redis 保证数据不丢失的主要手段有两个&#xff1a; 持久化 多机部署 我们分别来看它们两的具体实现细节。 1.Redis 持久化 持久化是指将数据从内存中存储到持久化存储介质中&#xff08;如硬盘&#xf…...

【计网】物理层学习笔记

【计网】物理层 物理层概述 物理层要实现的功能 在各种传输媒体上传输比特0和1&#xff0c;进而为上面的数据链路层提供透明传输比特流的作用。 物理层接口特性 物理层之下的传输媒体 传输媒体是计网设备之间的物理通路&#xff0c;也称为传输介质。 传输媒体并不包含在…...

vue链接跳转

在 Vue 3 的组合式 API 中&#xff0c;你可以使用 ref 和 setup 函数来实现外部链接跳转功能。 方法 1&#xff1a;使用 click 和 window.open&#xff08;新标签页跳转&#xff09; 这种方式在点击时会打开一个新标签页并跳转到外部链接。 <menu-item value"item2&…...

IP地址是电脑自带的吗?是根据什么而决定的‌

IP地址并非电脑自带&#xff0c;而是由网络运营商或网络服务提供商通过特定的协议和机制进行分配和管理的。要深入理解IP地址的来源和决定因素&#xff0c;我们需要从IP地址的基本概念、分配方式以及影响分配的因素等多个方面进行探讨。 IP地址&#xff0c;即互联网协议地址&am…...

JavaFX史上最全教程 - Shape - JavaFX矩形椭圆

avaFX Shape类定义了常见的形状&#xff0c;如线&#xff0c;矩形&#xff0c;圆&#xff0c;Arc&#xff0c;CubicCurve&#xff0c;Ellipse和QuadCurve。 在场景图上绘制矩形需要宽度&#xff0c;高度和左上角的&#xff08;x&#xff0c;y&#xff09;位置。 要在JavaFX中…...

SpringBoot实现的企业资产管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

python-读写Excel:openpyxl-(4)下拉选项设置

使用openpyxl库的DataValidation对象方法可添加下拉选择列表。 DataValidation参数说明&#xff1a; type&#xff1a; 数据类型("whole", "decimal", "list", "date", "time", "textLength", "custom"…...

【C++】详解RAII思想与智能指针

&#x1f308; 个人主页&#xff1a;谁在夜里看海. &#x1f525; 个人专栏&#xff1a;《C系列》《Linux系列》 ⛰️ 丢掉幻想&#xff0c;准备斗争 目录 引言 内存泄漏 内存泄漏的危害 内存泄漏的处理 一、RAII思想 二、智能指针 1.auto_ptr 实现原理 模拟实现 弊端…...

Qt 环境实现视频和音频播放

在这个示例中&#xff0c;我们将使用 FFmpeg 进行视频和音频的解码&#xff0c;并使用 Qt 的界面进行显示和控制。为了实现音频和视频的解码以及同步显示&#xff0c;我们需要使用 FFmpeg 的解码库进行视频和音频解码&#xff0c;使用 Qt 的 QLabel 显示解码后的视频帧&#xf…...

【人工智能训练师】7 大数据处理与应用

大数据处理与应用&#xff08;Hive技术&#xff09;(0/100分) 1.本地开发工具连接Hadoop集群 1.本次环境版本为Hadoop2.7.7&#xff0c;对应eclips插件存放于云主机master:/usr/package277/中。 2.本机映射名为hadoop000&#xff0c;云主机Hadoop/Hive的hosts文件中IP需要修改…...

nginx配置文件介绍及示例

一、nginx配置文件一共有main&#xff0c;http&#xff0c;server&#xff0c;location&#xff0c;upstream&#xff0c;stream&#xff0c;events7个块。 step 1: main 块 作用&#xff1a;main 块是 Nginx 配置文件的顶级块&#xff0c;用于设置一些全局的参数和配置&…...

如何在算家云搭建YOLOv5(物体检测)

一、YOLOv5简介 YOLOv5 模型是一种以实时物体检测闻名的计算机视觉模型&#xff0c;由 Ultralytics 开发&#xff0c;并于 2020 年年中发布。它是 YOLO 系列的升级版&#xff0c;继承了 YOLO 系列以实时物体检测能力而著称的特点。 二、模型搭建流程 1.选择模型实例 在应用…...

现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库

文章目录 一、概要二、整体架构流程1. 安装 MSYS2 环境2. 安装postgresql 三、技术名词解释1.MSYS22.postgresql 四、技术细节1. 创建主数据库2.添加从数据库复制权限3. 按需修改参数&#xff08;1&#xff09;WAL保留空间&#xff08;2&#xff09;监听地址 4. 启动主服务器5.…...

使用Element UI实现一个拖拽图片上传,并可以Ctrl + V获取图片实现文件上传

要在 Element UI 的拖拽上传组件中实现 Ctrl V 图片上传功能&#xff0c;可以通过监听键盘事件来捕获粘贴操作&#xff0c;并将粘贴的图片数据上传到服务器。 版本V1&#xff0c;实现获取粘贴板中的文件 注意&#xff0c;本案例需要再你已经安装了Element UI并在项目中正确配…...

私域流量圈层在新消费时代的机遇与挑战:兼论开源 AI 智能名片、2 + 1 链动模式、S2B2C 商城小程序的应用

摘要&#xff1a;本文剖析了私域流量圈层在新消费时代呈现出的独特温度与信任优势&#xff0c;阐述了从传统销售到新消费转型中用户心理的变化。同时&#xff0c;强调了内容对于私域流量的关键作用&#xff0c;并分析开源 AI 智能名片、2 1 链动模式、S2B2C 商城小程序在私域流…...

vxe-vxe-colgroup后端返回数据 对数据进行处理 动态合并分组表头(v-if控制表格渲染(数据请求完成后渲染))

1.html vxe-colgroup循环合并数据&#xff1b;v-if控制表格渲染&#xff08;数据请求完成后渲染&#xff09; <template><vxe-table v-if"isTableReady" :data"tableData"><vxe-colgroup title"基本信息"><template v-for…...

ESLint 使用教程(五):从输入 eslint 命令到最终代码被处理,ESLint 中间究竟做了什么工作

前言 ESLint 是现代 JavaScript 开发中不可或缺的代码质量工具。它能够帮助开发者找到并修复代码中的问题&#xff0c;提升代码的可维护性。但是&#xff0c;你可能会好奇&#xff1a;从我们在终端里输入 eslint 命令到最终代码被处理&#xff0c;ESLint 中间究竟做了什么工作…...

【安全测试】sqlmap工具(sql注入)学习

前言&#xff1a;sqimap是一个开源的渗透测试工具&#xff0c;它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它有一个强大的检测引擎&#xff0c;许多适合于终极渗透测试的小众特性和广泛的开关&#xff0c;从数据库指纹、从数据库获 取数据到访问底层文件系…...

YOLOv11融合CVPR[2023]空间和通道重建卷积ScConv模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《SCConv: Spatial and Channel Reconstruction Convolution for Feature Redundancy》 一、 模块介绍 论文链接&#xff1a;SCConv: Spatial and Cha…...

C++研发笔记13——C语言程序设计初阶学习笔记11

从今天开始我们开始第三模块《分支语句和循环语句》的学习&#xff0c;在本模块中我们将会涉及到以下9个内容&#xff1a;什么是语句、分支语句——if语言、分支语句——switch语句、循环语句——while循环、循环语句——for循环、循环语句——do while循环、折半查找算法、猜数…...

html5拖放

1、什么是拖放&#xff08;Drag 和 Drop&#xff09; 拖放&#xff0c;字面意思就是拖动&#xff0c;放置 在编程里面也是如此,拖放是一种常见的特性&#xff0c;即抓取对象以后拖到另一个位置。 在 HTML5 中&#xff0c;拖放是标准的一部分&#xff0c;任何元素都能够拖放。…...

卫导调零天线功率倒置算法原理及MATLAB仿真

卫导调零天线功率倒置算法原理及MATLAB仿真 文章目录 前言一、调零天线简介二、功率倒置自适应算法三、MATLAB仿真四、MATLAB代码总结 前言 \;\;\;\;\; 自适应调零抗干扰技术可以很大程度改善导航抗干扰性能&#xff0c;也是目前导航抗干扰技术中不可或缺的&#xff0c;其研究意…...

【划分型 DP】力扣139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s “leetcode”, wordDic…...

Python学习从0到1 day26 第三阶段 Spark ④ 数据输出

半山腰太挤了&#xff0c;你该去山顶看看 —— 24.11.10 一、输出为python对象 1.collect算子 功能: 将RDD各个分区内的数据&#xff0c;统一收集到Driver中&#xff0c;形成一个List对象 语法&#xff1a; rdd.collect() 返回值是一个list列表 示例&#xff1a; from …...

AWTK fscript 中的 JSON 扩展函数

fscript 是 AWTK 内置的脚本引擎&#xff0c;开发者可以在 UI XML 文件中直接嵌入 fscript 脚本&#xff0c;提高开发效率。本文介绍一下 fscript 中的 ** JSON 扩展函数 ** 1.json_load 加载 json 数据。 原型 json_load(str) > object json_load(binary) > object js…...

动态规划 —— dp 问题-买卖股票的最佳时机III

1. 买卖股票的最佳时机III 题目链接&#xff1a; 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/ 2. 题目解析 3. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者…...

“绽放艺术风采、激发强国力量” 海南省第十一届中小学生艺术展演活动圆满开展

2024年11月1日&#xff0c;由省教育厅主办、琼台师范学院承办的海南省第十一届中小学生艺术展演省级展演活动在海口正式拉开帷幕。来自全省各市县、省属学校等共计4000余名师生参加本届中小学生艺术展演现场展演活动。 本届展演活动以“绽放艺术风采、激发强国力量”为主题&…...

cname域名解析/济南seo优化

题目大意 给你一个n 让你用0~n^2-1的数填满一个n*n的正方形 满足每个数值出现一次且每行每列的异或值相等 输出任意一种方案 分析 我们发现对于4*4的正方形 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 是满足条件的 那么如果对正方形中的每一个数都加上一个相同的数 那么这…...

怎么看到网站开发时间/全球中文网站排名

SCCM 2012远程控制 通过SCCM远程控制工具&#xff0c;管理员可以登录终端桌面进行管理配置工作。在远程控制中主要有三种远程控制的功能&#xff0c;分别是&#xff0c; 1、远程控制 2、远程协助 3、远程桌面 下面我们一一来介绍。 1、远程控制 远程控制功能默认是禁用的状态&a…...

qq上网站做我女朋友/各种资源都有的搜索引擎

题目 题意&#xff1a;长度为n的数轴 每次移动不能留在原地 输出一种走k次刚好走s的方法 很容易看出 k<s||k*(n-1)>s 的时候是有解的 然后后面怎么做呢&#xff1f; 大模拟是半天调不对的。。。思维是跟不上想不到的。。 就只能看题解混日子这个样子。。。。 由上面…...

网站开发dede/域名注册需要什么条件

所有软件系统中都必须包含一项关键组件&#xff0c;那就是用于存储、检索和分析数据的数据库。本文中&#xff0c;我们将和大家一起探讨适用于算法交易平台的数据库都会有哪些特性&#xff1f;有哪些可选择的数据库&#xff1f; 从广义层面来看&#xff0c;数据库提供了记录和…...

深圳有哪些网站建设/百度搜索推广方案

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割最新解析是由公众号安全生产模拟考试一点通提供&#xff0c;熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材汇编出熔化焊接与热切割仿真模拟考试。2021年熔化焊接与热切割最新解析…...

长沙网站推广智投未来/seo 工具推荐

/*javascript实现DOM&#xff08;基础&#xff09;author:shine*/DOM是一种文档对象模型&#xff0c;它定义了操作xml文档的方法和属性&#xff0c;但是它只是一系列接口&#xff0c;是由别的语言来实现&#xff0c;如&#xff1a;java中xerces&#xff0c;javascript,.net等 等…...