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

51单片机控制1602LCD显示屏输出自定义字符二

51单片机控制1602LCD显示屏输出自定义字符二

1.概述

1602LCD除了内置的字符外还提供自定义字符功能,当内置的字符中没有我们想要输出的字符时,我们就可以自己创造字符让他显示,下面介绍1602如何创建自定义字符。

2.1602LCD创建字符原理

自定义字符涉及到三个存储器,弄清楚他们的作用后就可以自定义字符。下面详细介绍三个存储器对自定义字符产生的作用。

自定义字符输出原理
程序指定CGROM地址——>CGROM查找地址关联的CGRAM地址——>CGRAM查找该地对应的自定义字符——>输出到1602LCD屏幕。

CGROM

CGROM是1602内置字符的存储器,在里面固化了常用的字符,当我们输出字母数字字符时,1602芯片在CGROM中查找字符对应的地址,然后将该地址输出,在LCD显示字符。
假如我们输出的字符在CGROM中没有内置,这个时候我们可以自己定义需要输出的字符。CGROM为我我们预留了8个CGRAM位置,用来输出自定义的字符。也就是说我们最多可以存储8个自定义字符。
在这里插入图片描述

内置指令表

查看内置指令表CGRAM地址有6位,D0~D5六位是CGRAM存放自定义字符地址,D6为1所以它的起始地址是从0x40开始。
在这里插入图片描述

CGRAM地址表

D0~D5是如何存放自定义字符,就要看下面CGRAM地址表格。CGRAM Address将6位地址划分为两类,左边(5,4,3)为高三位对应字符存放地址。3位从001 ~ 111组合后刚好是8个地址存放8个自定义字符。

右边(2,1,0) 为低三位对应自定义字符的8个字节,表中CGRAM data是构造一个字符内容,该字符每行是8位一个字节,有8行组成,每个字符是需要8个在字节存储,因此地址中的低3位从001 ~ 111组合后刚好是8个地址存放一个字符。

例如我们构造一个大写的 字符,它的数组是

// 数组中每个元素代表字符的一行,一共8行。
//LCD显示的字符是5x8点阵,因此一行只有5位,0x1f:1表示第5位为1,f表示后面4位为1
unsigned char str[] = {0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,};

在这里插入图片描述

CGRAM 与CGROM对应关系

了解了CGRAM内置指令和地址表就可以构造自定义的字符存放到CGRAM中,下一步就是将CGRAM地址中的字符与CGROM地址进行关联,这样LCD就可以从CGROM地址中找到CGRAM地址,通过CGRAM地址找到字符。

1602LCD已经将CGRAM和CGROM地址进行的关联,他们的关系如下图。
例如 CGRAM第一个字符的位置是(0x40-0x47) 对应CGROM地址是0X00,当程序中输出内容的地址是0x00就会找到CGRAM第一个字符输出到1602LCD屏幕上。

在这里插入图片描述

3.1602LCD创建字符实例

下面的实例中创建了LCDWriteCGRAM函数,实现创建自定义字符功能。

  • 首先设置自定义字符存放在CGRAM的位置:LCD1602_WriteCMD(0x40);
  • 将自定义字符内容存入CGRAM:for(i=0;i<8;i++){LCD1602_WriteData(str[i]);}
  • 设置LCD显示字符位置 :LCD1602_WriteCMD(0x80| 0x05);
  • 指定输出字符的CGROM地址:LCD1602_WriteData(0x00);
