【STM32项目】环境监测设计

✌️✌️大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是基于《基于STM32的环境监测设计》。

目录

1、系统功能

2.1、硬件清单

2.2、功能介绍

2.3、控制模式

2、演示视频和实物

3、系统设计框图

4、软件设计流程图

5、原理图

6、主程序

7、总结


1、系统功能

2.1、硬件清单

STM32F103C8T6最小核心控制板+ESP8266-01SWiFi模块+DHT11温湿度传感器+0.96寸OLED显示屏+PM2.5传感器+4按键模块+声光报警模块(LED灯+蜂鸣器)+光敏电阻+后备电池+MQ2烟雾传感器+MQ9一氧化碳传感器+MQ135空气质量传感器

2.2、功能介绍

(1)STM32F103C8T6最小核心控制板:作为系统主控单元,负责协调各传感器数据采集、处理及控制外设动作。
(2)ESP8266-01SWiFi模块:连接机智云平台,实现手机APP远程监控与控制,支持数据上传云端及接收远程指令。
(3)DHT11温湿度传感器:实时检测环境温度与湿度,数据同步显示于OLED屏并上传云平台。
(4)0.96寸OLED显示屏:分页面显示传感器参数(PM2.5、光照强度、空气质量、一氧化碳、烟雾、温湿度)及阈值设置界面。
(5)PM2.5传感器:监测空气中PM2.5浓度,当数值超过设定阈值时触发声光报警。
(6)4按键模块:
•    第1个按键:页面切换(传感器数据页/阈值设置页)。
•    后3个按键:阈值设置(切换阈值类型、增加阈值数值),支持本地手动调整各参数报警阈值。
(7)声光报警模块:由LED灯和蜂鸣器组成,当传感器检测值超过阈值时同步发出光闪与声音报警。
(8)光敏电阻:采集环境光照强度,数值用于阈值比较及显示,支持手动调整光照报警阈值。
(9)后备电池:系统断电后为时钟供电,确保实时时间准确性。
(10)MQ2烟雾传感器:检测环境烟雾浓度,超过阈值时触发报警。
(11)MQ9一氧化碳传感器:监测一氧化碳浓度,超标时启动声光报警。
(12)MQ135空气质量传感器:检测空气质量指数,数值异常时触发报警。

2.3、控制模式

(1)远程模式:通过机智云平台连接手机APP,可远程查看PM2.5、温湿度、光照强度、烟雾、一氧化碳、空气质量等实时数据,支持远程设置各参数报警阈值及控制声光报警功能。
(2)本地手动模式:
•    页面切换:通过第1个按键切换传感器数据显示页与阈值设置页。
•    阈值设置:在阈值设置页,通过后3个按键调整各参数阈值(如PM2.5阈值、光照强度阈值、温湿度阈值等),设置时数值实时更新并显示。
(3)自动报警模式:系统实时监测各传感器数据,当检测值超过预设阈值时(如PM2.5>300、光照强度<设定值、一氧化碳浓度超标等),自动触发声光报警模块,LED灯闪烁且蜂鸣器发声,报警状态同步上传至手机APP。


2、演示视频和实物

基于STM32的环境监测设计


3、系统设计框图


4、软件设计流程图


5、原理图


6、主程序

