TCA9548A I2C 多路复用器 Arduino 使用相同地址 I2C 设备

在本教程中,我们将学习如何将 TCA9548A I2C 多路复用器与 Arduino 结合使用。我们将讨论如何通过整合硬件解决方案来使用多个具有相同地址的 Arduino 的 I2C 设备。通过使用 TCA9548A I2C 多路复用器,我们将能够增加 Arduino 的 I2C 地址范围,并能够连接 8 个具有相同地址的 I2C 设备。

TCA9548A 是一款 1 至 8 I2C 多路复用器。通过将设备连接到多路复用器并选择要通过多路复用器进行通信的设备,您可以在单个微控制器上使用最多 8 个具有相同地址的 I2C 从设备。

Arduino I2C 通信引脚

对于 I2C 通信,不同的 Arduino 板有不同的引脚专用为 SDA 和 SCL 引脚。下面的列表显示了各种板上的这些引脚号。

  1. 在 Arduino UNO 中,引脚 A4 = SDA,引脚 A5 = SCL
  2. 对于 Arduino Mega2560,引脚 20 = SDA,引脚 21 = SCL
  3. 在 Arduino Leonardo 中,引脚 2 = SDA,引脚 3 = SCL
  4. 对于 Arduino Due,引脚 20 = SDA,引脚 21 = SCL、SDA1、SCL。

在 Arduino 中使用多个不同地址从属 I2C 设备

在本节中,我们将首先使用默认的 I2C 引脚将三个不同的 I2C 设备(OLED、SHT32(温度传感器)和 BME280(温度传感器))与 Arduino 连接。然后我们将对我们的板进行编程以运行 I2C 扫描仪。

所需组件

  1. Arduino
  2. SSD1306 OLED显示屏
  3. BME280传感器
  4. SHT31传感器
  5. 面包板
  6. 连接线

Arduino 与 OLED、BME280 和 SHT31 的接口

带有 SHT31、BME280 和 OLED 硬件的 Arduino

让我们看看如何将 Arduino 与 OLED、BME280 模块和 SHT31 模块连接在一起。我们将使用一条公共 I2C 线来连接所有设备。Arduino 将充当主机,BME280 传感器、SHT31 传感器和 OLED 将充当从机。

我们使用的四个设备之间的连接如下表所示。

ArduinoSSD1306 OLED显示屏BME280SHT31
3.3VVCCVCCVCC
A4SDASDASDA
A5SCLSCLSCL
接地GNDGNDGND

我们使用了上表中指定的相同连接。

Arduino I2C 扫描仪 Arduino 草图

每个 I2C 设备都有一个与其关联的地址。Arduino 使用该地址通过 I2C 协议与从机进行通信。

现在复制此代码并将其上传到您的开发板以及已连接的所有 I2C 设备。

此代码将扫描与 Arduino 连接的任何 I2C 设备,并指定串行终端中具有地址的设备数量。

#include <Wire.h>void setup() {Wire.begin();Serial.begin(115200);Serial.println("\nI2C Scanner");byte error, address;int nDevices;Serial.println("Scanning...");nDevices = 0;for(address = 1; address < 127; address++ ) {Wire.beginTransmission(address);error = Wire.endTransmission();if (error == 0) {Serial.print("I2C device found at address 0x");if (address<16) {Serial.print("0");}Serial.println(address,HEX);nDevices++;}else if (error==4) {Serial.print("Unknown error at address 0x");if (address<16) {Serial.print("0");}Serial.println(address,HEX);}    }if (nDevices == 0) {Serial.println("No I2C devices found\n");}else {Serial.println("done\n");}delay(5000);  Serial.print("i2c devices found:");Serial.println(nDevices); 
}void loop() {}

Arduino I2C扫描仪串口终端

I2C 扫描器识别出 3 个连接到 I2C 接口的设备。OLED显示屏的I2C地址是0x3C,SHT31是0x44,BME280是0x76。

