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

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器

(仿真+程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.使用HC-SR04测量液位,LCD1602显示;

2.当水位高于设定上限的时候,对应声光报警报警,继电器控制水泵停止加水;

3.当水位低于设定上限的时候,对应声光报警报警,继电器控制水泵开始加水;

4.按键可以设置液位上下限;

​演示视频:

基于51单片机的超声波液位测量与控制系统 

程序

/***************************************************************
基于51单片机的超声波水位监测报警系统
具体水泵控制和排水控制
***微信公众号:木子单片机****
***************************************************************/
#include <reg52.h>
#include <intrins.h>		// 包含循环移位:_cror_
#include "main.h"     
//----------------------------------------------------------------------uchar code TabNumASCII[10] =    {'0','1','2','3','4','5','6','7','8','9'};bool	g_flag = isNo;		//用于标记超时(65.536ms) 	  
bool	g_flag05s = isNo;	//用于标记0.52秒  
uchar 	ucCount = 0;			//用于计数0.52秒     uint	uiH = 80;			//设定的最高报警水位 H
uint	uiL = 30;			//设定的最低报警水位 L
uint	uiD = 100; 			//检测探头到水库底部的距离 D bool	g_flagSwitch = isNo;		//控制阀门连续开启间隔延时(保护)标志
bool	g_flagBeepTimer = isNo;	//定时提醒标志//-----------------------------------------------------------------------
// 延时10us
void delay10us(void)		//@12MHz
{unsigned char i;_nop_();i = 2;while (--i);
}// 延时100us
void delay100us(void)		//@12MHz
{uchar i;_nop_();i = 47;while (--i);
}// 延时125us
void delay125us(void)		//@12MHz
{unsigned char i;i = 60;while (--i);
}// 延时5ms
void delay5ms(void)		//@12.000MHz
{unsigned char i, j;i = 10;j = 183;do{while (--j);} while (--i);
}// 延时500ms
void delay500ms(void)		//@12MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}//-----------------------------------------------------------------------
//初始化IO端口			
void initIO(void)					
{P0 = 0xff;P1 = 0xff;P2 = 0xff;P3 = 0xff;
}// 初始化定时器0,定时器时钟12T模式 模式1,16位 @12.000MHz
void initTimer0(void)		
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0;				//定时器初值清零TH0 = 0;				//定时器初值清零//TR0 = 1;   			//开定时器0ET0 = 1;  			//开定时器0中断EA = 1;     			//开总中断    	}// 初始化定时器1,定时器时钟12T模式 模式1,16位 @12.000MHz
void initTimer1(void)		//50毫秒@12.000MHz
{	TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x10;		//设置定时器模式TL1 = 0xB0;		//设置定时初值TH1 = 0x3C;		//设置定时初值	TR1 = 1;		//定时器1开始计时ET1 = 1;  	//开定时器0中断
}//-----------------------------------------------------------------------
//定时器0中断
void zd0(void) interrupt 1 		 
{g_flag = isYes;							//中断溢出标志,g_flag = isYes超过测距范围if(++ucCount >= 8){ucCount = 0;g_flag05s = isYes;					//g_flag05s = isYes定时0.52秒到,用于测量周期延时}TL0 = 0;		//设置定时初值TH0 = 0;		//设置定时初值}//定时器1中断 定时50ms
void tm1_isr() interrupt 3 using 1
{static uchar count = DATA_switchTime;	//50ms的200倍 = 10Sstatic uchar uiCount = 1200;				//			= 1分钟		static uint uiCount_BeepTimer = DATA_BeepTimer;TL1 = 0xB0;		//设置定时初值TH1 = 0x3C;		//设置定时初值if (g_flagSwitch == isNo){if (count-- == 0)               //50ms * 200 -> 10s{count = DATA_switchTime;g_flagSwitch = isYes;// TR1 = 0;}}	if(g_flagBeepTimer == isNo){if (uiCount-- == 0)               //= 1分钟{uiCount = 1200;if(uiCount_BeepTimer-- == 0){uiCount_BeepTimer = DATA_BeepTimer; g_flagBeepTimer = isYes;// TR1 = 0;}			}}
}//-----------------------------------------------//外部中断1
void exint1() interrupt 2 
{EX1 = 0; 			//关闭当前中断TR0 = 0;   			//关闭时器0}
//-----------------------------------------------------------------------//读LCD忙状态并等待忙状态结束
void LCD_waitNotBusy(void)
{IO_LCD_Data = 0xFF; io_LCD_RS = 0;io_LCD_RW = 1;io_LCD_E = 0;_nop_();_nop_();io_LCD_E = 1;while(IO_LCD_Data & 0x80); //检测如果是忙信号,一直等到不忙
}//给LCD写指令
void LCDWriteCommand(uchar command,bool ifReadBusy) //ifReadBusy = 1 时先进行忙检测
{if (ifReadBusy == isReadBusy) LCD_waitNotBusy(); //根据需要检测忙IO_LCD_Data = command;io_LCD_RS = 0;io_LCD_RW = 0;	io_LCD_E = 0;_nop_();_nop_();io_LCD_E = 1;	
}//给LCD写数据
void LCDWriteData(uchar dat) 
{LCD_waitNotBusy(); //等到不忙IO_LCD_Data = dat;io_LCD_RS = 1;io_LCD_RW = 0;io_LCD_E = 0; _nop_();_nop_();io_LCD_E = 1;
}// 初始化LCD1602液晶显示屏
void initLCD1602(void) 
{uchar	i;	IO_LCD_Data = 0;								// 数据端口清零for(i = 0; i < 3; i++)						// 设置三次显示模式{LCDWriteCommand(0x38,isNotReadBusy);	// 不检测忙信号delay5ms();}LCDWriteCommand(0x38,isReadBusy); // 设置显示模式,检测忙信号LCDWriteCommand(0x08,isReadBusy); // 关闭显示LCDWriteCommand(0x01,isReadBusy); // 显示清屏LCDWriteCommand(0x06,isReadBusy); // 显示光标移动设置LCDWriteCommand(0x0F,isReadBusy); // 显示开及光标设置
}//按指定位置显示一个字符
void putOneCharToLCD1602(uchar line, uchar position, uchar ucData)
{line &= DATA_LineMax;position &= DATA_PositionMax;if (line == DATA_LineTow) position |= 0x40; 			//当要显示第二行时地址码+0x40;position |= 0x80; 									//设置两行显示格式 D7 = 1;LCDWriteCommand(position, isReadBusy); 			//发送命令 设置字符地址LCDWriteData(ucData); 							 	//写入字符的数据	
}//按指定位置显示一串字符
void putLineCharsToLCD1602(uchar line, uchar position, uchar count, uchar code *ucData)
{uchar i;for(i = 0; i < count; i++)							//连续显示单个字符{putOneCharToLCD1602(line, position + i, ucData[i]);	}
}//按指定位置连续显示三个字符(三位数字)
void	putThreeCharToLCD1602(uchar line, uchar position, uint uiNumber)
{uiNumber %= 1000;putOneCharToLCD1602(line, position, TabNumASCII[uiNumber / 100]);putOneCharToLCD1602(line, ++position, TabNumASCII[uiNumber % 100 / 10]);putOneCharToLCD1602(line, ++position, TabNumASCII[uiNumber % 100 % 10]);	}// 按键检测子程序,有键按下返回键端口数据,无键返回0
uchar GetKey(void)
{	uchar KeyTemp = (IO_KEY | DATA_KEY_ORL);		//获取按键端口数据	if( KeyTemp != DATA_KEY_Null )				// 如果不为空{uchar CountTemp = 0;do{delay125us();if(KeyTemp != (IO_KEY | DATA_KEY_ORL)) return 0;	//在延时期间检测键,如果不稳定保持则退出	} while(++CountTemp > Data_Key20msCountMax); 				// 延时20ms去抖动 while((IO_KEY | DATA_KEY_ORL) != DATA_KEY_Null); 	//等键释放		return KeyTemp;	// 有键按下返回键端口数据}return 0;	// 无有效键返回0
}//加一
uchar  INC_Number(uchar Number, uchar Min, uchar Max)
{if(Number >= Max) return Min; else return (++ Number);}//减一
uchar  DEC_Number(uchar Number, uchar Min, uchar Max)
{if(Number <= Min) return Max; else return (-- Number);}// 检测到有按键后 这里执行按键任务			
void execute_key_task(uchar ucKeyValue)	
{uchar state = 0;						//定义调整数据的状态变量uchar keyValue = 0;					//定义键值的临时变量if(ucKeyValue != DATA_KEY_Set) return;	//不是设置键退出//是设置键继续-----------------------------------------------------putLineCharsToLCD1602(lineTow, 8, 8, "C:000cm ");	//清零显示当前距离CURRENT		putThreeCharToLCD1602(lineOne, 8 + 2, uiD);		//光标调整到调整总距离(检测探头到水库底部的距离“D:000cm”)	while(1){keyValue = GetKey();	if(keyValue == 0) continue;switch(keyValue){case DATA_KEY_Set:{// 如果按的是设置键,顺序设置总距离D——高水位H——低水位L——退出switch(state){case 0:			// 如果是设置总距离状态,改变为设置高水位状态,并显示高水位,实现移动光标到高水位后面{state = 1;						putThreeCharToLCD1602(lineOne, 0 + 2, uiH);						}break;case 1:{uchar tempMax = uiD - DATA_uiD_Min;if(tempMax < 2 + 2) tempMax = 2 + 2;											if(uiH > tempMax) {uiH = tempMax;putThreeCharToLCD1602(lineOne, 0 + 2, uiH);}else if(uiH < 2 + 2){uiH = 2 + 2;	putThreeCharToLCD1602(lineOne, 0 + 2, uiH);}							state = 2;putThreeCharToLCD1602(lineTow, 0 + 2, uiL);}break;case 2:{if(uiL > uiH - 2) {uiL = uiH - 2;putThreeCharToLCD1602(lineTow, 0 + 2, uiL);}return;	}break;}}break;// 如果按的是增加键,改变相应数据并显示case DATA_KEY_INC:{switch(state){case 0:{uiD = INC_Number(uiD, DATA_uiD_Min, DATA_uiD_Max);putThreeCharToLCD1602(lineOne, 8 + 2, uiD);							}break;case 1:{uchar tempMax = uiD - DATA_uiD_Min;if(tempMax < 2 + 2) tempMax = 2 + 2;uiH = INC_Number(uiH, 2, tempMax);						putThreeCharToLCD1602(lineOne, 0 + 2, uiH);	}break;case 2:{uiL = INC_Number(uiL, 0, uiH - 2);	putThreeCharToLCD1602(lineTow, 0 + 2, uiL);	}break;}}break;// 如果按的是减少键,改变相应数据并显示case DATA_KEY_DEC:{switch(state){case 0:{uiD = DEC_Number(uiD, DATA_uiD_Min, DATA_uiD_Max);					putThreeCharToLCD1602(lineOne, 8 + 2, uiD);}break;case 1:{uchar tempMax = uiD - DATA_uiD_Min;if(tempMax < 2 + 2) tempMax = 2 + 2;uiH = DEC_Number(uiH, 2, tempMax);						putThreeCharToLCD1602(lineOne, 0 + 2, uiH);	}break;case 2:{uiL = DEC_Number(uiL, 0, uiH - 2);	putThreeCharToLCD1602(lineTow, 0 + 2, uiL);	}break;}}break;}}}// 蜂鸣器	
void	buzzerCall(void)
{uchar	i;for(i = 0; i < 90; i++){io_Buzzer = 0;delay100us();io_Buzzer = 1;delay100us();delay100us();		}delay100us();	delay100us();	
}//计算水位
bool CalculatedWaterLevel(void)
{uchar 	i = 8 + 2;					//当前水位的数字在LCD屏显示的起点位置uint  	uiTime;						//声波传播时间ulong 	ulDis;						//实时测量到距离	uiTime = TH0 << 8 | TL0;	ulDis = (uiTime * 3.40) / 200;     	//计算当前测量的距离,单位cmTH0 = 0;TL0 = 0;	if((ulDis > uiD) || (g_flag == isYes )) 	// ulDis > uiD 超出测量范围;g_flag == isYes超时;{	 g_flag = isNo;		TR0 = 0;putLineCharsToLCD1602(lineTow, i, 3, "Err");	// 显示Err 		//阀门动作:		// if(g_flagSwitch == isYes)// {		// io_Control_Inlet = isio_Control_Inlet_OFF;		// io_Control_Outlet = isio_Control_Outlet_ON;// g_flagSwitch = isNo;// }		//指示灯:ioLed_Red = ! ioLed_Red;							// 三个灯同时快速闪亮ioLed_Green = ! ioLed_Green;ioLed_Yellow = ! ioLed_Yellow;// 蜂鸣器叫:	if(buzzerCallFlag == isCall){buzzerCall();					// 蜂鸣器叫	}return isNo;									// 返回错误信息}else{ulDis = uiD - ulDis;					// 当前水位C = 总距离 - 当前检测到的距离if(ulDis > uiH)						// 如果水位超高{//阀门动作:io_Control_Inlet = isio_Control_Inlet_OFF;io_Control_Outlet = isio_Control_Outlet_ON;	g_flagSwitch = isNo;//指示灯:ioLed_Red = ! ioLed_Red;			// 红灯闪ioLed_Green = isLedOFF;		ioLed_Yellow = isLedOFF;				// 蜂鸣器叫:if(ulDis - uiH > (uiD - uiH) / DATA_alarmCoefficient) //当“当前水位”超出最高水位“ ((“总高度减高水位)除以2的值”)时报警{buzzerCall();					// 蜂鸣器叫}}else if(ulDis < uiL)					// 如果水位超低{//阀门动作:	if(g_flagSwitch == isYes){		io_Control_Outlet = isio_Control_Outlet_OFF;	io_Control_Inlet = isio_Control_Inlet_ON;	g_flagSwitch = isNo;}	//指示灯:ioLed_Red = isLedOFF;ioLed_Green = isLedOFF;ioLed_Yellow = ! ioLed_Yellow;	//黄灯闪// 蜂鸣器叫:						if( uiL - ulDis > uiL / DATA_alarmCoefficient)//uiL / 2 当“当前水位”低于“低水位” “低水位除以2的值”时报警{buzzerCall();					// 蜂鸣器叫}
****/*完整资料
***//***微信公众号:木子单片机****			}else								// 水位在正常范围 {	ioLed_Red = isLedOFF;ioLed_Green = ! ioLed_Green;ioLed_Yellow = isLedOFF;	}putThreeCharToLCD1602(lineTow, i, ulDis);return isYes;	}return isYes;
}

硬件设计

使用元器件:

单片机:STC89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

9*15万用板;超声波模块;

40脚IC座;4脚排针;

杜邦线;继电器;

LCD1602液晶;103电位器;

USB电源线(电池盒);

16脚IC座;16脚排针;

蜂鸣器;8550三极管;

1k电阻;10k电阻;

10uf电容;30pf电容;

12M晶振;3mmLED;

轻触按键;自锁开关;

DC电源插口;

直流水泵;

导线:若干;

添加图片注释,不超过 140 字(可选)

结构框图:

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus8.9版本设计,仿真和实物有些差异,有对应的仿真程序!具体如图!

添加图片注释,不超过 140 字(可选)

02原理图

本系统原理图采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

03程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

04设计报告

一万一千字设计报告,仅供参考,具体如下!

添加图片注释,不超过 140 字(可选)

05设计资料

        资料获取请看前面演示视频,全部资料包括仿真源文件 、AD原理图、程序(含注释)、PCB、任务书、设计报告、结构框图、实物图、元件清单、讲解视频等。具体内容如下,全网最全! !

操作演示请观看前面演示视频!

点赞分享一起学习成长。

相关文章:

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.使用HC-SR04测量液位&#xff0c;LCD1602显示&#xff1b; 2.当水位高于设定上限的时候&#xff0c;对应声光报警报警&…...

抓包工具Wireshark的应用解析

一、Wireshark简介 Wireshark&#xff08;前身为Ethereal&#xff09;是一款开源、跨平台的网络协议分析工具&#xff0c;自1998年诞生以来&#xff0c;已成为网络工程师、安全专家及开发者的核心工具之一。它通过网卡的混杂模式&#xff08;Promiscuous Mode&#xff09;捕获…...

在 Java 项目中搭建和部署 Docker 的详细流程

引言 在现代软件开发中&#xff0c;Docker 已成为一种流行的工具&#xff0c;用于简化应用的部署和运行环境的一致性。本文将详细介绍如何在 Java 项目中搭建和部署 Docker&#xff0c;包括配置文件、代码示例以及流程图。 一、整体工作流程 以下是整个流程的概览&#xff1a…...

15.ArkUI Checkbox的介绍和使用

以下是 ArkUI Checkbox 组件的详细介绍和使用指南&#xff1a; 一、Checkbox 基础介绍 功能特性&#xff1a; 提供二态选择&#xff08;选中/未选中&#xff09;支持自定义样式和标签布局支持与数据状态绑定提供状态变化事件回调 适用场景&#xff1a; 表单中的多选操作设置…...

WebUI可视化:第5章:WebUI高级功能开发

学习目标 ✅ 掌握复杂交互逻辑的实现 ✅ 学会自定义界面样式与布局 ✅ 实现安全高效的文件处理 ✅ 优化性能与用户体验 5.1 自定义样式开发 5.1.1 修改主题颜色(以Streamlit为例) 在应用入口处添加全局样式: python import streamlit as st # 自定义主题 st.markdown…...

增加首屏图片

增加首屏图片&#xff08;bg.jpg&#xff09; web-mobile类型打包 //index.html脚本 <div id"myDiv_1111"style"background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div> //游戏内脚本…...

联合体和枚举类型

1.联合体类型 1.1:联合体类型变量的创建 与结构体类型一样&#xff0c;联合体类型 (关键字:union) 也是由⼀个或者多个成员变量构成&#xff0c;这些成员变量既可以是不同的类型&#xff0c;也可以是相同的类型。但是编译器只为最⼤的成员变量分配⾜够的内存空间。联合体的特…...

《AI大模型趣味实战》构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现

构建基于Flask和Ollama的AI助手聊天网站&#xff1a;分布式架构与ngrok内网穿透实现 引言 随着AI技术的快速发展&#xff0c;构建自己的AI助手聊天网站变得越来越流行。本研究报告将详细介绍如何通过两台电脑构建一个完整的AI聊天系统&#xff0c;其中一台作为WEB服务器运行F…...

kubernets集群的安装-node节点安装-(简单可用)-超详细

一、kubernetes 1、简介 kubernetes&#xff0c;简称K8s&#xff08;库伯内特&#xff09;&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写 云计算的三种主要服务模式——基础设施即服务&#xff08;IaaS&#xff09;、平台即服务&#xff08;PaaS&#xff0…...

【Linux内核设计与实现】第三章——进程管理04

文章目录 8. exit() 进程退出8.1. exit() 系统调用的定义8.2. do_exit() 函数8.2.0. do_exit() 的参数和返回值8.2.1. 检查和同步线程组退出8.2.2. 清理与调试相关的资源8.2.3. 取消 I/O 和信号处理8.2.4. 检查线程组是否已终止8.2.5. 释放系统资源8.2.6. 释放线程和调度相关资…...

Golang | 迭代器模式

迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种顺序访问聚合对象&#xff08;如列表、树等集合结构&#xff09;中元素的方法&#xff0c;而无需暴露其底层实现细节。通过将遍历逻辑与集合本身解耦&#xff0c;迭代器模式使…...

美颜SDK动态贴纸实战教程:从选型、开发到上线的完整流程

在直播、短视频、社交娱乐全面崛起的当下&#xff0c;美颜SDK早已不再局限于“磨皮瘦脸”&#xff0c;而是逐步迈向更智能、更富互动体验的方向发展。动态贴纸功能&#xff0c;作为提升用户参与感和内容趣味性的关键手段&#xff0c;正在被越来越多的平台采纳并深度定制。本文将…...

ArkTS中的空安全:全面解析与实践

# ArkTS中的空安全&#xff1a;全面解析与实践 在ArkTS编程领域&#xff0c;空安全是一个极为关键的特性&#xff0c;它在很大程度上影响着代码的稳定性和可靠性。今天&#xff0c;我们就深入探究一下ArkTS中的空安全机制&#xff0c;看看它是如何保障我们的代码质量的。 ## A…...

C语言基础语法详解:从入门到掌握

C 基础语法 C 语言是一种通用的编程语言&#xff0c;广泛应用于系统编程、嵌入式开发和高性能计算等领域。 C 语言具有高效、灵活、可移植性强等特点&#xff0c;是许多其他编程语言的基础。 在 C 语言中&#xff0c;令牌&#xff08;Token&#xff09;是程序的基本组成单位…...

如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并

在日常生活中&#xff0c;我们经常需要将多个视频片段合并成一个完整的视频&#xff0c;例如制作旅行记录、剪辑教学视频或拼接短视频素材。简鹿视频格式转换器是一款功能强大的工具&#xff0c;不仅可以进行视频格式转换&#xff0c;还支持视频合并功能。以下是使用简鹿视频格…...

Servlet小结

视频链接&#xff1a;黑马servlet视频全套视频教程&#xff0c;快速入门servlet原理servlet实战 什么是Servlet&#xff1f; 菜鸟教程&#xff1a;Java Servlet servlet&#xff1a; server applet Servlet是一个运行在Web服务器&#xff08;如Tomcat、Jetty&#xff09;或应用…...

C语言面试高频题——define 和typedef 的区别?

1. 基本概念 (1) #define 定义&#xff1a;#define 是预处理指令&#xff0c;用于定义宏。作用&#xff1a;在编译之前进行文本替换。语法&#xff1a;#define 宏名 替换内容示例&#xff1a;#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定义&#xff1a;…...

计算机组成原理:指令系统

计算机组成原理:指令集系统 指令集体系结构(ISA)ISA定义ISA包含的内容举个栗子指令的基本组成(操作码+地址码)指令分类:地址码的个数定长操作码变长操作码变长操作码的原则变长操作码的设计指令寻址寻址方式的目的寻址方式分类有效地址直接在指令中给出有效地址间接给出有效地…...

自动清空 maven 项目临时文件,vue 的 node_modules 文件

echo off setlocal enabledelayedexpansion :: vue 的 node_modules 太大 :: maven 打包后的 target 文件也很大&#xff0c; :: 有些项目日志文件也很大&#xff0c;导致磁盘空间不足了&#xff0c; :: 所以写了个脚本&#xff0c;只要配置一下各项目目录&#xff0c; :: 双击…...

服务网格助力云原生后端系统升级:原理、实践与案例剖析

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:微服务的“通信焦虑”与服务网格的出现 云原生架构的兴起推动了微服务的大规模落地,系统拆分为成百上千个小服务,这些服务之间需要频繁通信。然而,通信带来的问题也开始显现: 如何确保服务间…...

基于DrissionPage的表情包爬虫实现与解析(含源码)

目录 ​编辑 一、环境配置与技术选型 1.1 环境要求 1.2 DrissionPage优势 二、爬虫实现代码 三、代码解析 3.1 类结构设计 3.2 目录创建方法 3.3 图片链接获取 3.4 图片下载方法 四、技术升级对比 4.1 代码复杂度对比 4.2 性能测试数据 五、扩展优化建议 5.1 并…...

Spring Cloud Gateway 如何将请求分发到各个服务

前言 在微服务架构中&#xff0c;API 网关&#xff08;API Gateway&#xff09;扮演着非常重要的角色。它负责接收客户端请求&#xff0c;并根据预定义的规则将请求路由到对应的后端服务。Spring Cloud Gateway 是 Spring 官方推出的一款高性能网关&#xff0c;支持动态路由、…...

【深度强化学习 DRL 快速实践】Value-based 方法总结

强化学习中的 Value-based 方法总结 在强化学习&#xff08;Reinforcement Learning, RL&#xff09;中&#xff0c;Value-based 方法主要是学习一个价值函数&#xff08;Value Function&#xff09;&#xff0c;然后基于价值函数来决策。常见的 Value-based 方法包括&#xf…...

【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析

基于YOLOv5的人脸检测与关键点定位系统深度解析 1. 技术背景与项目意义传统方案的局限性YOLOv5多任务方案的优势 2. 核心算法原理网络架构改进关键点回归分支损失函数设计 3. 实战指南&#xff1a;从环境搭建到模型应用环境配置数据准备数据格式要求数据目录结构 模型训练配置文…...

git版本回退 | 远程仓库的回退 (附实战Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn 本身暂存区有多个文件&#xff0c;但手快了&…...

【KWDB 创作者计划】_深度学习篇---数据获取

文章目录 前言一、公开数据集资源库1. 综合型数据集平台Kaggle Datasets (https://www.kaggle.com/datasets)Google Dataset Search (https://datasetsearch.research.google.com)UCI Machine Learning Repository (https://archive.ics.uci.edu/ml) 2. 计算机视觉专用ImageNet…...

DeepSeek本地部署手册

版本:v1.0 适用对象:零基础开发者 一、部署前准备 1.1 硬件要求 组件最低配置推荐配置说明CPUIntel i5 8代Xeon Gold 6230需支持AVX指令集内存16GB64GB模型越大需求越高GPUNVIDIA GTX 1060 (6GB)RTX 3090 (24GB)需CUDA 11.7+存储50GB可用空间1TB NVMe SSD建议预留2倍模型大小…...

OpenCV中的SIFT特征提取

文章目录 引言一、SIFT算法概述二、OpenCV中的SIFT实现2.1 基本使用2.1.1 导入库2.1.2 图片预处理2.1.3 创建SIFT检测器2.1.4 检测关键点并计算描述符2.1.5 检测关键点并计算描述符并对关键点可视化2.1.6 印关键点和描述符的形状信息 2.2 参数调优 三、SIFT的优缺点分析3.1 优点…...

Kubernetes in action-初相识

初相识Kubernetes 1、构建、运行以及共享镜像1.1 运行镜像1.2 构建镜像1.3 推送镜像 2、Kubernetes初相识2.1 介绍Pod2.2 从构建到运行整体流程2.3 kubectl命令行工具 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 本篇文章大部分是…...

九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物)

九、小白如何用Pygame制作一款跑酷类游戏&#xff08;添加前进小动物作为动态障碍物&#xff09; 文章目录 九、小白如何用Pygame制作一款跑酷类游戏&#xff08;添加前进小动物作为动态障碍物&#xff09;前言一、添加小动物素材1. 在根目录的图片文件夹下新建两个目录分别存放…...

Unity3D IK解算器技术分析

前言 在Unity3D中&#xff0c;逆向运动学&#xff08;IK Solver&#xff09;是实现角色动画自然交互的核心技术之一。以下是Unity中常见的IK解算器及其特点的综合分析&#xff0c;结合了原生功能、第三方插件与开源方案的对比&#xff1a; 对惹&#xff0c;这里有一个游戏开发…...

7.11 Python CLI开发实战:API集成与异步处理核心技术解析

Python CLI开发实战:API集成与异步处理核心技术解析 #mermaid-svg-fXGFud0phX2N2iZj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fXGFud0phX2N2iZj .error-icon{fill:#552222;}#mermaid-svg-fXGFud0phX2N2iZj .…...

百度Create2025 AI开发者大会:模型与应用的未来已来

今日&#xff0c;2025百度AI开发者大会&#xff08;Create2025&#xff09;在武汉体育中心盛大开幕。这场以“模型的世界&#xff0c;应用的天下”为主题的盛会&#xff0c;不仅汇聚了李彦宏、王海峰、沈抖等百度高层及行业领袖&#xff0c;更以多项重磅技术发布、前沿议题探讨…...

Java实现HTML转PDF(deepSeekAi->html->pdf)

Java实现HTML转PDF,主要为了解决将ai返回的html文本数据转为PDF文件方便用户下载查看。 一、deepSeek-AI提问词 基于以上个人数据。总结个人身体信息&#xff0c;分析个人身体指标信息。再按一个月为维度&#xff0c;详细列举一个月内训练计划&#xff0c;维度详细至每周每天…...

区间和数量统计 之 前缀和+哈希表

文章目录 1512.好数对的数目2845.统计趣味子数组的数目1371.每个元音包含偶数次的最长子字符串 区间和的数量统计是一类十分典型的问题&#xff1a;记录左边&#xff0c;枚举右边策略前置题目&#xff1a;统计nums[j]nums[i]的对数进阶版本&#xff1a;统计子数组和%modulo k的…...

【服务器操作指南】从 Hugging Face 上下载文件 | 从某一个网址上下载文件到 Linux 服务器的指定目录

引言 在服务器操作中&#xff0c;下载和管理文件是常见且重要的任务。从 Hugging Face 平台获取模型资源&#xff0c;或从特定网址下载文件至 Linux 服务器并进行解压&#xff0c;都需要明确的操作步骤。本指南旨在为您提供清晰的操作流程&#xff0c;帮助您快速上手相关任务并…...

PyCharm 中 FREECAD 二次开发:从基础建模到深度定制

一、引言 在当今的三维建模与设计领域&#xff0c;FREECAD 以其开源、参数化设计的强大特性&#xff0c;成为众多工程师、设计师和开发者的首选工具。然而&#xff0c;面对日益复杂和多样化的设计需求&#xff0c;仅仅依靠 FREECAD 的原生功能往往难以满足。此时&#xff0c;二…...

C++入侵检测与网络攻防之网络嗅探以及ARP攻击

目录 1.tcpdump基本使用 2.tcpdump条件过滤 3.wireshark介绍 4.wireshark的介绍 5.tcp握手挥手分析 6.telnet服务的介绍和部署 7.复习 8.telnet服务的报文嗅探 9.网络嗅探基础 10.arp协议的解析 11.arp攻击原理以及试验环境 12.arp实验以及防御方式 1.tcpdump基本使…...

Integer[]::new方法引用

Integer[]::new 这种写法是 Java 中方法引用的一种具体应用&#xff0c;它遵循 Java 方法引用的语法规则。 方法引用概述 方法引用是 Java 8 引入的一种简化 Lambda 表达式的语法糖&#xff0c;它允许你通过方法的名称直接引用已有的方法或构造函数。方法引用可以使代码更加简…...

Pycharm(三):梯度下降法

梯度下降算法&#xff08;Gradient Descent Algorithm&#xff09;是深度学习中常用的更新权重的方法&#xff0c;它采用的贪心法的思想&#xff0c;每次都往函数值下降最快的方向去更新&#xff0c;梯度方向是增长最快的方向&#xff0c;负梯度方向是下降最快的方向。 一、梯…...

系统测试的技术要求

文章目录 一、系统测试的概念二、测试对象三、测试目的四、进入条件五、内容要求1、基于需求的考核要求2、基于任务的考核要求 六、测试环境 一、系统测试的概念 系统测试&#xff08;System Testing&#xff09;&#xff0c;主要是对多个软件组成的系统进行的整体测试。系统测…...

​升级Ubuntu 20.04 LTS到22.04 LTS​

按照 Ubuntu发布周期 每2年会发布一个 "长期支持版" (LTS, Long Term Support)。具体来说&#xff0c;就是每2年的4月份会发布一个支持周期长达5年的稳定版本&#xff0c;如: 20.04 和 22.04 分别代表 2020年4月 和 2022年4月 发布的长期支持版本. 当前(2022年9月)&a…...

【神经网络与深度学习】训练集与验证集的功能解析与差异探究

引言 在深度学习模型的训练过程中&#xff0c;训练集和验证集是两个关键组成部分&#xff0c;它们在模型性能的提升和评估中扮演着不可替代的角色。通过分析这两者的区别和作用&#xff0c;可以帮助我们深入理解模型的学习过程和泛化能力&#xff0c;同时为防止过拟合及优化超…...

单精度浮点运算/定点运算下 MATLAB (VS) VIVADO

VIVADO中单精度浮点数IP核计算结果与MATLAB单精度浮点数计算结果的对比 MATLAB定点运算仿真&#xff0c;对比VIVADO计算的结果 目录 前言 一、VIVADO与MATLAB单精度浮点数运算结果对比 二、MATLAB定点运算仿真 总结 前言 本文介绍了怎么在MATLAB中使用单精度浮点数进行运算…...

如何让 HTML 文件嵌入另一个 HTML 文件:详解与实践

目录 一、为什么需要在HTML中嵌入其他HTML文件&#xff1f; 二、常用的方法概览 三、利用 1. 基本原理 2. 使用场景 3. 优缺点 4. 实践示例 5. 适用建议 四、利用JavaScript动态加载内容 1. 原理简介 2. 实现步骤 示例代码 3. 优缺点分析 4. 应用场景 5. 实践建…...

7.10 GitHub Sentinel CLI开发实战:Python构建企业级监控工具的5大核心技巧

GitHub Sentinel CLI开发实战:Python构建企业级监控工具的5大核心技巧 GitHub Sentinel Agent 用户界面设计与实现:命令行工具开发实战 关键词:命令行工具开发、Python argparse、API 集成、错误处理、测试覆盖率 设计并实现基本的命令行工具 命令行界面(CLI)是企业级工…...

将AAB转APK的两种好用方法AAB to APK Converter

文章目录 第一种方法&#xff1a;Unity工具转换第二种方法&#xff1a;Python转换参数填写 第一种方法&#xff1a;Unity工具转换 适用人群&#xff1a; 策划&#xff0c;程序等装Unity的人 需要安装&#xff1a; Unity 下载AAB-to-APK-Converter 导入unity&#xff0c;点…...

netcore8.0项目部署到windows服务器中(或个人windows电脑),利用nginx反向代理

1、发布netcore项目&#xff0c;默认即可 1.1、前提&#xff0c;需在appsettings添加Kestrel代理 配置如下&#xff1a; {"Kestrel": {"Endpoints": {"http": {"Url": "http://localhost:7022"},"Https": {&qu…...

Python数据分析案例73——基于多种异常值监测算法探查内幕交易信息

背景 之前有监督模型案例都做烂了&#xff0c;现在来做一下无监督的模型吧&#xff0c;异常检测模型。 其实这个案例主要目的是为了展示这些异常值的无监督算法怎么使用的&#xff0c;本文是一个无监督算法的总结大全。只是恰巧有同学需要做这个内幕交易的数据&#xff0c;因…...

电商数据中台架构:淘宝 API 实时采集与多源数据融合技术拆解

引言 在当今竞争激烈的电商领域&#xff0c;数据已成为企业决策和业务发展的核心驱动力。电商数据中台能够整合和管理企业内外部的各种数据&#xff0c;为业务提供有力支持。其中&#xff0c;淘宝 API 实时采集与多源数据融合技术是数据中台架构中的关键部分。本文将深入探讨这…...