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

基于单片机设计的电子指南针(LSM303DLH模块(三轴磁场 + 三轴加速度)

一、前言

本项目是基于单片机设计的电子指南针,主要利用STC89C52作为主控芯片和LSM303DLH模块作为指南针模块。通过LCD1602液晶显示屏来展示检测到的指南针信息。

在日常生活中,指南针是一种非常实用的工具,可以帮助我们确定方向,特别是在户外探险、航海、定位等场景中。传统的磁罗盘指南针存在一些不便之处,如体积较大、不易携带、容易受到外界干扰等。设计一款基于单片机的电子指南针是比较有意义的项目。

为了实现这个项目,选择了STC89C52作为主控芯片。STC89C52是一款功能强大且成本较低的单片机,具有丰富的接口和强大的处理能力,非常适合用于嵌入式应用。同时,为了获得准确的指南针数据,采用了LSM303DLH模块作为指南针模块。该模块集成了三轴磁场传感器和三轴加速度传感器,能够提供高精度和稳定的指南针数据。

在项目的具体实现中,通过STC89C52与LSM303DLH模块进行通信,获取指南针传感器的原始数据。对这些原始数据进行处理和计算,通过磁场数据确定方向,并结合加速度数据来提高测量的准确性。最后,将计算得到的指南针信息通过LCD1602液晶显示屏展示出来,用户可以直观地查看当前的方向。

通过该电子指南针,用户可以方便地获得当前的方向信息,无论是在户外旅行、徒步探险还是其他需要导航的场景中,都能提供实时准确的方向指引。该项目不仅具有一定的技术挑战性,也能为用户带来便利和实用性。

image-20230913134357085

image-20230913134451215

二、项目设计过程

本项目的硬件模块接线、硬件设计思路以及软件设计思路如下:

2.1 硬件模块接线

(1)将STC89C52的VCC引脚连接到电源正极,将GND引脚连接到电源负极。

(2)将LSM303DLH模块的VCC引脚连接到电源正极,将GND引脚连接到电源负极。

(3)将LSM303DLH模块的SCL引脚连接到STC89C52的P2.0引脚,作为I2C的串行时钟线。

(4)将LSM303DLH模块的SDA引脚连接到STC89C52的P2.1引脚,作为I2C的串行数据线。

(5)将LCD1602液晶显示屏的VCC引脚连接到电源正极,将GND引脚连接到电源负极。

(6)将LCD1602液晶显示屏的RS引脚连接到STC89C52的P0.0引脚,作为指令/数据选择线。

(7)将LCD1602液晶显示屏的RW引脚连接到STC89C52的P0.1引脚,作为读写选择线。

(8)将LCD1602液晶显示屏的E引脚连接到STC89C52的P0.2引脚,作为使能控制线。

(9)将LCD1602液晶显示屏的D0-D7引脚连接到STC89C52的P1口引脚或P3口引脚,作为数据线。

2.2 硬件设计思路

(1)主控芯片选择了STC89C52,其具有丰富的IO口和强大的处理能力,适合用于该项目。

(2)指南针模块采用了LSM303DLH,它集成了磁场和加速度传感器,能够提供准确的指南针数据。

(3)LCD1602液晶显示屏用于显示检测到的指南针信息,在硬件设计中需要连接正确的引脚。

2.3 软件设计思路

(1)在软件设计中,需要配置STC89C52的IO口,以及I2C总线通信。

(2)通过I2C总线与LSM303DLH进行通信,获取指南针模块的原始数据。

(3)对获取的原始数据进行处理和计算,得到当前的指南针信息,确定方向。

(4)将计算得到的指南针信息通过LCD1602液晶显示屏进行显示。

(5)编写相应的函数来实现LCD1602的初始化、显示字符、显示字符串等功能。

(6)通过主循环不断更新指南针信息和LCD1602的显示。

本项目的硬件模块接线涉及到主控芯片、指南针模块和LCD1602液晶显示屏的连接。硬件设计思路是选择适合的芯片和模块,确保正常的数据传输和显示功能。软件设计思路包括配置IO口、I2C通信、数据处理和LCD1602显示功能的实现。通过这些设计,实现了一个基于单片机的电子指南针,并能够通过LCD1602显示屏显示检测到的指南针信息。

三、LSM303DLH 模块介绍

LSM303DLH 是一种集成式数字三轴加速度计和磁力计模块,由STMicroelectronics公司生产。结合了两个传感器,提供了同时测量物体的加速度和磁场的功能。

下面是 LSM303DLH 模块的一些主要特点和功能:

(1)加速度计功能:LSM303DLH 可以测量物体在三个轴向(X、Y 和 Z 轴)上的加速度。它提供了高分辨率的加速度测量范围,通常为 ±2g(重力加速度)至 ±16g。这使得它适用于各种应用,如运动检测、姿态测量和震动监测等。

(2)磁力计功能:LSM303DLH 还具有磁力计功能,可以测量物体周围的磁场。它使用磁阻式传感器来检测磁场的强度和方向,并提供三个轴向上的磁场测量数据。这使得它在指南针导航、地磁定位和磁场检测等应用中非常有用。

(3)数字输出接口:LSM303DLH 通过I2C或SPI接口与主控制器通信。这些数字接口使得与微控制器、单片机或其他数字设备的集成变得简单。

(4)高性能:LSM303DLH 提供高精度和低噪声的测量,以获得准确的加速度和磁场数据。它还具有温度补偿功能,可以提高测量的稳定性和精确性。

(5)低功耗:LSM303DLH 设计为低功耗模式,可以在不太耗电的情况下运行。这对于依靠电池供电的移动设备和便携式应用非常重要。

(6)应用领域:由于 LSM303DLH 模块同时提供了加速度计和磁力计功能,它适用于许多应用领域。例如,它可以用于移动设备中的姿态检测和自动旋转屏幕功能,用于导航系统中的指南针功能,以及用于运动追踪设备中的步数计算和运动分析等。

四、项目代码设计

#include <reg52.h>
#include <intrins.h>// 定义LCD1602引脚连接
sbit RS = P0^0;    // 指令/数据选择线
sbit RW = P0^1;    // 读写选择线
sbit E = P0^2;     // 使能控制线// 定义I2C总线连接
sbit SCL = P2^0;   // I2C串行时钟线
sbit SDA = P2^1;   // I2C串行数据线// 函数声明
void delay_us(unsigned int us);
void delay_ms(unsigned int ms);void I2C_Start();
void I2C_Stop();
void I2C_Ack();
void I2C_NoAck();
bit I2C_WaitAck();
void I2C_SendByte(unsigned char dat);
unsigned char I2C_ReceiveByte();void LCD_Init();
void LCD_WriteCmd(unsigned char cmd);
void LCD_WriteData(unsigned char dat);
void LCD_SetCursor(unsigned char row, unsigned char col);
void LCD_DisplayString(unsigned char row, unsigned char col, unsigned char *str);void Compass_Init();
unsigned char Compass_Read();
void Compass_Calculate(unsigned char raw_data, unsigned char *heading);// 主函数
int main() {unsigned char heading;unsigned char str[16];LCD_Init();Compass_Init();while(1) {heading = Compass_Read();Compass_Calculate(heading, str);LCD_SetCursor(0, 0);LCD_DisplayString(0, 2, "Compass");LCD_SetCursor(1, 4);LCD_DisplayString(1, 6, str);delay_ms(500);}return 0;
}// 延时函数,微秒级延时
void delay_us(unsigned int us) {while (us--) {_nop_();_nop_();_nop_();_nop_();}
}// 延时函数,毫秒级延时
void delay_ms(unsigned int ms) {while (ms--) {delay_us(1000);}
}// I2C总线开始
void I2C_Start() {SDA = 1;SCL = 1;delay_us(5);SDA = 0;delay_us(5);SCL = 0;
}// I2C总线结束
void I2C_Stop() {SDA = 0;SCL = 1;delay_us(5);SDA = 1;delay_us(5);
}// I2C总线发送应答信号
void I2C_Ack() {SDA = 0;SCL = 1;delay_us(5);SCL = 0;delay_us(5);
}// I2C总线发送不应答信号
void I2C_NoAck() {SDA = 1;SCL = 1;delay_us(5);SCL = 0;delay_us(5);
}// 等待I2C总线应答
bit I2C_WaitAck() {unsigned int i = 500;SDA = 1;SCL = 1;delay_us(1);while (SDA) {if (--i == 0) {I2C_Stop();return 0;}}SCL = 0;return 1;
}// I2C总线发送字节
void I2C_SendByte(unsigned char dat) {unsigned char i;for (i = 0; i < 8; i++) {SDA = dat & 0x80;SCL = 1;delay_us(5);SCL = 0;delay_us(5);dat <<= 1;}
}// I2C总线接收字节
unsigned char I2C_ReceiveByte() {unsigned char i;unsigned char dat = 0;SDA = 1;for (i = 0; i < 8; i++) {dat <<= 1;SCL = 1;delay_us(5);dat |= SDA;SCL = 0;delay_us(5);}return dat;
}// LCD初始化
void LCD_Init() {delay_ms(50);LCD_WriteCmd(0x38);delay_us(50);LCD_WriteCmd(0x0C);delay_us(50);LCD_WriteCmd(0x01);delay_ms(5);
}// LCD写入指令
void LCD_WriteCmd(unsigned char cmd) {RS = 0;RW = 0;P1 = cmd;E = 1;delay_us(5);E = 0;delay_us(5);
}// LCD写入数据
void LCD_WriteData(unsigned char dat) {RS = 1;RW = 0;P1 = dat;E = 1;delay_us(5);E = 0;delay_us(5);
}// LCD设置光标位置
void LCD_SetCursor(unsigned char row, unsigned char col) {unsigned char addr;if (row == 0) {addr = 0x80 + col;}else {addr = 0xC0 + col;}LCD_WriteCmd(addr);delay_us(5);
}// LCD显示字符串
void LCD_DisplayString(unsigned char row, unsigned char col, unsigned char *str) {LCD_SetCursor(row, col);while (*str != '\0') {LCD_WriteData(*str++);delay_us(5);}
}#define LSM303DLH_CTRL_REG1_A 0x20
#define LSM303DLH_OUT_X_H_A 0x29// 指南针初始化
void Compass_Init() {// 设置控制寄存器1,使能XYZ轴加速度计,数据速率=50HzI2C_Start();I2C_SendByte(0x3A); // LSM303DLH的I2C地址,注意写操作要在读写位上加低电平I2C_WaitAck();I2C_SendByte(LSM303DLH_CTRL_REG1_A);I2C_WaitAck();I2C_SendByte(0x27);I2C_WaitAck();I2C_Stop();
}// 读取指南针数据
unsigned char Compass_Read() {unsigned char data;// 读取X轴高位数据寄存器I2C_Start();I2C_SendByte(0x3A);I2C_WaitAck();I2C_SendByte(LSM303DLH_OUT_X_H_A);I2C_WaitAck();I2C_Start();I2C_SendByte(0x3B);I2C_WaitAck();data = I2C_ReceiveByte();I2C_NoAck();I2C_Stop();return data;
}#define LSM303DLH_OUT_X_H_M 0x03
#define LSM303DLH_OUT_Y_H_M 0x05
#define LSM303DLH_OUT_Z_H_M 0x07// 计算指南针方向
void Compass_Calculate(unsigned char *heading) {int x, y, z;// 读取X轴、Y轴和Z轴的磁力计数据I2C_Start();I2C_SendByte(0x3C); // LSM303DLH的I2C地址,注意写操作要在读写位上加低电平I2C_WaitAck();I2C_SendByte(LSM303DLH_OUT_X_H_M);I2C_WaitAck();I2C_Start();I2C_SendByte(0x3D);I2C_WaitAck();x = (I2C_ReceiveByte() << 8) | I2C_ReceiveByte();x = -(x / 16); // 根据实际情况进行校正I2C_NoAck();I2C_Stop();I2C_Start();I2C_SendByte(0x3C);I2C_WaitAck();I2C_SendByte(LSM303DLH_OUT_Y_H_M);I2C_WaitAck();I2C_Start();I2C_SendByte(0x3D);I2C_WaitAck();y = (I2C_ReceiveByte() << 8) | I2C_ReceiveByte();y = -(y / 16); // 根据实际情况进行校正I2C_NoAck();I2C_Stop();I2C_Start();I2C_SendByte(0x3C);I2C_WaitAck();I2C_SendByte(LSM303DLH_OUT_Z_H_M);I2C_WaitAck();I2C_Start();I2C_SendByte(0x3D);I2C_WaitAck();z = (I2C_ReceiveByte() << 8) | I2C_ReceiveByte();z = -(z / 16); // 根据实际情况进行校正I2C_NoAck();I2C_Stop();// 计算方向角度*heading = atan2(y, x) * 180 / PI;if (*heading < 0) {*heading += 360;}
}

五、总结

这个项目是基于STC89C52单片机和LSM303DLH模块设计的电子指南针。通过LCD1602显示器,可以实时显示检测到的指南针信息。

使用STC89C52作为主控芯片,搭建了整个系统的基础。通过配置引脚和初始化串口通信等必要的设置,确保单片机与其他硬件模块正常通信。

使用LSM303DLH模块来获取指南针的数据。该模块具有三轴磁场和三轴加速度功能,通过I2C总线与单片机进行通信。我们需要正确配置I2C通信,并实现相应的读取数据的函数。通过读取LSM303DLH模块的磁场数据,可以得到当前的指南针方向。

使用LCD1602显示器来显示指南针信息。通过初始化LCD1602和相应的控制函数,可以将当前的指南针方向以可视化的方式显示在LCD上,使用户能够方便地读取指南针信息。

在整个项目中,需要注意LSM303DLH模块和LCD1602的正确连接,还需要考虑到磁场干扰、数据校准和滤波等问题,以确保指南针的准确性和稳定性。

通过使用STC89C52单片机、LSM303DLH模块和LCD1602显示器,成功地设计并实现了一个电子指南针系统。这个系统可以读取磁场数据并计算出指南针的方向,并将其显示在LCD上,为用户提供了方便和准确的指南针功能。

相关文章:

基于单片机设计的电子指南针(LSM303DLH模块(三轴磁场 + 三轴加速度)

一、前言 本项目是基于单片机设计的电子指南针&#xff0c;主要利用STC89C52作为主控芯片和LSM303DLH模块作为指南针模块。通过LCD1602液晶显示屏来展示检测到的指南针信息。 在日常生活中&#xff0c;指南针是一种非常实用的工具&#xff0c;可以帮助我们确定方向&#xff0…...

深度学习 该用什么标准判断差异最小

决定差异最小的标准通常依赖于您的具体问题和任务。以下是一些常见的用于评估预测性能的标准和思路&#xff1a; 1. **均方根误差 (RMSE):** RMSE 是预测值和真实值之间差异的平方的平均值的平方根。它对较大的误差更加敏感。 from sklearn.metrics import mean_squared_error…...

汽车制造厂设备故障预测与健康管理PHM

在现代汽车制造工业中&#xff0c;设备的可靠性和稳定性对于保证生产线的高效运行至关重要。为了提高生产效率、降低维修成本以及确保产品质量&#xff0c;汽车制造厂逐渐采用设备故障预测与健康管理&#xff08;PHM&#xff09;系统&#xff0c;以实现对设备状态的实时监测和预…...

如何通过宝塔面板搭建一个MySQL数据库服务并实现无公网ip远程访问?

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…...

C++ Qt开发:TabWidget实现多窗体功能

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TabWidget标签组件的常用方法及灵活运用。 Q…...

【轻量化篇】YOLOv8改进实战 | 更换主干网络 Backbone 之 RepGhostnet,重参数化实现硬件高效的Ghost模块

YOLOv8专栏导航:点击此处跳转 前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操…...

【STM32工具篇】使用CLion开发STM32

本文主要记录使用CLion开发STM32&#xff0c;并调试相关功能 使用的CLion版本&#xff1a;2023.3.1 CLion嵌入式配置教程&#xff1a;STM32CubeMX项目 |CLion 文档 (jetbrains.com) OpenOCD官网下载&#xff1a;Download OpenOCD for Windows (gnutoolchains.com) GNU ARM工…...

elementui中的el-table,当使用fixed属性时,table主体会遮挡住滚动条的大半部分,导致很难选中。

情况&#xff1a; 解决&#xff1a; el-table加个类&#xff0c;这里取为class"table" 然后是样式部分&#xff1a; <style scoped lang"scss"> ::v-deep.table {// 滚动条高度调整::-webkit-scrollbar {height: 15px;}// pointer-events 的基本信…...

鸿蒙端H5容器化建设——JSB通信机制建设

1. 背景 2023年鸿蒙开发者大会上&#xff0c;华为宣布为了应对国外技术封锁的潜在风险&#xff0c;2024年的HarmonyOS NEXT版本中将不再兼容Android&#xff0c;并推出鸿蒙系统以及其自研的开发框架&#xff0c;形成开发生态闭环。同时&#xff0c;在更高维度上华为希望将鸿蒙…...

数据管理平台Splunk Enterprise本地部署结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…...

MaBatis使用`ResultMap`标签手动映射详解使用

文章目录 MaBatis使用ResultMap标签手动映射详解使用1、MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系&#xff0c;二者不同时无法自动ORM&#xff0c;如下&#xff1a;2、在SQL中使用 as 为查询字段添加列别名&#xff0c;以匹配属性名&#xff1a;但是如果我…...

openstack-keystone服务

文章目录 keystone服务安装和配置先决条件安装并配置组件运行以下命令来安装包。编辑文件 /etc/keystone/keystone.conf 并完成如下动作&#xff1a;初始化身份认证服务的数据库&#xff1a;初始化Fernet keys&#xff1a;Bootstrap the Identity service: 配置 Apache HTTP 服…...

大数据HCIE成神之路之数据预处理(3)——数值离散化

数值离散化 1.1 无监督连续变量的离散化 – 聚类划分1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 无监督连续变量的离散化 – 等宽划分1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实…...

stm32 寄存器、地址、位带操作

存储器区域功能划分 4GB 的地址空间中&#xff0c;ARM 已经粗线条的平均分成了 8 个块&#xff0c;每块 512MB&#xff0c;每个块也都规定了用途&#xff0c;具体分类见表格 6-1。每个块的大小都有 512MB&#xff0c;显然这是非常大的&#xff0c;芯片厂商在每个块的范围内设计…...

记录 | gdb使用backward-cpp来美化调试log

# 在当前工程目录下 git clone https://github.com/bombela/backward-cpp.git 编辑CMakeList.txt cmake_minimum_required(VERSION 3.15)project(exampleproj LANGUAGES CXX)add_subdirectory(backward-cpp)add_executable(main main.cpp)target_sources(main PUBLIC ${BACKW…...

EasyExcel模板导出(行和列自动合并)

1.需求背景: ①需要从第三方获取数据,第三方接口有两个参数,开始时间和结束时间 ②获取回来的数据并没有入库,所以不能通过数据库将数据归类统计,excel合并大概的流程是判断上一行或者左右相邻列是否相同,然后进行合并,所以不能是零散的数据且客户要求每一个自治区和每一个航站…...

EOCR-i3MZ/iFMZ施耐德漏电保护继电器产品简介

EOCR-i3MZ/iFMZ是施耐德EOCR的新一代电子式电动机保护器产品&#xff0c;具有过电流、欠电流、缺相、逆相、堵转、失速、三相不平衡、接地等保护功能。EOCR-i3MZ/iFMZ是通讯型产品&#xff0c;提供Modbus RTU通讯协议&#xff0c;RS485接口。 为方便设备维护人员排查电动机的故…...

golang开发--beego入门

Beego 是一个基于 Go 语言的开源框架&#xff0c;用于构建 Web 应用程序和 API。它采用了一些常见的设计模式&#xff0c;以提高开发效率、代码可维护性和可扩展性。 一&#xff0c;MVC设计模式 Beego 框架采用了经典的 MVC&#xff08;Model-View-Controller&#xff09;设计…...

python调取一欧易API并写一个比特币均线交易策略

比特币均线交易策略是一种基于比特币价格的移动均线的交易策略。它通过计算不同时间段的移动均线来确定买入和卖出点。 具体步骤如下&#xff1a; 确定要使用的均线。常用的均线包括5日、10日、20日、50日和200日均线。较短的均线可以更快地反应价格变动&#xff0c;而较长的均…...

使用arthas排查请求超时问题

现象 客户端调用服务时间出现偶尔超时现象 排查 因为服务已开启arthas&#xff0c;使用trace命令监控 $ trace com.lizz slowfun #cost > 1000 -n 10 监控com.lizz类中的slowfun方法&#xff0c;输出用时超过1000ms的记录&#xff0c;记录10条 Press CtrlC to abort. Aff…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...