由于这三个 I2C 设备都有不同的地址,因此可以共享相同的 I2C 总线。

Arduino 在 OLED 上显示 BME280 和 SHT31 温度读数

从 I2C 扫描仪中可以看出,BME280、SHT31 和 OLED 具有不同的 I2C 地址,因此可以共享相同的 I2C 总线。让我们向您展示一个 Arduino 草图,它可以访问这两个传感器的温度读数并将其显示在 OLED 上。

我们将使用 Arduino IDE 对 Arduino 开发板进行编程。因此,您应该拥有最新版本的 Arduino IDE。

Arduino 多个具有不同地址的 I2C 设备 在 OLED 上显示温度

在 Arduino IDE 中安装 SSD1306 OLED 库

要在我们的项目中使用 OLED 显示屏,我们必须在 Arduino IDE 中安装 Adafruit SSD 1306 库。按照以下步骤即可成功安装。

打开 Arduino IDE 并单击 Sketch > Library > Manage Libraries。将打开以下窗口。

搜索库 Arduino IDE

在搜索选项卡中输入“SSD1306”并安装 Adafruit SSD1306 OLED 库。

安装OLED SSD1306库Arduino IDE

安装 BME280 Arduino 库

当我们将 BME280 传感器与 Arduino 连接时。因此,我们必须将 BME280 库安装到我们的模块中。该项目需要两个库:

  1. Adafruit_BME280 库
  2. Adafruit_传感器库

我们将使用 Arduino IDE 中的库管理器来安装最新版本的库。打开 Arduino IDE 并转到 Sketch > Include Libraries > Manage Libraries。 在搜索栏中输入 Adafruit BME280 库名称并安装它们。

Adafruit BME280 库 Arduino IDE

打开 Arduino IDE 并转到 Sketch > Include Libraries > Manage Libraries。 在搜索栏中输入 Adafruit 统一传感器库名称并安装。

Adafruit 统一传感器库安装

安装SHT31 Arduino库

由于我们将 SHT31 传感器模块与 Arduino 连接,因此我们必须安装库来访问传感器数据。该项目需要两个库:

  1. 阿达水果 SHT31
  2. Adafruit 总线IO

我们将使用 Arduino IDE 中的库管理器来安装最新版本的库。打开 Arduino IDE 并转到 Sketch > Include Libraries > Manage Libraries。 在搜索栏中输入 Adafruit SHT31 并安装最新版本。

安装 Adafruit SHT31 库

在搜索栏中输入 Adafruit BusIO 并安装它。

安装 Adafruit BusIO 库

Arduino 在 OLED 代码上显示 BME280 和 SHT31 温度读数

代码如何运作?

现在,让我们了解代码的每个部分是如何工作的。

代码首先包含代码正常功能所需的所有必要库。Wire.h 将允许我们通过 I2C 协议进行通信。其余的库是我们刚刚安装的用于 BME280 传感器、SHT31 传感器和 OLED 功能的库。

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_SHT31.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

然后,我们通过将其设置在默认 I2C GPIO 引脚上来定义名为“bme”的 Adafruit_BME280 对象,并创建名为“sht31”的 Adafruit_SHT31 对象。

Adafruit_BME280 bme; 
Adafruit_SHT31 sht31 = Adafruit_SHT31();

现在,我们创建另一个名为 display 的对象,它将处理 OLED 显示。此外,通过将参数传递给 Adafruit_SSD1306() 函数来定义 OLED 显示屏的尺寸。

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);
setup()

打开串口通讯,波特率为115200。

Serial.begin(115200);

通过调用显示对象的 begin() 方法来初始化 OLED 显示。

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

接下来,我们将通过调用clearDisplay()函数来清除OLED屏幕。此外,我们使用 setTextColor() 函数设置文本的颜色并传递 WHITE 作为参数。如果我们有深色背景,我们将以白色显示文本,如果我们有明亮背景,那么我们将以黑色显示文本。另外,我们使用 setTextSize() 设置字体大小。

  display.clearDisplay();display.display();display.setTextSize(1);display.setTextColor(WHITE);