unsigned char code str[] = {0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00};
void LCDWriteCGRAM(){//构造自定义字符unsigned char i;//自定义字符存放在CGRAM的第一个位置0x40-0x47LCD1602_WriteCMD(0x40);//存放自定义字符内容for(i=0;i<8;i++){LCD1602_WriteData(str[i]);}//显示字符LCD1602_WriteCMD(0x80| 0x05);//CGRAM第一个位置对应CGROM的0x00地址LCD1602_WriteData(0x00);}
完整代码
#include <STC12C2052AD.H>
typedef unsigned char uint8;
// 定义引脚
#define	LCD1602_DB0_DB7	P1			// 定义LCD1602的数据总线
sbit LCD1602_RS = P3 ^ 2;					// 定义LCD1602的RS控制线
sbit LCD1602_RW = P3 ^ 3;					// 定义LCD1602的RW控制线
sbit LCD1602_E  = P3 ^ 4;					// 定义LCD1602的E控制线
sbit LCD1602_Busy = P1 ^ 7;					// 定义LCD1602的测忙线(与LCD1602_DB0_DB7关联)// 定义指令集
/*设置显示模式*/
#define LCD_MODE_PIN8 0x38	// 8位数据线,两行显示
#define LCD_MODE_PIN4 0x28	// 4位数据线,两个显示
#define LCD_SCREEN_CLR 0x01	// 清屏
#define LCD_CURSOR_RET 0x02	// 光标复位
#define LCD_CURSOR_RIGHT 0x06	// 光标右移,显示不移动
#define LCD_CURSOR_LEFT 0x04	// 光标左移,显示不移动
#define LCD_DIS_MODE_LEFT 0x07 	// AC自增,画面左移
#define LCD_DIS_MODE_RIGHT 0X05	// AC自增,画面右移/*光标开关控制*/
#define LCD_DIS_CUR_BLK_ON 0x0f	// 显示开,光标开,光标闪烁
#define LCD_DIS_CUR_ON 0x0e	// 显示开,光标开,光标不闪烁
#define LCD_DIS_ON 0x0c	// 显示开,光标关,光标不闪烁
#define LCD_DIS_OFF 0x08	// 显示关,光标关,光标不闪烁/*光标、显示移动*/
#define LCD_CUR_MOVE_LEFT 0x10	// 光标左移
#define LCD_CUR_MOVE_RIGHT 0x14	// 光标右移
#define LCD_DIS_MOVE_LEFT 0x18	// 显示左移
#define LCD_DIS_MOVE_RIGHT 0x1c	// 显示右移/**
LCD1602忙碌状态不会接收新指令,因此在发送新指令前先检测是否忙碌。
判断LCD1602_Busy变量的值为低电平则为不忙。
*/
void LCD1602_TestBusy(void){LCD1602_DB0_DB7 = 0xff;	//将数据引脚置为高电平LCD1602_RS = 0; // 指令状态LCD1602_RW = 1;	// 读状态LCD1602_E = 1;	// 打开LCD显示器读指令while(LCD1602_Busy);	//读取LCD1602_Busy(P1.7)为低电平则结束循环LCD1602_E = 0;	// 关闭LCD显示器读指令
}/********************************************************************************************
// 写指令程序 //
// 向LCD1602写命令 本函数需要1个指令集的入口参数 //
/********************************************************************************************/
void LCD1602_WriteCMD(uint8 LCD1602_command) { LCD1602_TestBusy();//输入的命令赋值给LCD1602_DB0_DB7LCD1602_DB0_DB7 = LCD1602_command;LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_E = 1;LCD1602_E = 0;
}
/********************************************************************************************
// 写数据程序 //
// 向LCD1602写数据 //
/********************************************************************************************/
void LCD1602_WriteData(uint8 LCD1602_data){ LCD1602_TestBusy();LCD1602_DB0_DB7 = LCD1602_data;LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_E = 1;LCD1602_E = 0;
}// LCD1602初始化
void LCD1602_Init(void){LCD1602_WriteCMD(LCD_MODE_PIN8);	// 显示模式设置:显示2行,每个字符为5*7个像素LCD1602_WriteCMD(LCD_DIS_ON); 	// 显示开及光标设置:显示开,光标关LCD1602_WriteCMD(LCD_CURSOR_RIGHT);		//显示光标移动设置:文字不动,光标右移LCD1602_WriteCMD(LCD_SCREEN_CLR);	// 显示清屏
}/*
输出字符串
x:数据地址
y:输出的行位置,第一行和第二行
str:输入字符串
*/
void print(uint8 x, uint8 y, uint8 *str){if(0 == y){LCD1602_WriteCMD(0x80 | x);}else{// 第二行起始位置是0x40LCD1602_WriteCMD(0x80 | (0x40+x));}while(*str != '\0'){LCD1602_WriteData(*str++);}}unsigned char code str[] = {0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00};
void LCDWriteCGRAM(){//构造自定义字符unsigned char i;//自定义字符存放在CGRAM的第一个位置0x40-0x47LCD1602_WriteCMD(0x40);//存放自定义字符内容for(i=0;i<8;i++){LCD1602_WriteData(str[i]);}//显示字符LCD1602_WriteCMD(0x80| 0x05);//CGRAM第一个位置对应CGROM的0x00地址LCD1602_WriteData(0x00);}void main(){unsigned char str1[] = "Beyound Self";LCD1602_Init();// 显示自定义内容LCDWriteCGRAM();print(0x00,1,str1);while(1);}
优化自定义字符函数

上面创建的LCDWriteCGRAM函数有缺陷,每当需要改变字符存放CGRAM位置或者修改LCD显示位置都需要修改这个函数,因此对他进行优化,将变化的内容提取为参数。成为一个工具函数,每次只需要传入参数就可以输出不同的字符。

LCDSetChar函数封装了自定义内容功能,该函数设计思想如下

  • 首先定义参数包含字符在LCD显示的位置,CGROM位置,字符内容
    • x:LCD显示字符位置
    • y:设置字符在LCD显示的行
    • pos:设置CGRAM位置
    • str:字符内容
  • 构造自定义字符包含两个部分
    • 设置字符在CGRAM存储位置
    • 设置字符内容
  • 设置字符显示
    • 设置字符在LCD哪个位置显示
    • 设置LCD显示哪个字符
/*
x:LCD显示字符位置
y:设置字符在LCD显示的行
pos:设置CGRAM位置
str:字符内容
*/
void LCDSetChar(unsigned char x, unsigned char y, unsigned char pos, unsigned char *str){unsigned char i;// 1.构造自定义字符,确定CGRAM位置for(i=0;i<8;i++){/*确定CGRAM位置0x40是CGRAM第一个起始位置,pos是设置第几个位置,一共8个。*/LCD1602_WriteCMD(0x40+pos*8+i );// 构造自定义字符LCD1602_WriteData(*(str+i));}// 2.显示字符// 设置字符在LCD显示的位置if(0 == y){LCD1602_WriteCMD(0x80 | x);}else{// 第二行起始位置是0x40LCD1602_WriteCMD(0x80 | (0x40+x));}// LCD显示字符内容,该地址是CGROMLCD1602_WriteData(0x00+pos);
}
完整代码
#include <STC12C2052AD.H>
typedef unsigned char uint8;
// 定义引脚
#define	LCD1602_DB0_DB7	P1			// 定义LCD1602的数据总线
sbit LCD1602_RS = P3 ^ 2;					// 定义LCD1602的RS控制线
sbit LCD1602_RW = P3 ^ 3;					// 定义LCD1602的RW控制线
sbit LCD1602_E  = P3 ^ 4;					// 定义LCD1602的E控制线
sbit LCD1602_Busy = P1 ^ 7;					// 定义LCD1602的测忙线(与LCD1602_DB0_DB7关联)// 定义指令集
/*设置显示模式*/
#define LCD_MODE_PIN8 0x38	// 8位数据线,两行显示
#define LCD_MODE_PIN4 0x28	// 4位数据线,两个显示
#define LCD_SCREEN_CLR 0x01	// 清屏
#define LCD_CURSOR_RET 0x02	// 光标复位
#define LCD_CURSOR_RIGHT 0x06	// 光标右移,显示不移动
#define LCD_CURSOR_LEFT 0x04	// 光标左移,显示不移动
#define LCD_DIS_MODE_LEFT 0x07 	// AC自增,画面左移
#define LCD_DIS_MODE_RIGHT 0X05	// AC自增,画面右移/*光标开关控制*/
#define LCD_DIS_CUR_BLK_ON 0x0f	// 显示开,光标开,光标闪烁
#define LCD_DIS_CUR_ON 0x0e	// 显示开,光标开,光标不闪烁
#define LCD_DIS_ON 0x0c	// 显示开,光标关,光标不闪烁
#define LCD_DIS_OFF 0x08	// 显示关,光标关,光标不闪烁/*光标、显示移动*/
#define LCD_CUR_MOVE_LEFT 0x10	// 光标左移
#define LCD_CUR_MOVE_RIGHT 0x14	// 光标右移
#define LCD_DIS_MOVE_LEFT 0x18	// 显示左移
#define LCD_DIS_MOVE_RIGHT 0x1c	// 显示右移/**
LCD1602忙碌状态不会接收新指令,因此在发送新指令前先检测是否忙碌。
判断LCD1602_Busy变量的值为低电平则为不忙。
*/
void LCD1602_TestBusy(void){LCD1602_DB0_DB7 = 0xff;	//将数据引脚置为高电平LCD1602_RS = 0; // 指令状态LCD1602_RW = 1;	// 读状态LCD1602_E = 1;	// 打开LCD显示器读指令while(LCD1602_Busy);	//读取LCD1602_Busy(P1.7)为低电平则结束循环LCD1602_E = 0;	// 关闭LCD显示器读指令
}/********************************************************************************************
// 写指令程序 //
// 向LCD1602写命令 本函数需要1个指令集的入口参数 //
/********************************************************************************************/
void LCD1602_WriteCMD(uint8 LCD1602_command) { LCD1602_TestBusy();//输入的命令赋值给LCD1602_DB0_DB7LCD1602_DB0_DB7 = LCD1602_command;LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_E = 1;LCD1602_E = 0;
}
/********************************************************************************************
// 写数据程序 //
// 向LCD1602写数据 //
/********************************************************************************************/
void LCD1602_WriteData(uint8 LCD1602_data){ LCD1602_TestBusy();LCD1602_DB0_DB7 = LCD1602_data;LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_E = 1;LCD1602_E = 0;
}// LCD1602初始化
void LCD1602_Init(void){LCD1602_WriteCMD(LCD_MODE_PIN8);	// 显示模式设置:显示2行,每个字符为5*7个像素LCD1602_WriteCMD(LCD_DIS_ON); 	// 显示开及光标设置:显示开,光标关LCD1602_WriteCMD(LCD_CURSOR_RIGHT);		//显示光标移动设置:文字不动,光标右移LCD1602_WriteCMD(LCD_SCREEN_CLR);	// 显示清屏
}/*
输出字符串
x:数据地址
y:输出的行位置,第一行和第二行
str:输入字符串
*/
void print(uint8 x, uint8 y, uint8 *str){if(0 == y){LCD1602_WriteCMD(0x80 | x);}else{// 第二行起始位置是0x40LCD1602_WriteCMD(0x80 | (0x40+x));}while(*str != '\0'){LCD1602_WriteData(*str++);}}/*
x:LCD显示字符位置
y:设置字符在LCD显示的行
pos:设置CGRAM位置
str:字符内容
*/
void LCDSetChar(unsigned char x, unsigned char y, unsigned char pos, unsigned char *str){unsigned char i;// 1.构造自定义字符,确定CGRAM位置for(i=0;i<8;i++){/*确定CGRAM位置0x40是CGRAM第一个起始位置,pos是设置第几个位置,一共8个。*/LCD1602_WriteCMD(0x40+pos*8+i );// 构造自定义字符LCD1602_WriteData(*(str+i));}// 2.显示字符// 设置字符在LCD显示的位置if(0 == y){LCD1602_WriteCMD(0x80 | x);}else{// 第二行起始位置是0x40LCD1602_WriteCMD(0x80 | (0x40+x));}// LCD显示字符内容,该地址是CGROMLCD1602_WriteData(0x00+pos);
}void main(){unsigned char str1[] = "Beyound Self";unsigned char code c1[] = {0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00};LCD1602_Init();// 显示自定义内容LCDSetChar(3,0,0,c1);print(0x00,1,str1);while(1);}
预装8个自定义字符

如果8个字符已经定义好还可以一次全部存储在CGRAM中,使用时候直接调用。

  • CgramWrite函数一次读取8个字符
  • print2函数用来输出字符
uint8 code Xword[]={0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,        //℃,代码 0x000x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,        //一,代码 0x010x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00,        //二,代码 0x020x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00,        //三,代码 0x030x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00,        //四,代码 0x040x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00,        //五,代码 0x050x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00,        //六,代码 0x060x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00,        //日,代码 0x07
};
void CgramWrite(void) {	// 装入CGRAM //unsigned char i;LCD1602_WriteCMD(0x06);			// CGRAM地址自动加1LCD1602_WriteCMD(0x40);			// CGRAM地址设为从第一个位置开始for(i=0;i<64;i++) {LCD1602_WriteData(Xword[i]);// 按数组写入数据}
}// a:LCD显示位置  b:显示哪个字符
void print2(unsigned char a,unsigned char t){LCD1602_WriteCMD(a | 0x80);LCD1602_WriteData(t);
}void main(){LCD1602_Init();CgramWrite();while(1){print2(0x01,0x00);print2(0x03,0x01);print2(0x05,0x02);print2(0x07,0x03);print2(0x09,0x04);print2(0x0b,0x05);print2(0x0d,0x06);print2(0x0f,0x07);}}

相关文章:

51单片机控制1602LCD显示屏输出自定义字符二

51单片机控制1602LCD显示屏输出自定义字符二 1.概述 1602LCD除了内置的字符外还提供自定义字符功能&#xff0c;当内置的字符中没有我们想要输出的字符时&#xff0c;我们就可以自己创造字符让他显示&#xff0c;下面介绍1602如何创建自定义字符。 2.1602LCD创建字符原理 自…...

HarmonyOS自学-Day2(@Builder装饰器)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;Builder装饰器&#xff1a;自定义构建函数Builder介绍Builder使用说明自定义组件中创建自定义构建函数全局自定义构建函数 Builder参数传递规则按引用传递参数按值传递参数 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程…...

bottom-up-attention-vqa-master 成功复现!!!

代码地址 1、create_dictionary.py 建立词典和使用预训练的glove向量 &#xff08;1&#xff09;create_dictionary() 遍历每个question文件取出所关注的question部分&#xff0c;qs 遍历qs&#xff0c;对每个问题的文本内容进行分词&#xff0c;并将分词结果添加到字典中&…...

BigDecimal中divide方法详解

BigDecimal中divide方法详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入探讨Java中BigDecimal的divide方法&#xff0c;揭开这个…...

视频推拉流EasyDSS互联网直播/点播平台构建户外无人机航拍直播解决方案

一、背景分析 近几年&#xff0c;国内无人机市场随着航拍等业务走进大众&#xff0c;出现爆发式增长。无人机除了在民用方面的应用越来越多&#xff0c;在其他领域也已经开始广泛应用&#xff0c;比如公共安全、应急搜救、农林、环保、交通 、通信、气象、影视航拍等。无人机使…...

行为型设计模式-策略模式(Strategy Pattern)

策略模式 策略模式&#xff1a;百度百科中引述为&#xff1a;指对象有某个行为&#xff0c;但是在不同的场景中&#xff0c;该行为有不同的实现算法。 策略模式是对算法的包装&#xff0c;是把使用算法的责任和算法本身分割开来&#xff0c;委派给不同的对象管理。策略模式通…...

html中RGB和RGBA颜色表示法

文章目录 RGB什么是RGBRGB颜色模式的取值范围RGB常用颜色对照表 RGBA什么是RGBARGBA颜色模式的取值范围 总结 RGB 什么是RGB RGB是一种颜色空间&#xff0c;其中R代表红色&#xff08;Red&#xff09;、G代表绿色&#xff08;Green&#xff09;、B代表蓝色&#xff08;Blue&a…...

【BEV感知】BEVFormer 融合多视角相机空间特征和时序特征的端到端框架 ECCV 2022

前言 本文分享BEV感知方案中,具有代表性的方法:BEVFormer。 基本思想:使用可学习的查询Queries表示BEV特征,查找图像中的空间特征和先前BEV地图中的时间特征。 它基于Deformable Attention实现了一种融合多视角相机空间特征和时序特征的端到端框架,适用于多种自动驾驶感…...

git拉取hugging face代码失败:443

报错信息&#xff1a;fatal: unable to access http://huggingface.co/THUDM/chatglm2-6b/: OpenSSL SSL_connect: Connection reset by peer in connection to huggingface.co:443 解决方法&#xff1a;&#xff08;127.0.0.1:7890配置为自己的实际代理ip及端口&#xff09; …...

【赠书活动】OpenCV4工业缺陷检测的六种方法

文章目录 前言机器视觉缺陷检测工业上常见缺陷检测方法延伸阅读推荐语 赠书活动 前言 随着工业制造的发展&#xff0c;对产品质量的要求越来越高。工业缺陷检测是确保产品质量的重要环节&#xff0c;而计算机视觉技术的应用能够有效提升工业缺陷检测的效率和精度。 OpenCV是一…...

设计模式之创建型设计模式(一):单例模式 原型模式

单例模式 Singleton 1、什么是单例模式 在软件设计中&#xff0c;单例模式是一种创建型设计模式&#xff0c;其主要目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 这意味着无论何时需要该类的实例&#xff0c;都可以获得相同的实例&#xff0c;而不会创建…...

Amazon CodeWhisperer 在 vscode 的应用

文章作者:旧花阴 CodeWhisperer 是一款可以帮助程序员更快、更安全地编写代码的工具&#xff0c;可以在他们的开发环境中实时提供代码建议和推荐。亚马逊云科技发布的这款代码生成工具 CodeWhisperer 最大的优势就是对于个人用户免费。以在 vscode 为例&#xff0c;演示安装过程…...

【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

目录 前言一、基于fabric8io操作pod1.1 yaml创建pod1.2 fabric8io创建pod案例 二、基于fabric8io创建Service&#xff08;含Deployment&#xff09;2.1 yaml创建Service和Deployment2.2 fabric8io创建service案例 三、基于fabric8io操作Volume3.1 yaml配置挂载存储卷3.2 基于fa…...

uniapp微信小程序下载保存图片流到本地,base64

我们在开发时下载图片或文件&#xff0c;地址基本上都是https的格式&#xff0c;下面来说一下后端返回base64的文件流&#xff0c;是如何下载的 必须把返回的流去掉这一部分&#xff1a;data:image/png;base64&#xff0c;否则下载不了 如我自己的流&#xff1a; data:image/…...

华为数通——企业双出口冗余

目标&#xff1a;默认数据全部经过移动上网&#xff0c;联通低带宽。 R1 [ ]ip route-static 0.0.0.0 24 12.1.1.2 目的地址 掩码 下一条 [ ]ip route-static 0.0.0.0 24 13.1.1.3 preference 65 目的地址 掩码 下一条 设置优先级为65 R…...

送奶APP开发:终极指南

您是否有兴趣使用新鲜牛奶和乳制品&#xff0c;但不想每天早上去乳制品店或最近的商店&#xff1f;借助技术&#xff0c;订购日常用品&#xff08;例如杂货和牛奶&#xff09;变得更加简单。 DailyMoo 是最受欢迎的送奶应用&#xff0c;收入达数百万人民币。因此&#xff0c;投…...

Ngnix之反向代理、负载均衡、动静分离

目录 1. Ngnix 1.1 Linux系统Ngnix下载安装 1.2 反向代理 正向代理&#xff08;Forward Proxy&#xff09;&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 1.3 负载均衡 1.4 动静分离 1. Ngnix Nginx是一个高性能的开源Web服务器&#xff0…...

(C++)将x减到0的最小操作数--滑动窗口

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…...

回答某位同学的问题:残差网络常用来分类,可以用于回归预测吗?

残差网络可以用于回归预测&#xff0c;以下是我的观点&#xff1a; 残差网络最初是用于计算机视觉和语音识别等分类任务,但它也可以用于回归预测。在回归预测任务中,我们预测的目标变量通常是一个连续值,而不是一个离散的类别。使用残差网络进行回归预测的主要思路是: 定义一个…...

C语言初学5:运算符

一、算数运算符 假设变量 A 的值为 10 运算符描述实例A先赋值后运算C A C为10 A为11A--C A-- C为10 A为9A先运算后赋值C A C为11 A为11--AC --A C为9 A为9 二、位运算符 运算符描述实例&对两个操作数的每一位执行逻辑与操作&#xff0c;如果两个相应的位都为 1&…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

网络编程(UDP编程)

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

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...