#include "sys.h"                //头文件
/***********************************************************************************************
同学好!我们是5132单片机设计,定制单片机设计,实物和说明书均可定制,欢迎大家咨询。VX:lwfw123456789
其他项目演示视频和说明请大家移步哔哩哔哩、CSDN和公众号等。
淘宝:5132单片机设计
哔哩哔哩:5132单片机设计
CSDN:    5132单片机设计
公众号:  5132单片机设计
抖音  :  5132单片机设计
小红书:  5132单片机设计
咸鱼:    5132单片机设计
************************************************************************************************/
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "usart3.h"
#include "gizwits_product.h"
#include "Key.h"
#include "Buzzer.h"
#include "OLED.h"
#include "AD.h"
#include "MyRTC.h"
#include "Serial2.h"
#include "dht11.h"
#include "PM25.h"extern uint32_t bufe[10];                     //存储传感器采集的数据
uint16_t AD0, AD1,AD2, AD4, AD5, AD6;             //存储5路ADC值
uint32_t GuangYu = 70;                  //光照强度阈值上限
uint32_t TempYu = 35;
uint32_t HumiYu = 70;
uint32_t YanYu = 80;
uint32_t COYu = 80;
uint32_t PM25Yu = 300;
uint32_t KONGYu = 80;u8 temp, humi;                                //存放温湿度
u8 state, state2 = 2, state2_1, state3;       //按键状态标志
u8 t = 0;                                     //传感器读取时间间隔
uint8_t KeyNum;                               //存储按键值
u8 Flag_dakai = 0;                            //窗户状态标志
u16 ii = 0;                                   //步进电机循环
extern u8 flag;                               //远程控制标志
u8 flag2 = 0, flag1, flag3;uint16_t RTC_Time[] = {0, 0, 0};
uint16_t RTC_Time1[] = {7, 0, 0};    //定时时间---开
uint16_t RTC_Time2[] = {19, 0, 0};   //定时时间---关u8 T_state, T_state1, qingping = 1, state_dingshi_yu_guan, state_dingshi_yu_kai, state_dingshi_yu_switch, state3_1;void TimeSet(void);
void TimeRead(void);
void ChuangGanXinXi(void);
void Yu_Set(void);
void KongZhi(void);
void YuZhiSet(void);void MY_Gizwits_Init(void)              //机智云初始化函数
{TIM3_Int_Init(9, 7199); //1MS系统定时usart3_init(9600);//WIFI初始化memset((uint8_t *)&currentDataPoint, 0, sizeof(dataPoint_t)); //设备状态结构体初始化gizwitsInit();//环形缓冲区初始化gizwitsSetMode(2);   //设置模式userInit();
}//void shoudong()
//{
//    TimeRead();
//    if (KeyNum == 2)        //按键PB0控制窗户开关
//    {
//        delay_ms(20);
//        if (KeyNum == 2)
//        {
//            state2++;
//            if (state2 > 1)
//            {
//                state2 = 0;
//            }
//        }
//    }
//    if (state2 == 0)
//    {
//        if (Flag_dakai == 0)
//        {//        }//    }
//    if (state2 == 1)
//    {
//        if (Flag_dakai == 1)
//        {//        }
//    }
//}
//void zhidong()
//{
//    TimeRead();
//    if (KeyNum == 5)                          //自动模式下PB0按键控制阈值切换
//    {
//        flag1 = 0;
//        flag3 = 0;
//        delay_ms(20);
//        if (KeyNum == 5)
//        {
//            state2_1++;
//            if (state2_1 > 1)
//            {
//                state2_1 = 0;
//            }
//        }
//    }
//    if (state2_1 == 1)
//    {
//        flag2 = 1; //传感器阈值
//        if (KeyNum == 2)                          //自动模式下PB0按键控制阈值切换
//        {
//            delay_ms(20);
//            if (KeyNum == 2)
//            {
//                state3++;
//                if (state3 > 8)
//                {
//                    state3 = 0;
//                }
//            }
//        }
//        if (state3 == 1)
//        {
//            if (KeyNum == 3)GuangYu_Shang++;
//            if (KeyNum == 4)GuangYu_Shang--;
//        }
//        if (state3 == 0)
//        {
//            if (KeyNum == 3)GuangYu_Xia++;
//            if (KeyNum == 4)GuangYu_Xia--;
//        }
//        if (state3 == 6)
//        {
//            if (KeyNum == 3)YanYu++;
//            if (KeyNum == 4)YanYu--;
//        }
//        if (state3 == 7)
//        {
//            if (KeyNum == 3)COYu++;
//            if (KeyNum == 4)COYu--;
//        }
//        if (state3 == 3)
//        {
//            if (KeyNum == 3)TempYu_Shang++;
//            if (KeyNum == 4)TempYu_Shang--;
//        }
//        if (state3 == 2)
//        {
//            if (KeyNum == 3)TempYu_Xia++;
//            if (KeyNum == 4)TempYu_Xia--;
//        }
//        if (state3 == 5)
//        {
//            if (KeyNum == 3)HumiYu_Shang++;
//            if (KeyNum == 4)HumiYu_Shang--;
//        }
//        if (state3 == 4)
//        {
//            if (KeyNum == 3)HumiYu_Xia++;
//            if (KeyNum == 4)HumiYu_Xia--;
//        }
//    }
//    if (state2_1 == 0)
//    {
//        flag2 = 0;  //传感器信息
//        /*********室内烟雾和CO量超过各自阈值,蜂鸣器报警***********/
//        if ((bufe[1] > YanYu) || (bufe[2] > COYu))
//        {
//            Buzzer_ON();
//        }
//        else
//        {
//            Buzzer_OFF();
//        }
//    }
//}int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600);       //串口初始化为9600delay_init();      //延时函数初始化LED_Init();            //初始化与LED连接的硬件接口DHT11_Init();Buzzer_Init();             //下面为外设初始化OLED_Init();Key_Init();PM25_Init();       //里面包含了AD_Init();MyRTC_Init();MY_Gizwits_Init();   //机智云初始化while (1){userHandle();    //数据上传gizwitsHandle((dataPoint_t *)&currentDataPoint);   //后台处理,必须放在while里DHT11_Read_Data(&temp, &humi);  //读取温湿度并显示在OLED上bufe[0] = temp;bufe[1] = humi;if (t % 10 == 0){AD0 = AD_GetValue(ADC_Channel_0);    //光照传感器 if (AD0 > 4000)AD0 = 4000;bufe[2] = (u8)(100 - (AD0 / 40));AD1 = AD_GetValue(ADC_Channel_1);    //烟雾传感器if (AD1 > 4000)AD1 = 4000;bufe[3] = (u8)(80 - (AD1 / 40));AD2 = AD_GetValue(ADC_Channel_2);    //CO传感器if (AD2 > 4000)AD2 = 4000;bufe[4] = (u8)(80 - (AD2 / 40));AD4 = AD_GetValue(ADC_Channel_4);    //空气质量传感器if (AD4 > 4000)AD4 = 4000;bufe[5] = (u8)(80 - (AD4 / 40));bufe[6] = Get_PM25_Average_Data();}t++;KongZhi();KeyNum = Key_GetNum();if (KeyNum == 1){qingping = 0;state2 = 2,delay_ms(20);if (KeyNum == 1){state++;if (state > 2){state = 0;}}}if (state == 1)   {if (qingping == 0){OLED_Clear();qingping = 1;}							ChuangGanXinXi();}if (state == 2)    {if (qingping == 0){OLED_Clear();qingping = 1;}	Yu_Set();}if (state == 0)    {if (qingping == 0){OLED_Clear();qingping = 1;}	TimeRead();OLED_ShowChinese(2, 3, 49);OLED_ShowChinese(2, 4, 50);OLED_ShowChinese(2, 5, 72);OLED_ShowChinese(2, 6, 73);OLED_ShowChinese(3, 2, 74);OLED_ShowChinese(3, 3, 75);OLED_ShowChinese(3, 4, 76);OLED_ShowChinese(3, 5, 77);						OLED_ShowChinese(3, 6, 78);OLED_ShowChinese(3, 7, 79);										if (flag == 0) {Buzzer_OFF();LED_OFF();}if (flag == 1) {Buzzer_Turn();LED_Turn();}}}
}void TimeSet()           //设置时间
{if (KeyNum == 2)    //PB10{delay_ms(20);if (KeyNum == 2){T_state++;if (T_state > 2){T_state = 0;}}}if (T_state == 0)    //时间显示模式{MyRTC_ReadTime();OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    //时OLED_ShowString(1, 7, ":");OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    //分OLED_ShowString(1, 10, ":");OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   //秒RTC_Time[0] = MyRTC_Time[3];RTC_Time[1] = MyRTC_Time[4];RTC_Time[2] = MyRTC_Time[5];}if (T_state == 1)    //修改时间{if (KeyNum == 5){delay_ms(20);if (KeyNum == 5){T_state1++;if (T_state1 > 2){T_state1 = 0;}}}if (T_state1 == 0)  //修改时{if (KeyNum == 4)RTC_Time[0]++;if (KeyNum == 3)RTC_Time[0]--;if (RTC_Time[0] > 23 & RTC_Time[0] < 100)RTC_Time[0] = 0;if (RTC_Time[0] > 100)RTC_Time[0] = 23;OLED_ShowNum(1, 5, RTC_Time[0], 2);  //时}if (T_state1 == 1)  //修改分{if (KeyNum == 4)RTC_Time[1]++;if (KeyNum == 3)RTC_Time[1]--;if (RTC_Time[1] > 59 & RTC_Time[1] < 100)RTC_Time[1] = 0;if (RTC_Time[1] > 100)RTC_Time[1] = 59;OLED_ShowNum(1, 8, RTC_Time[1], 2);  //时}if (T_state1 == 2)  //修改秒{if (KeyNum == 4)RTC_Time[2]++;if (KeyNum == 3)RTC_Time[2]--;if (RTC_Time[2] > 59)RTC_Time[2] = 0;if (RTC_Time[2] > 59 & RTC_Time[2] < 100)RTC_Time[2] = 0;if (RTC_Time[2] > 100)RTC_Time[2] = 59;OLED_ShowNum(1, 11, RTC_Time[2], 2);  //时}}if (T_state == 2){MyRTC_Time[3] = RTC_Time[0];MyRTC_Time[4] = RTC_Time[1];MyRTC_Time[5] = RTC_Time[2];MyRTC_SetTime();T_state = 0;}
}void TimeRead()
{MyRTC_ReadTime();OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    //时OLED_ShowString(1, 7, ":");OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    //分OLED_ShowString(1, 10, ":");OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   //秒
}void ChuangGanXinXi(void)
{OLED_ShowString(1, 1, "PM2.5:");	OLED_ShowNum(1, 7, bufe[6], 4);	OLED_ShowChinese(2, 1, 53);    //光强OLED_ShowChinese(2, 2, 54);OLED_ShowString(2, 5, ":");OLED_ShowNum(2, 6, bufe[2], 2);OLED_ShowString(2, 11, "KQ:");   OLED_ShowNum(2, 14, bufe[5], 2);OLED_ShowChinese(3, 1, 60);     //烟雾OLED_ShowChinese(3, 2, 61);OLED_ShowString(3, 5, ":");OLED_ShowNum(3, 6, bufe[3], 2);OLED_ShowString(3, 11, "CO:");   OLED_ShowNum(3, 14, bufe[4], 2);OLED_ShowChinese(4, 1, 26);    //温湿度OLED_ShowChinese(4, 2, 28);OLED_ShowString(4, 5, ":");OLED_ShowChinese(4, 5, 27);OLED_ShowChinese(4, 6, 28);OLED_ShowString(4, 13, ":");OLED_ShowNum(4, 6, bufe[0], 2);OLED_ShowNum(4, 14, bufe[1], 2);
}void Yu_Set(void)
{OLED_ShowChinese(1, 3, 80);OLED_ShowChinese(1, 4, 81);						OLED_ShowChinese(1, 5, 82);OLED_ShowChinese(1, 6, 83);			OLED_ShowString(2, 1, "G:");OLED_ShowNum(2, 3, GuangYu, 2);OLED_ShowString(2, 7, "K :");OLED_ShowNum(2, 10, KONGYu, 2);OLED_ShowString(2, 13, "W:");OLED_ShowNum(2, 15, TempYu, 2);OLED_ShowString(3, 1, "Y:");OLED_ShowNum(3, 3, YanYu, 2);OLED_ShowString(3, 7, "CO:");OLED_ShowNum(3, 10, COYu, 2);OLED_ShowString(3, 13, "S:");OLED_ShowNum(3, 15, HumiYu, 2);OLED_ShowString(4, 1, "PM2.5:");OLED_ShowNum(4, 7, PM25Yu, 4);
}void KongZhi(void)
{if((bufe[0]>TempYu)||(bufe[1]>HumiYu)||(bufe[2]>GuangYu)||(bufe[3]>YanYu)||(bufe[4]>COYu)||(bufe[5]>KONGYu)||(bufe[6]>PM25Yu)){LED_Turn();Buzzer_Turn();}else{LED_OFF();Buzzer_OFF();}	YuZhiSet();			
}void YuZhiSet()
{if (KeyNum == 2)                          //自动模式下PB0按键控制阈值切换{delay_ms(20);if (KeyNum == 2){state3++;if (state3 > 6){state3 = 0;}}}if (state3 == 0){if (KeyNum == 3)GuangYu++;if (KeyNum == 4)GuangYu--;}if (state3 == 1){if (KeyNum == 3)KONGYu++;if (KeyNum == 4)KONGYu--;}if (state3 == 2){if (KeyNum == 3)TempYu++;if (KeyNum == 4)TempYu--;}if (state3 == 3){if (KeyNum == 3)YanYu++;if (KeyNum == 4)YanYu--;}if (state3 == 4){if (KeyNum == 3)COYu++;if (KeyNum == 4)COYu--;}if (state3 == 5){if (KeyNum == 3)HumiYu++;if (KeyNum == 4)HumiYu--;}if (state3 == 6){if (KeyNum == 3)PM25Yu+=10;if (KeyNum == 4)PM25Yu-=10;}}

7、总结

本文介绍了一个基于STM32F103C8T6的环境监测系统设计。系统通过多种传感器(温湿度、PM2.5、烟雾、一氧化碳等)实时采集环境数据,并通过OLED显示屏本地显示或通过ESP8266 WiFi模块上传至机智云平台实现远程监控。系统支持手动和自动两种控制模式,当检测值超过预设阈值时会触发声光报警。硬件包括STM32主控、传感器模块、显示模块和通信模块等,软件采用模块化设计,包含数据采集、处理、显示和通信等功能。该系统实现了环境参数的全面监测和智能报警,具有实用性和可扩展性。

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

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

相关文章

不同系统记录项目进度不一致,如何统一口径

不同系统记录项目进度不一致&#xff0c;会造成项目管理混乱、信息混淆和决策失误。统一口径的方法包括&#xff1a;采用统一的项目管理平台、明确数据记录与更新规范、建立进度数据对接与整合机制。特别是采用统一的项目管理平台&#xff0c;通过统一的信息输入与输出渠道&…

玩转Docker | 使用Docker部署Drawnix在线白板工具

玩转Docker | 使用Docker部署Drawnix在线白板工具 前言一、Drawnix介绍Drawnix简介Drawnix主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Drawnix服务下载Drawnix镜像编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Drawnix服务访…

Linux操作系统从入门到实战(九)Linux开发工具(中)自动化构建-make/Makefile知识讲解

Linux操作系统从入门到实战&#xff08;九&#xff09;Linux开发工具&#xff08;中&#xff09;自动化构建-make/Makefile前言一、 make/Makefile是什么&#xff1f;1. 我们先想个问题&#xff1a;手动编译代码有多麻烦&#xff1f;2. 为了解决麻烦&#xff0c;才有了自动化工…

开源b2b2c商城源码 支持多端适用 含完整代码包和图文搭建教程

在电商行业蓬勃发展的当下&#xff0c;b2b2c商城系统成为众多企业拓展业务版图的有力工具。这种支持自营与商家入驻并存的系统&#xff0c;含丰富平台商品种类&#xff0c;能通过多元化运营提升平台竞争力。本文分享一个开源b2b2c商城源码的相关知识&#xff0c;并详细介绍其搭…

Vue3入门-指令补充

&#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;vscode\node.js &#x1f680;所属专栏&#xff1a;Vue3 文章目录1. 指令修饰符1.1 按键修饰符1.2 事件修饰符1.3 v-model修饰符2. v-model用在其他表单元素上3. 样式绑定3.1 操作class4. 操作style5.…

UDP类型套接字

理解UDP协议&#xff1a;互联网世界的"明信片"通信 UDP是什么&#xff1f;为什么需要它&#xff1f; 想象一下&#xff0c;你正在给朋友寄送两种不同的东西&#xff1a;一份重要的合同文件和一叠度假时的风景明信片。对于合同文件&#xff0c;你会选择挂号信&#xf…

redis快速入门教程

更新中基本概念安装centOS安装redis&#xff1a;yum install redis -y启动&#xff1a;systemctl start redis设置开机启动&#xff1a;systemctl enable redis检查运行状态&#xff1a;systemctl status redis远程访问编辑配置文件 vi /etc/redis.conf在其中修改为bind 0.0.0.…

UDP和TCP的主要区别是什么

UDP&#xff08;用户数据报协议&#xff09;和 TCP&#xff08;传输控制协议&#xff09;是互联网传输层的两大核心协议&#xff0c;主要区别体现在​​连接方式、可靠性、传输效率、头部开销​​及​​适用场景​​上。以下是具体对比&#xff1a;​​一、核心区别对比表​​​…

ASP .NET Core 8结合JWT轻松实现身份验证和授权

身份验证和授权是每一个后端服务必不可少的&#xff0c;可以实现对非法请求进行拦截&#xff0c;能够有效保护数据的安全性。 JSON Web Token&#xff08;JWT&#xff09;是一项开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方法&#xff…

5G时代的智慧灯杆:塔能“一杆多用”方案如何激活城市新基建?

在《5G应用“扬帆”行动计划》持续推进的进程之中&#xff0c;智慧杆已然成为了5G基站部署环节极为重要的载体&#xff0c;并且被明确地归入到新型基础设施建设的重点范畴之内。相关政策提出&#xff0c;要在2025年达成重点区域5G网络全面且深度覆盖的目标&#xff0c;与此同时…

护照阅读器:国外证件识别的 OCR “解码师”

国外证件版式多样、语种繁杂&#xff0c;人工识别不仅耗时&#xff0c;还易因翻译误差、格式不熟悉导致信息错漏。尤其在跨境业务场景中&#xff0c;传统识别方式严重影响效率与准确性。护照阅读器搭载的 OCR 技术成为破局关键。它能精准提取国外护照、驾照等证件上的多语种文字…

Linux部署Python服务

1、创建项目目录与虚拟环境#确保安装 Python 和 python3-venv 工具 sudo apt update sudo apt install python3 python3-pip python3-venvmkdir myproject cd myproject python3 -m venv venv # 创建虚拟环境#Linux source venv/bin/activate # 激活虚拟环境#Windowds venv\S…

【Python办公】使用Python和Tkinter构建Excel数据导入MySQL工具(GUI版)

目录 专栏导读前言项目概述技术栈环境准备核心代码实现1. 导入必要的库2. 主应用类设计3. 用户界面设计数据库配置区域数据库选择区域4. 数据库连接功能测试连接获取数据库列表5. 数据导入功能关键技术点解析1. SQLAlchemy 2.x 兼容性2. MySQL 8.0 认证问题3. 避免启动时连接错…

华为OD机试_2025 B卷_猜数字(Python,100分)(附详细解题思路)

题目描述 一个人设定一组四码的数字作为谜底&#xff0c;另一方猜。 每猜一个数&#xff0c;出数者就要根据这个数字给出提示&#xff0c;提示以XAYB形式呈现&#xff0c;直到猜中位置。 其中X表示位置正确的数的个数&#xff08;数字正确且位置正确&#xff09;&#xff0c;而…

【网络安全】理解安全事件的“三分法”流程:应对警报的第一道防线

1. 简介 在网络安全领域&#xff0c;每天都会产生大量安全警报。作为一名安全分析师&#xff0c;识别、评估并优先处理这些警报的能力至关重要。三分法&#xff08;Triage&#xff09; 是确保安全团队高效响应安全事件的核心流程&#xff0c;它能够帮助我们合理分配资源、集中精…

AI大模型计数能力的深度剖析:从理论缺陷到技术改进

AI大模型计数能力的深度剖析&#xff1a;从理论缺陷到技术改进 AI大模型在计数任务上表现出明显的局限性&#xff0c;这不仅反映了模型架构的核心缺陷&#xff0c;也揭示了当前深度学习技术在处理结构化信息时的本质挑战。通过对文本计数、图像计数以及相关技术改进方向的全面分…

[C语言初阶]结构体初阶

目录一、结构体的声明二、结构体的定义和初始化三、结构体成员访问四、结构体传参五、函数调用的参数压栈&#xff08;了解&#xff09;在C语言中&#xff0c;我们知道数组是一组相同类型元素的集合&#xff0c;而结构体则更为灵活&#xff0c;它允许我们将不同类型的数据组合在…

LVS(Linux Virtual Server)集群技术详解

一.集群和分布式: 集群&#xff1a;同一个业务系统&#xff0c;部署在多台服务器上&#xff0c;集群中&#xff0c;每一台服务器实现的功能没有差别&#xff0c;数据和代码都是一样的 分布式&#xff1a;一个业务被拆成多个子业务&#xff0c;或者本身就是不同的业务&#…

leetcode_27 移除元素

1. 题意 给定一个数组&#xff0c;把不等于val的元素全部移动到数组的前面来。 不需要考虑值为val里的元素。 2. 题解 2.1 同向双指针 我们利用双指针&#xff0c;慢指针指向下一个插入的位置。而快指针不断向前找到首个不为val的值&#xff0c;找到后将快指针位置值赋给慢…

Linux-Ubuntu下的git安装与配置

一、安装git1.打开终端&#xff0c;运行以下命令&#xff08;需要联网&#xff09;sudo apt-get update sudo apt-get install git2.验证安装安装完成之后&#xff0c;通过运行以下命令验证git是否已经正确安装&#xff1a;git --version二、配置git2.1.配置用户名及邮箱地址在…