然后,BME280 传感器使用进行初始化,如果发生故障,串行监视器上会打印一条错误消息。同样,SHT31 传感器也被初始化。如果传感器初始化不成功,串行监视器上将打印相关消息。

  bool status;status = bme.begin(0x76);  if (!status) {Serial.println("Could not find a valid BME280 sensor, check wiring!");while (1);}if (! sht31.begin(0x44)) {   Serial.println("Check circuit. SHT31 not found!");while (1) delay(1);}
loop()

在loop()函数中,我们分别使用bme.readTemperature()和sht31.readTemperature获取BME280和SHT31温度读数。这些信息每秒都会显示在 Arduino 串行监视器和 OLED 上。

void loop() { display.setCursor(0,0);Serial.print("Temperature BME280 = "); Serial.print(bme.readTemperature()); Serial.println(" °C");display.print("Temperature: "); display.print(bme.readTemperature()); display.println(" C");display.setCursor(0,20);Serial.print("Temperature SHT31 = "); Serial.print(sht31.readTemperature()); Serial.println(" °C");display.print("Temperature: "); display.print(sht31.readTemperature()); display.println(" C");Serial.println();display.display();display.clearDisplay();delay(1000);
}

示范

要查看上述代码的演示,请将代码上传到 Arduino。但是,在上传代码之前,请确保从 Tools  >  Board 选择 Arduino 板,并从Tools  >  Port选择 Arduino 板连接的正确 COM 端口 。

一旦代码成功上传到开发板,OLED 将开始显示两个传感器的温度读数,如下所示:

Arduino 具有不同地址的多个 I2C 设备 在 OLED 演示上显示温度

此外,您还可以在Arduino串口终端中查看温度读数。记得将波特率设置为115200。

Arduino 多个不同地址的I2C设备 显示温度终端

串行监视器

TCA9548A 与 Arduino 具有相同地址的多个 I2C 设备

在上一节中,我们能够在 Arduino 的相同 I2C 引脚上连接三个不同的 I2C 设备。这是因为 Arduino 能够通过其唯一的地址来识别它们。但是,当我们想用Arduino连接多个设备进行I2C通信,但它们的地址相同时,会发生什么情况呢?例如,两个BME280传感器与Arduino连接或两个OLED与Arduino连接。

要在 Arduino 上使用相同的 I2C 设备,我们要么必须更改设备的 I2C 地址,要么使用 I2C 多路复用器。然而,更改设备的地址并不是那么简单,并且它只允许在同一 I2C 总线上使用有限的设备。因此我们可以使用多路复用器,例如。TCA9548A 允许最多 8 个具有相同地址的设备连接到同一 I2C 总线。因此,它的工作电压范围为 3-5.5 伏,因此可以方便地与具有 3.3/5V 逻辑引脚的微控制器一起使用。

下图显示了 TCA9548A 多路复用器,我们将其与具有相同地址的 I2C 设备一起使用,以便与 Arduino 进行通信。

TCA9548A 1 至 8 I2C 多路复用器 IC

TCA9548A 多路复用器

它是一种电子开关设备,使用户能够将多个 I2C 总线与其自身连接。所有具有相同地址的从站需要连接到不同的总线。为了与从机通信,连接到从机的总线由用户切换,然后寻址。

TCA9548A 多路复用器引脚分配

下图显示了用作 I2C 扩展器的 TCA9548A 多路复用器的引脚排列。

TCA9748A 多路复用器引脚分配

  • Vin:这是为模块提供电源的引脚。将Arduino的3.3V或5V引脚与此引脚连接。
  • GND:这是提供公共接地的引脚。
  • SDA:这是与主设备连接的I2C串行数据引脚。
  • SCL:这是与主设备连接的I2C串行时钟引脚。
  • RST:该引脚负责复位多路复用器。
  • A0、A1、A2:这三个引脚用于更改多路复用器的 I2C 地址。默认情况下,当这些引脚未连接时,其地址为 0x70。借助该模块,单个 I2C 地址最多可扩展为 8 个 I2C 地址。
  • SDx、SCx:这些是外部 I2C 通道通道 0 至通道 7。对于具有相同地址的每个 I2C 设备,将 SDA 引脚与 SDx 连接,将 SCL 引脚与 SCx 连接。

