“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】
“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】
- 前言
- 预备知识
- 1温湿度检测系统需求
- 2.代码整合
- 2.1找到`编程实现LCD1602显示一行工程`,打开`代码文件`,将所需的`LCD1602驱动代码`拷贝到`温湿度检测系统_1602显示串口发送工程`内。
- 2.2找到`串口编程03_PC发送指令控制LED`工程,打开`代码文件`,将所需的`LCD1602驱动代码`拷贝到`温湿度检测系统_1602显示串口发送工程`内。
- 2.3找到`温湿度通过串口传到PC显示`工程,打开`代码文件`,将所需的`LCD1602驱动代码`拷贝到`温湿度检测系统_1602显示串口发送工程`内。
- 3.构造DHT11温湿度数据处理函数
- 3.1定义存放`温度`的`字符数组`和存放`湿度`的`字符数组`
- 3.2在DHT11温湿度数据处理函数内将温湿度数据存入相应字符数组。
- 4.主函数调用API顺序
- 4.1延时1秒,稳定系统
- 4.2初始化串口
- 4.3初始化LCD1602
- 4.4延时2秒,稳定DHT11模块
- 4.5在`while(1)`死循环内调用延时一秒函数,实现每隔1秒刷新温湿度数据
- 4.6在`while(1)`死循环内调用读取DHT11温湿度函数
- 4.7在`while(1)`死循环内调用DHT11温湿度数据处理函数
- 4.8在`while(1)`死循环内多次调用发送字符串函数,实现向PC发送温湿度数据
- 4.9在`while(1)`死循环内多次调用LCD1602显示一行字符函数,实现在LCD1602上显示温湿度数据
- 5.完整工程代码
- 6项目运行结果
- 结束语
前言
本篇博文介绍的是用51单片机的非标准写协议项目温湿度检测系统【上】,包含温湿度检测系统需求,代码整合,构造DHT11温湿度数据处理函数,主函数调用API顺序,完整工程代码,项目运行结果。看到这篇博文的朋友,可以先赞再看吗?
预备知识
一、基本电路标识识别和接线,例如VCC,GND。
二、电脑基本操作复制粘贴
三、C变量
四、基本输入输出
五、流程控制
六、函数
七、指针
八,字符串
如果以上知识不清楚,请自行学习后再来浏览。如果我有没例出的,请在评论区写一下。谢谢啦!
1温湿度检测系统需求
- 能够实时通过51单片机串口发送温湿度信息
- 能够实时通过51单片机驱动LCD1602显示温湿度信息
2.代码整合
2.1找到编程实现LCD1602显示一行工程
,打开代码文件
,将所需的LCD1602驱动代码
拷贝到温湿度检测系统_1602显示串口发送工程
内。
- LCD1602 IO口定义代码
//数据线定义
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0//控制线定义
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;
- LCD1602初始化必要延时代码
void Delay15ms() //@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}void Delay5ms() //@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}
- 检测LCD1602忙代码
void checkBusy()
{char tmp = 0x80;dataBuffer = 0x80;while(tmp & 0x80) //只要dataBuffer中的第8位为1就为忙,因为BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。{RS = 0; //根据手册中指令表可知RS=0,RW=1RW = 1; //RW=1为读的操作,所以需要配置读的时序图EN = 0; //根据手册中的写时序图,EN开始为低电平_nop_(); //执行空函数等待EN拉高EN = 1; //根据手册中的读时序图,EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();tmp = dataBuffer; //读取dataBuffer中的忙信号EN = 0; //根据手册中的写时序图,EN被拉低_nop_(); //根据手册中的写时序图,让EN保持一段时间的低电平}
}
- 向LCD1602写地址也就是指令代码和写数据代码
void writeCmd(char cmd)
{ checkBusy(); //检测忙信号RS = 0; //RS等于零,是写指令操作RW = 0; //RW在手册中写的时序图是可以全程低电平EN = 0; //根据手册中的写时序图,EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer = cmd; //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1; //根据手册中的写时序图,EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN = 0; //根据手册中的写时序图,EN被拉低_nop_(); //根据手册中的写时序图,让EN保持一段时间的低电平
}void weiteData(char cData)
{checkBusy(); //检测忙信号RS = 1; //RS等于1,是写数据操作RW = 0; //RW在手册中写的时序图是可以全程低电平EN = 0; //根据手册中的写时序图,EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer = cData; //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1; //根据手册中的写时序图,EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN = 0; //根据手册中的写时序图,EN被拉低_nop_(); //根据手册中的写时序图,让EN保持一段时间的低电平
}
- 初始化LCD1602代码
void initLCD1602()
{
//(1) 延时 15msDelay15ms();
//(2) 写指令 38H(不检测忙信号)writeCmd(0x38);
//(3) 延时 5msDelay5ms();
//(4) 以后每次写指令,读/写数据操作均需要检测忙信号
//(5) 写指令 38H:显示模式设置writeCmd(0x38);
//(6) 写指令 08H:显示关闭writeCmd(0x08);
//(7) 写指令 01H:显示清屏writeCmd(0x01);
//(8) 写指令 06H:显示光标移动设置writeCmd(0x06);
//(9) 写指令 0CH:显示开及光标设置writeCmd(0x0C);
}
- 让LCD1602显示一行字符的代码
void LCD1602ShowARow(char line,char column,char *str)
{switch(line) //选择哪行显示{case 1: //第一行显示writeCmd(0x80 + column); //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数while(*str) //判断字符串指针变量不为空执行循环,不用判断字符串结束标志{weiteData(*str); //发送字符串单个字符str++; //字符串指针变量偏移}break;case 2: //第二行显示writeCmd(0x80 + 0x40 + column); //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数,又因为第二行的列从0x40开始while(*str) //所以是从0x80 + 0x40 + 列数(特别注意){ weiteData(*str);str++;}break;}
}
- 最后将以上代码整合到
温湿度检测系统_1602显示串口发送工程
内。
2.2找到串口编程03_PC发送指令控制LED
工程,打开代码文件
,将所需的LCD1602驱动代码
拷贝到温湿度检测系统_1602显示串口发送工程
内。
- 串口初识化代码
void UartInit(void) //自己配
{//配置串口工作方式为方式1,从只收不发改为能收能发SCON = 0x50;//配置辅助寄存器,减少电磁辐射,稳定晶振频率 AUXR = 0x01;//设置定时器工作方式为定时器1的8位自动重装TMOD &= 0x0F;TMOD |= 0x20;//设置串口波特率为9600,0误差TH1 = 0xFD;TL1 = 0xFD;//打开定时器1TR1 = 1;
}
- 发送字节和发送字符串代码
void sendByte(char data_mas)
{SBUF = data_mas;while(!TI);TI = 0; //一定要软件置零,不然会出现乱序
}void sendString(char *str)
{while(*str != '\0'){sendByte(*str);str++;}
}
2.3找到温湿度通过串口传到PC显示
工程,打开代码文件
,将所需的LCD1602驱动代码
拷贝到温湿度检测系统_1602显示串口发送工程
内。
- 存放温湿度数据代码
char THdata[5]; //存放温湿度数据变量
- 打开DHT11高速模式和读取DHT11温湿度数据必要延时代码
void Delay30ms() //@11.0592MHz
{unsigned char i, j; i = 54;j = 199;do{while (--j);} while (--i);
}void Delay40us() //@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}
- 打开DHT11高速模式代码
void startDHT()
{Data = 1;Data = 0;//至少延时18ms,那么延时30msDelay30ms();Data = 1;//检测d点while(Data);//检测e点while(!Data);//检测f点while(Data);
}
- 读取DHT11温湿度数据代码
void readDHTData()
{char i; //轮次char j; //次数char flag;char tmp;//打开DHT11高速模式startDHT();for(i=0; i<5; i++){for(j=0; j<8; j++){//检测G点while(!Data);//根据传送1和0的时间不同,0是26us,1是70us。等待60us后,如果Data = 1,就传1,Data = 0;就传0//Delay60us(); 延时60微妙太长了,可能在读0时读到下一个发送序列了,延时40微妙Delay40us();if(Data == 1){flag = 1;while(Data); //传1的时间比较久,所以要等传1结束}else{flag = 0;}tmp = tmp << 1;tmp |= flag;}THdata[i] = tmp;}
}
3.构造DHT11温湿度数据处理函数
3.1定义存放温度
的字符数组
和存放湿度
的字符数组
char Temperature[9]; //定义温度字符数组
char Humidness[9]; //定义湿度字符数组
3.2在DHT11温湿度数据处理函数内将温湿度数据存入相应字符数组。
void THDataHandler()
{//湿度数据处理Humidness[0] = 'H';Humidness[1] = ':';Humidness[2] = THdata[0]/10 + 0x30;Humidness[3] = THdata[0]%10 + 0x30;Humidness[4] = '.';Humidness[5] = THdata[1]/10 + 0x30;Humidness[6] = THdata[1]%10 + 0x30;Humidness[7] = '%';Humidness[8] = '\0';//温度处理Temperature[0] = 'T';Temperature[1] = ':';Temperature[2] = THdata[2]/10 + 0x30;Temperature[3] = THdata[2]%10 + 0x30;Temperature[4] = '.';Temperature[5] = THdata[3]/10 + 0x30;Temperature[6] = THdata[3]%10 + 0x30;Temperature[7] = 'C';Temperature[8] = '\0';
}
4.主函数调用API顺序
4.1延时1秒,稳定系统
Delay1000ms();
4.2初始化串口
UartInit();
4.3初始化LCD1602
initLCD1602();
4.4延时2秒,稳定DHT11模块
Delay1000ms(); //等待DHT模块稳定
Delay1000ms();
4.5在while(1)
死循环内调用延时一秒函数,实现每隔1秒刷新温湿度数据
Delay1000ms();
4.6在while(1)
死循环内调用读取DHT11温湿度函数
readDHTData();
4.7在while(1)
死循环内调用DHT11温湿度数据处理函数
THDataHandler();
4.8在while(1)
死循环内多次调用发送字符串函数,实现向PC发送温湿度数据
//通过串口发送温湿度数据
sendString(Humidness);
sendString("\r\n");
sendString(Temperature);
sendString("\r\n");
sendString("\r\n");
4.9在while(1)
死循环内多次调用LCD1602显示一行字符函数,实现在LCD1602上显示温湿度数据
LCD1602ShowARow(1,4,Humidness);
LCD1602ShowARow(2,4,Temperature);
5.完整工程代码
#include "reg52.h"
#include "intrins.h"//数据线定义
//D0到D7 -- P0.1到P0.7
#define dataBuffer P0sbit LED1 = P3^7; //用尾定义声明LED1
sbit Data = P3^3; //把DHT11接在单片机的P1.0口
sfr AUXR = 0x8e; //声明AUXR寄存器地址//控制线定义
/*
RS--P1.0
RW--P1.1
EN--P1.4
*/
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^4;char THdata[5]; //存放温湿度数据变量
char Temperature[9]; //定义温度字符数组
char Humidness[9]; //定义湿度字符数组void Delay15ms() //@11.0592MHz
{unsigned char i, j;i = 27;j = 226;do{while (--j);} while (--i);
}void Delay5ms() //@11.0592MHz
{unsigned char i, j;i = 9;j = 244;do{while (--j);} while (--i);
}void Delay30ms() //@11.0592MHz
{unsigned char i, j; i = 54;j = 199;do{while (--j);} while (--i);
}void Delay40us() //@11.0592MHz
{unsigned char i;_nop_();i = 15;while (--i);
}void Delay1000ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void checkBusy()
{char tmp = 0x80;dataBuffer = 0x80;while(tmp & 0x80) //只要dataBuffer中的第8位为1就为忙,因为BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。{RS = 0; //根据手册中指令表可知RS=0,RW=1RW = 1; //RW=1为读的操作,所以需要配置读的时序图EN = 0; //根据手册中的写时序图,EN开始为低电平_nop_(); //执行空函数等待EN拉高EN = 1; //根据手册中的读时序图,EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();tmp = dataBuffer; //读取dataBuffer中的忙信号EN = 0; //根据手册中的写时序图,EN被拉低_nop_(); //根据手册中的写时序图,让EN保持一段时间的低电平}
}void writeCmd(char cmd)
{ checkBusy(); //检测忙信号RS = 0; //RS等于零,是写指令操作RW = 0; //RW在手册中写的时序图是可以全程低电平EN = 0; //根据手册中的写时序图,EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer = cmd; //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1; //根据手册中的写时序图,EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN = 0; //根据手册中的写时序图,EN被拉低_nop_(); //根据手册中的写时序图,让EN保持一段时间的低电平
}void weiteData(char cData)
{checkBusy(); //检测忙信号RS = 1; //RS等于1,是写数据操作RW = 0; //RW在手册中写的时序图是可以全程低电平EN = 0; //根据手册中的写时序图,EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer = cData; //根据手册中的写时序图,数据在EN还在低电平时就建立数据EN = 1; //根据手册中的写时序图,EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN = 0; //根据手册中的写时序图,EN被拉低_nop_(); //根据手册中的写时序图,让EN保持一段时间的低电平
}void initLCD1602()
{
//(1) 延时 15msDelay15ms();
//(2) 写指令 38H(不检测忙信号)writeCmd(0x38);
//(3) 延时 5msDelay5ms();
//(4) 以后每次写指令,读/写数据操作均需要检测忙信号
//(5) 写指令 38H:显示模式设置writeCmd(0x38);
//(6) 写指令 08H:显示关闭writeCmd(0x08);
//(7) 写指令 01H:显示清屏writeCmd(0x01);
//(8) 写指令 06H:显示光标移动设置writeCmd(0x06);
//(9) 写指令 0CH:显示开及光标设置writeCmd(0x0C);
}void UartInit(void) //自己配
{//配置串口工作方式为方式1,从只收不发改为能收能发SCON = 0x50;//配置辅助寄存器,减少电磁辐射,稳定晶振频率 AUXR = 0x01;//设置定时器工作方式为定时器1的8位自动重装TMOD &= 0x0F;TMOD |= 0x20;//设置串口波特率为9600,0误差TH1 = 0xFD;TL1 = 0xFD;//打开定时器1TR1 = 1;
}void sendByte(char data_mas)
{SBUF = data_mas;while(!TI);TI = 0; //一定要软件置零,不然会出现乱序
}void sendString(char *str)
{while(*str != '\0'){sendByte(*str);str++;}
}void startDHT()
{Data = 1;Data = 0;//至少延时18ms,那么延时30msDelay30ms();Data = 1;//检测d点while(Data);//检测e点while(!Data);//检测f点while(Data);
}void LCD1602ShowARow(char line,char column,char *str)
{switch(line) //选择哪行显示{case 1: //第一行显示writeCmd(0x80 + column); //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数while(*str) //判断字符串指针变量不为空执行循环,不用判断字符串结束标志{weiteData(*str); //发送字符串单个字符str++; //字符串指针变量偏移}break;case 2: //第二行显示writeCmd(0x80 + 0x40 + column); //选择哪个位置显示,因为位置地址的最高位必须为1,所以0x80+列数,又因为第二行的列从0x40开始while(*str) //所以是从0x80 + 0x40 + 列数(特别注意){ weiteData(*str);str++;}break;}
}void readDHTData()
{char i; //轮次char j; //次数char flag;char tmp;//打开DHT11高速模式startDHT();for(i=0; i<5; i++){for(j=0; j<8; j++){//检测G点while(!Data);//根据传送1和0的时间不同,0是26us,1是70us。等待60us后,如果Data = 1,就传1,Data = 0;就传0//Delay60us(); 延时60微妙太长了,可能在读0时读到下一个发送序列了,延时40微妙Delay40us();if(Data == 1){flag = 1;while(Data); //传1的时间比较久,所以要等传1结束}else{flag = 0;}tmp = tmp << 1;tmp |= flag;}THdata[i] = tmp;}
}void THDataHandler()
{//湿度数据处理Humidness[0] = 'H';Humidness[1] = ':';Humidness[2] = THdata[0]/10 + 0x30;Humidness[3] = THdata[0]%10 + 0x30;Humidness[4] = '.';Humidness[5] = THdata[1]/10 + 0x30;Humidness[6] = THdata[1]%10 + 0x30;Humidness[7] = '%';Humidness[8] = '\0';//温度处理Temperature[0] = 'T';Temperature[1] = ':';Temperature[2] = THdata[2]/10 + 0x30;Temperature[3] = THdata[2]%10 + 0x30;Temperature[4] = '.';Temperature[5] = THdata[3]/10 + 0x30;Temperature[6] = THdata[3]%10 + 0x30;Temperature[7] = 'C';Temperature[8] = '\0';
}void main()
{LED1 = 1; //一上电就让灯灭Delay1000ms();UartInit(); //初始化串口initLCD1602(); //初始化LCD1602Delay1000ms(); //等待DHT模块稳定Delay1000ms();while(1) //防止程序退出主函数,导致LED1微弱闪烁{Delay1000ms(); //间隔1秒读一次readDHTData(); //读取DHT11温湿度数据THDataHandler(); //将DHT11传回的数据装入温湿度字符数组//通过串口发送温湿度数据sendString(Humidness);sendString("\r\n");sendString(Temperature);sendString("\r\n");sendString("\r\n");LCD1602ShowARow(1,4,Humidness); LCD1602ShowARow(2,4,Temperature);}}
6项目运行结果
结束语
很高兴您能看到这里,点个赞再走呗。谢谢您啦!!!
相关文章:

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】
“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【上】 前言预备知识1温湿度检测系统需求2.代码整合2.1找到编程实现LCD1602显示一行工程,打开代码文件,将所需的LCD1602驱动代码拷贝到温湿…...

牛客网SQL进阶137:第二快/慢用时之差大于试卷时长一半的试卷
官网链接: 第二快慢用时之差大于试卷时长一半的试卷_牛客题霸_牛客网现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别,。题目来自【牛客题霸】https://www.nowcoder.com/practice/b1e2864271c14b63b0df9fc08b559166?tpId240 0 问题描述 试…...

CVE-2022-0760 漏洞复现
CVE-2022-0760 NSS [HNCTF 2022 WEEK2]ohmywordpress 【CVE-2022-0760】 题目描述:flag在数据库里面。 开题: 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面,有一个搜索框。 F12看看network。 又出现了这个Wor…...

WordPress突然后台无法管理问题
登录WordPress后台管理评论,发现点击编辑、回复均无反应。 尝试清除缓存、关闭CF连接均无效。 查看插件时发现关闭wp-china-yes插件可以解决问题。 后来又测试了下发现加速管理后台这项,在启用时会发生点击无效问题,禁用就好了,不…...

STM32F1 - 标准外设库_规范
STM32F10x_StdPeriph_Lib_V3.6.0 1> 头文件包含关系2> .c文件内部结构3> 宏定义位置4> 位掩码bit mask5> .c文件中定义私有变量6> 枚举类型定义 1> 头文件包含关系 1个头文件stm32f10x.h 就把整个MCU以及标准外设库,就管理了; 2>…...

推荐系统|召回04_离散特征处理
离散特征处理 离散特征是什么 怎么处理离散特征 One-hot编码 Embedding嵌入 从one-hot到Embedding,已经节省了很多的存储空间,但当数据量大的时候,还是占空间,所以工业界仍会对Embedding进行优化 而一个物品所对应的Embedding参数…...

一个查看armv8系统寄存器-值-含义的方式
找到解压后的SysReg_xml_v86A-2019-12目录 wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/SysReg_xml_v86A-2019-12.tar.gz wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-archi…...

LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略
LLMs之miqu-1-70b:miqu-1-70b的简介、安装和使用方法、案例应用之详细攻略 目录 miqu-1-70b的简介 miqu-1-70b的安装和使用方法 1、安装 2、使用方法 miqu-1-70b的案例应用 miqu-1-70b的简介 2024年1月28日,发布了miqu 70b,潜在系列中的…...

npm 下载报错
报错信息 : 证书过期 (CERT_HAS_EXPIRED) D:\Apps\nodejs-v18.16.1\npx.cmd --yes create-next-app"latest" . --ts npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/create-next-app failed…...

GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新
GPT-4登场:多模态能力革新,提升ChatGPT与必应体验,开放API助力游戏革新 引言 在人工智能领域,GPT-4的发布标志着一个新时代的到来。这一多模态大模型不仅在技术性能上实现了飞跃,更在功能层面带来全新的突破。GPT-4的…...

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】
文章目录 移位运算与乘法状态机简介SystemVerilog中的测试平台VCS 波形仿真 阻塞赋值和非阻塞赋值有限状态机(FSM)与无限状态机的区别 本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍,这里使用状态机…...

MongoDB系列:管道操作:聚合阶段操作符(二)
MongoDB系列:管道操作:聚合阶段操作符(二) 聚合阶段操作符介绍 本节只编写了个人认为可能用到的操作符,详细更多的操作符以及使用注意事项请前往MongoDB官网。 $match 过滤匹配数据。 // 插入数据 db.orders.inse…...

C++ //练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。
C Primer(第5版) 练习 5.12 练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /****…...

C语言-----自定义类型-----结构体枚举联合
结构体和数组一样,都是一群数据的集合,不同的是数组当中的数据是相同的类型,但是结构体中的数据类型可以不相同,结构体里的成员叫做成员变量 结构体类型是C语言里面的一种自定义类型,我们前面已经了解到过int,char,fl…...

elasticsearch下载及可视化工具下载使用
elasticsearch下载及配置、启动 一、下载 Download Elasticsearch | Elastic 二、启动 双击bat即可。 出现如下说明启动成功: 访问测试: 三、注意 (1)因为es启动默认端口是:9200,所以需要检查此端口是否被占用。…...

vim常用命令以及配置文件
layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式,在光标当前位置开始输入文本。 a: 进入插入模式,在光标下一个位置开始输入文…...

2024年的VUE2下的无效指令npm install --save vue-i18n
vue官网已经声明了不再维护vue2, vue-i18n安装依赖的时候就只接安装vue3的vue-i18, 直接报错: > npm install --save vue-i18n npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: yudao-ui-admin…...

计算机视觉主要知识点
计算机视觉是指利用计算机和算法来解析和理解图片和视频中的内容。这是一个跨学科领域,融合了计算机科学、图像处理、机器学习和模式识别等多方面的技术。以下是一些计算机视觉入门的基本知识点: 图像基础: 像素:图片的最基本组成…...

python 基础知识点(蓝桥杯python科目个人复习计划35)
今日复习计划:阶段总结(新年贺礼) 1.python简介(定义,优点,缺点,应用领域) python:一种广泛使用的解释型,高级和通用的编程语言 python极简,生…...

使用HTML、CSS和JavaScript来创建一个粒子效果,粒子会跟随鼠标点击位置生成
文章目录 一、粒子效果二、JavaScript三、HTML四、CSS五、热门文章 一、粒子效果 以下是一个简单的示例,使用HTML、CSS和JavaScript来创建一个粒子效果,粒子会跟随鼠标点击位置生成: <!DOCTYPE html> <html> <head><t…...

优质项目追踪平台一览:助力项目管理与监控
项目追踪平台是现代项目管理中不可或缺的工具,它可以帮助团队高效地跟踪和管理项目进度、任务和资源分配。在当今快节奏的商业环境中,有许多热门的项目追踪平台可供选择。 本文总结了当下热门的项目追踪平台,供您参考~ 1、Zoho Projects&…...

Docker下安装GitLab
极狐GitLab Docker 镜像 | 极狐GitLab 安装所需最小配置 内存至少4G 系统内核至少3.10以上 uname -r 命令可以查看系统内核版本 安装Docker 1.更新 yum源 yum update 2.安装依赖(如果在操作第三步的时候提示yum-config-manager 未找到命令 就安装下面依赖) yum instal…...

2024/2最新升级ChatGPT Plus的方法
2024年2月最新升级方法:ChatGPT Plus全方位体验指南 随着2024年2月的到来,ChatGPT Plus迎来了全新的升级。对于追求更高效率和更强大功能的用户来说,升级至ChatGPT Plus无疑是提升工作和学习体验的关键。在本指南中,我将一步一步…...

github和gitee
github GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。 github可以给提交的代码打上标签,方便版本的迭代和回退,也是一个存储代码的仓库 github工作区 gitee是gitHub的…...

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程
标题略有夸张的表达了接下来这一套确实很简单,相较于直接下载或者通过秋叶包更新而言。大大节省磁盘空间,和下载时间。 这篇教程不需要你有: 代码基础。都是复制粘贴就完事。魔法。 这篇教程默认你已经有: 1. 本地能够正常使用…...

【UE】游戏运行流程的简单理解
流程图 官方的游戏流程图: 一般顺序为初始化引擎、创建并初始化 GameInstance、加载关卡,最后开始游戏。 总的来说就是: 开始游戏-》游戏实例-》关卡-》游戏模式-》玩家控制器-》Pawn、玩家状态、HUD、UMG(可有可无) …...

【数据分析】Excel中的常用函数公式总结
目录 0 引用方式0.1 相对引用0.2 绝对引用0.3 混合引用0.4 3D引用0.5 命名引用 1 基础函数1.1 加法、减法、乘法和除法1.2 平均数1.3 求和1.4 最大值和最小值 2 文本函数2.1 合并单元格内容2.2 查找2.3 替换 3 逻辑函数3.1 IF函数3.2 AND和OR函数3.3 IFERROR函数 4 统计函数4.1…...

ESLint prettier 配置代码风格
环境同步: 1、ESlint,开启保存自动修复 配置文件 .eslintrc.cjs prettier 风格配置 https://prettier.io 使用单引号 不使用分号 每行宽度至多80字符 不加对象|数组最后逗号 换行符号不限制(win mac 不一致) vue组件名称…...

涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(上)
涤生大数据实战:基于FlinkODPS历史累计计算项目分析与优化(一) 1.前置知识 ODPS(Open Data Platform and Service)是阿里云自研的一体化大数据计算平台和数据仓库产品,在集团内部离线作为离线数据处理和存…...

jvm一级缓存
1、利用JVM缓存。脱离redis。 2、导包,springboot自带此包。如没有可以导:com.google.guava:guava:20.0的包。 3、直接上代码: package com.leo.cache;import com.alibaba.fastjson.JSONObject; import com.google.common.cache.Cache; im…...