Arduino 使用 TCA9548A 多路复用器在 OLED 上显示文本

让我们向您展示如何使用 TCA9548A 多路复用器通过 Arduino 连接和编程具有相同地址 0x3C 的两个 OLED。我们需要以下组件:

所需组件

  1. Arduino
  2. 两个 SSD1306 OLED
  3. TCA9548A 多路复用器
  4. 四个 10k 欧姆上拉电阻
  5. 面包板
  6. 连接线

Arduino 与带有 OLED 的 TCA9548A 多路复用器的接口

让我们向您展示如何将 TCA9548A 多路复用器与 Arduino 和 OLED 连接。Arduino 将充当主机,OLED 将充当从机。

按照下面的示意图连接所有设备。

带有 TCA9748A 多路复用器和 OLED 的 Arduino 原理图

下表显示了 TCA9548A 与 Arduino 和两个 OLED 连接的引脚。

TCA9548A与其余设备的连接
vinArduino 的 3.3V,两个 OLED 的 VCC
GNDArduino 的 GND、两个 OLED 的 GND
SDAArduino的A4
SCLArduino的A5
SD0OLED1 的 SDA 带 10k 欧姆上拉电阻
SC0OLED1 的 SCL 带 10k 欧姆上拉电阻
SD1OLED2 的 SDA 带 10k 欧姆上拉电阻
SC1OLED2 的 SCL 带 10k 欧姆上拉电阻

带有 TCA9748A 多路复用器和 OLED 硬件的 Arduino

Arduino 使用 TCA9548A 多路复用器代码在 OLED 上显示文本

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire, -1);void TCA9548A(uint8_t bus) //activate particular channel
{Wire.beginTransmission(0x70);  // TCA9548A address is 0x70Wire.write(1 << bus);          // send byte to select busWire.endTransmission();
}void setup()
{Serial.begin(115200);Wire.begin();delay(100);TCA9548A(0);display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();display.setTextSize(2);display.setCursor(20, 10);display.setTextColor(WHITE);display.println("OLED #1");display.display(); TCA9548A(1);display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();display.setTextSize(2);display.setCursor(20, 10);display.setTextColor(WHITE);display.println("OLED #2");display.display(); }void loop() {}

该代码如何运作?

现在,让我们了解代码的每个部分是如何工作的。

代码首先包含正确代码功能所需的所有必要库。Wire.h 将允许我们通过 I2C 协议进行通信,Adafruit_GFX.h 和 Adafruit_SSD1306.h 是 OLED 库。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

现在,我们创建一个名为 display 的对象,它将处理 OLED 显示。此外,通过将参数传递给 Adafruit_SSD1306() 函数来定义 OLED 显示屏的尺寸。

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire, -1);

接下来,我们为 TCA9548A() 定义一个函数,它接受一个参数,即 I2C 总线通道。每当我们想要激活特定的 I2C 通道时就会调用此函数。

void TCA9548A(uint8_t bus) 
{Wire.beginTransmission(0x70);  // TCA9548A address is 0x70Wire.write(1 << bus);          // send byte to select busWire.endTransmission();
}
设置()

打开串口通信,波特率115200,发起I2C通信。

  Serial.begin(115200);Wire.begin();

接下来,我们通过调用 TCA9548A() 函数来激活 I2C 通道 0,并将 0 作为其中的参数传递。我们的第一个 OLED 与 I2C 通道 0 连接。之后我们初始化 OLED 显示、清屏、设置文本颜色、设置字体大小和光标位置。然后我们在显示屏上打印文本“OLED #1”。

  TCA9548A(0);display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();display.setTextSize(2);display.setCursor(20, 10);display.setTextColor(WHITE);display.println("OLED #1");display.display(); 

接下来,我们通过调用 TCA9548A() 函数作为传递 1 作为其中的参数来激活 I2C 通道 1。我们的第二个OLED与I2C通道1连接。之后我们初始化OLED显示屏,清除屏幕,设置文本颜色,设置字体大小和光标位置。然后我们在显示屏上打印文本“OLED #2”。

TCA9548A(1);display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();display.setTextSize(2);display.setCursor(20, 10);display.setTextColor(WHITE);display.println("OLED #2");display.display(); 

示范

要查看上述代码的演示,请将代码上传到 Arduino。但是,在上传代码之前,请确保从 Tools  >  Board 选择 Arduino 板,并从Tools  >  Port选择 Arduino 板连接的正确 COM 端口 。

一旦代码成功上传到开发板,两个 OLED 将开始显示各自的文本,如下所示:

带有 TCA9748A 多路复用器和 OLED 演示的 Arduino

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

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

相关文章

大模型的开源闭源

文章目录 开源&闭源开源和闭源的优劣势比较开源和闭源对大模型技术发展的影响开源与闭源的商业模式比较国内的大模型开源和闭源的现状和趋势 开源和闭源&#xff0c;两种截然不同的开发模式&#xff0c;对于大模型的发展有着重要影响。 开源让技术共享&#xff0c;吸引了众…

【LVS实战】04 LVS+Keepalived实现负载均衡高可用

一、介绍 Keepalived 是一个用于 Linux 平台的高可用性软件。它实现了虚拟路由器冗余协议 (VRRP) 和健康检查功能&#xff0c;可以用于确保在多台服务器之间提供服务的高可用性。Keepalived 可以检测服务器的故障&#xff0c;并在主服务器宕机时&#xff0c;自动将备份服务器提…

Golang数据类型(字符串)

字符串重要概念 根据Go语言官方的定义&#xff1a; In Go, a string is in effect a read-only slice of bytes. 意思是Go中的字符串是一组只读的字节切片&#xff08;slice of bytes&#xff09;&#xff0c;每个字符串都使用一个或多个字节表示&#xff08;当字符为 ASCII 码…

Spring Boot实现热部署

Spring Boot提供了一个名为spring-boot-devtools的开发工具&#xff0c;它可以实现热部署功能。通过使用spring-boot-devtools&#xff0c;可以在修改了resources目录下的内容后&#xff0c;自动重新加载应用程序&#xff0c;而无需手动重启。 以下是使用spring-boot-devtools…

Springboot3+vue3从0到1开发实战项目(二)

前面完成了注册功能这次就来写登录功能&#xff0c; 还是按照这个方式来 明确需求&#xff1a; 登录接口 前置工作 &#xff1a; 想象一下登录界面&#xff08;随便在百度上找一张&#xff09; 看前端的能力咋样了&#xff0c; 现在我们不管后端看要什么参数就好 阅读接口文档…

人工智能对我们的生活影响有多大?

一、标题解析 本文标题为“人工智能对我们的生活影响有多大&#xff1f;”&#xff0c;这是一个典型的知乎风格SEO文案标题&#xff0c;既能够吸引读者&#xff0c;又能够体现文章的核心内容。 二、内容创作 1. 引言&#xff1a;在开头&#xff0c;我们可以简要介绍人工智能…

TLSF算法概念,原理,内存碎片问题分析

TLSF算法介绍 TLSF&#xff08;Two-Level Segregated Fit&#xff0c;两级分割适应算法&#xff09;。 第一级&#xff08;first level,简称fl&#xff09;&#xff1a;将内存大小按2的幂次方划分一个粗粒度的范围&#xff0c;如一个72字节的空闲内存的fl是6&#xff08;72介…

Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)

Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器 镜像:可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在…

电脑提示mfc100u.dll缺失如何解决?分享有效的5个解决方法

由于各种原因&#xff0c;电脑可能会出现一些问题&#xff0c;其中之一就是电脑提示mfc100u.dll的错误。这个问题可能会导致电脑无法正常运行某些程序或功能。为了解决这个问题&#xff0c;我将分享验证有效的五个修复方法&#xff0c;帮助大家恢复电脑的正常运行。 首先&#…

159.库存管理(TOPk问题!)

思路&#xff1a;也是tok的问题&#xff0c;与上篇博客思路一样&#xff0c;只不过是求前k个小的元素&#xff01; 基于快排分块思路的代码如下&#xff1a; class Solution { public:int getkey(vector<int>&nums,int left,int right){int rrand();return nums[r%…

算法通关村第四关—栈的经典算法问题(白银)

emsp;emsp;栈的经典算法问题 一、括号匹配问题 emsp;首先看题目要求&#xff0c;LeetCode20.给定一个只包括’(‘&#xff0c;)’&#xff0c;‘{&#xff0c;’&#xff0c;[&#xff0c;]的字符串s&#xff0c;,判断字符串是否有效。有效字符串需满足&#xff1a; 1.左括号…

我爱上这38个酷炫的数据大屏(附 Python 源码)

随着大数据的发展&#xff0c;可视化大屏在各行各业得到越来越广泛的应用。 可视化大屏不再只是电影里奇幻的画面&#xff0c;而是被实实在在地应用在政府、商业、金融、制造等各个行业的业务场景中&#xff0c;切切实实地实现着大数据的价值。 所以本着学习的态度&#xff0…

win10 修改任务栏颜色 “开始菜单、任务栏和操作中心” 是灰色无法点击,一共就两步,彻底解决有图有真相。

电脑恢复了一下出厂设置、然后任务栏修改要修改一下颜色&#xff0c;之前会后来忘记了&#xff0c;擦。 查了半天文档没用&#xff0c;最后找到官网才算是看到问题解决办法。 问题现象: 解决办法: 往上滑、找到这里 浅色改成深色、然后就可以了&#xff0c;就这么简单。 w…

P1 嵌入式开发之什么是Linux应用开发

目录 前言 01 .Linux应用与裸机编程、驱动编程之间的区别 1.1裸机编程&#xff1a; 1.2 驱动编程 1.3应用编程 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&a…

Python练习题(二)

&#x1f4d1;前言 本文主要是【Python】——Python练习题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

量子光学的进步:光子学的“下一件小事”

量子光学是量子力学和光学交叉领域中发展迅速的一门学科&#xff0c;探索光的基本特性及其与物质在量子水平上的相互作用。通过利用光的独特特性&#xff0c;量子光学为通信、计算、密码学和传感等各个学科的变革性进步铺平了道路。 如今&#xff0c;量子光学领域的研究人员和工…

C++基础 -33- 单目运算符重载

单目运算符重载格式 a和a通过形参确定 data1 operator() {this->a;return *this; }data1 operator(int) {data1 temp*this;this->a;return temp; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int…

【技术分享】RK356X Android11 以太网共享4G网络

本文基于IDO-SBC3566-V1B Android11系统实现开机后以太网自动共享4G网络功能。 IDO-SBC3566基于瑞芯微RK3566研发的一款高性能低功耗的智能主板&#xff0c;采用四核A55,主频高达1.8GHz&#xff0c;专为个人移动互联网设备和AIOT设备而设计&#xff0c;内置了多种功能强大的嵌…

【开源】基于Vue+SpringBoot的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…

JAVA全栈开发 集合详解(day14+day15汇总)

一、数组 数组是一个容器&#xff0c;可以存入相同类型的多个数据元素。 数组局限性&#xff1a; ​ 长度固定&#xff1a;&#xff08;添加–扩容&#xff0c; 删除-缩容&#xff09; ​ 类型是一致的 对象数组 &#xff1a; int[] arr new int[5]; … Student[] arr …