【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块6

news2024/11/16 19:29:45

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 可直插UNO R3 Mega2560开发板

在这里插入图片描述
前述各项实验,初步尝试了不使用库和使用一些常用驱动库,也试用了不少国外网站上的相关驱动库。

这里推荐使用比较稳定的Adafruit GFX 库和 MCUFRIEND KBV 库的组合。

在这里插入图片描述
在这里插入图片描述
解压缩 MCUFRIEND KBV 并打开 MCUFRIEND_kbv.CPP。可以查看 MCUFRIEND 库支持的驱动程序列表

在这里插入图片描述
其他可能需要的相关驱动库,这些库现在不是必需的,但可以添加它们。

#include "TouchScreen.h" // 当想使用触摸屏时

#include "bitmap_mono.h" // 想显示库中的位图图像时

#include "bitmap_RGB.h" // 想显示库中的位图图像时

#include "Fonts/FreeSans9pt7b.h" // 想要其他字体时

#include "Fonts/FreeSans12pt7b.h" // 想要其他字体时

#include "Fonts/FreeSerif12pt7b.h" // 想要其他字体时

#include "FreeDefaultFonts.h" // 想要其他字体时

#include "SPI.h" // 使用 sd 卡显示位图图像

#include "SD.h" // 使用 sd 卡显示位图图像


相关基本命令清单

1、类和对象

//(int CS=A3, int RS=A2, int WR=A1, int RD=A0, int RST=A4)MCUFRIEND_kbv tft(A3, A2, A1, A0, A4);

该行从 MCUFRIEND_kbv 类创建一个名为 TFT 的对象,并提供 LCD 和 Arduino 之间的 SPI 通信。

2、运行液晶显示器

uint16_t ID = tft.readID(); tft.begin(ID);

该 tft.readID 函数从显示器读取 ID 并将其放入 ID 变量中。然后 tft.begin 函数获取 ID,LCD 准备工作。

3、显示器分辨率

tft.width(); //int16_t width(void);tft.height(); //int16_t height(void);

通过这两个函数,可以了解显示器的分辨率。只需将它们添加到代码中并将输出放入 uint16_t变量中。然后从串口读取它Serial.println();。先加Serial.begin(9600);在setup()。

4、屏幕颜色

tft.fillScreen(t); //fillScreen(uint16_t t);

fillScreen功能将屏幕t颜色更改为彩色。的t应该是包含UTFT颜色代码16位变量中。

#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F

您可以将这些行添加到代码的顶部,并在函数中使用颜色的名称。

5、填充像素

tft.drawPixel(x,y,t); //drawPixel(int16_t x, int16_t y, uint16_t t)tft.readPixel(x,y); //uint16_t readPixel(int16_t x, int16_t y)

drawPixel 函数用 t 颜色填充 x 和 y 位置的像素。

readPixel 函数读取 x 和 y 位置的像素颜色。

6、画线

<p><font size="4">tft.drawFastVLine(x,y,h,t); //drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t t)</font></p><p><font size="4">tft.drawFastHLine(x,y,w,t); //drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t t)</font></p><p><font size="4">tft.drawLine(xi,yi,xj,yj,t); //drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t t)</font></p>

drawFastVLine函数绘制一条从x,y位置开始的垂直线,长度为h像素,颜色为t。

drawFastHLine函数绘制一条水平线,从 x 和 y 位置开始,长度为 w 像素,颜色为 t。

drawLine函数绘制一条以 xi 开始的线,yi 位置结束在 xj 和 yj 中,颜色为 t。

<p><font size="4">for (uint16_t a=0; a<5; a++){</font></p><p><font size="4">  tft.drawFastVLine(x+a, y, h, t);}  </font></p><p><font size="4">
</font></p><p><font size="4">for (uint16_t a=0; a<5; a++){</font></p><p><font size="4">  tft.drawFastHLine(x, y+a, w, t);}  </font></p><p><font size="4">
</font></p><p><font size="4">for (uint16_t a=0; a<5; a++){</font></p><p><font size="4">  tft.drawLine(xi+a, yi, xj+a, yj, t);} </font></p><p><font size="4">
</font></p><p><font size="4">for (uint16_t a=0; a<5; a++){</font></p><p><font size="4">  tft.drawLine(xi, yi+a, xj, yj+a, t);} </font></p>

这三个代码块像前面的代码一样绘制线条,宽度为 5 像素。

7、绘制矩形

<p><font size="4">tft.fillRect(x,y,w,h,t); //fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t t)</font></p><p><font size="4">tft.drawRect(x,y,w,h,t); //drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t t)</font></p><p><font size="4">tft.fillRoundRect(x,y,w,h,r,t); //fillRoundRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t R , uint16_t t)</font></p><p><font size="4">tft.drawRoundRect(x,y,w,h,r,t); //drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, uint8_t R , uint16_t t)</font></p>

fillRect函数在 x 和 y 位置绘制一个填充矩形。w 是宽度,h 是高度,t 是矩形的颜色

drawRect 函数在 x 和 y 位置绘制一个矩形,宽度为 w,高度为 h,颜色为 t。

fillRoundRect 函数在 x 和 y 位置绘制一个半径为 r 的圆角填充矩形,w 宽度和 h 高度和 t 颜色。

drawRoundRect 函数在 x 和 y 位置绘制一个半径为 r 的圆角矩形,w 宽度和 h 高度和 t 颜色。

8、画圆圈

tft.drawCircle(x,y,r,t); //drawCircle(int16_t x, int16_t y, int16_t r, uint16_t t)tft.fillCircle(x,y,r,t); //fillCircle(int16_t x, int16_t y, int16_t r, uint16_t t)

drawCircle 函数在 x 和 y 位置以及 r 半径和 t 颜色中绘制一个圆。

fillCircle 函数在 x 和 y 位置以及 r 半径和 t 颜色中绘制一个实心圆。

for (int p = 0; p < 4000; p++) {  j = 120 * (sin(PI * p / 2000));  i = 120 * (cos(PI * p / 2000));  j2 = 60 * (sin(PI * p / 2000));  i2 = 60 * (cos(PI * p / 2000));  tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, col[n]);}

通过此代码,您可以绘制一个弧。将“for”更改为 0 到 4000。

9、绘制三角形

tft.drawTriangle(x1,y1,x2,y2,x3,y3,t); //drawTriangle(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint16_t t)tft.fillTriangle(x1,y1,x2,y2,x3,y3,t); //fillTriangle(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint16_t t)

drawTriangle 函数绘制一个具有三个角位置 x、y 和 z 以及 t 颜色的三角形。

fillTriangle 函数绘制一个带有三个角位置 x、y 和 z 以及 t 颜色的实心三角形。

10、显示文本

tft.setCursor(x,y); //setCursor(int16_t x, int16_t y)

此代码将光标位置设置为 x 和 y。

tft.setTextColor(t); //setTextColor(uint16_t t)tft.setTextColor(t,b); //setTextColor(uint16_t t, uint16_t b)

第一行设置文本的颜色。下一行设置文本及其背景的颜色。

tft.setTextSize(s); //setTextSize(uint8_t s)

此代码将文本的大小设置为s。s是一个介于 1 和 5 之间的数字。

tft.write(c); //write(uint8_t c)

此代码显示一个字符。

<font size="4"><font color="#000000">tft.println("www.Electropeak.com");tft.print("www.Electropeak.com");</font></font>

第一个函数显示一个字符串并将光标移动到下一行。

第二个函数只显示字符串。

showmsgXY(x,y,sz,&FreeSans9pt7b,"www.Electropeak.com"); //void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg)void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg){  int16_t x1, y1;  uint16_t wid, ht;  tft.setFont(f);  tft.setCursor(x, y);  tft.setTextColor(0x0000);  tft.setTextSize(sz);  tft.print(msg);}

此函数更改文本的字体。您应该添加此函数和字体库。

for (int j = 0; j < 20; j++) {  tft.setCursor(145, 290);  int color = tft.color565(r -= 12, g -= 12, b -= 12);  tft.setTextColor(color);  tft.print("www.Electropeak.com");  delay(30);}

此功能可以淡化您的文本。您应该将其添加到您的代码中。

11、旋转屏幕

tft.setRotation(r); //setRotation(uint8_t r)

此代码旋转屏幕。0=0 , 1=90, 2=180, 3=270 。

12、反转屏幕颜色

tft.invertDisplay(i); //invertDisplay(boolean i)

此代码给出 RGB 代码并获得 UTFT 颜色代码。

13、滚动屏幕

Scrolling the Screen

此代码滚动您的屏幕。Maxroll 是滚动的最大高度。

14、重启

tft.reset();

此代码重置屏幕。

15、显示单色图像

static const uint8_t name[] PROGMEM = {  //Add image code here.}tft.drawBitmap(x, y, name, sx, sy, 0x0000);

首先,应该将图像转换为十六进制代码。从以下链接下载软件。如果你不想改变软件的设置,你必须反转图像的颜色,使图像水平镜像并逆时针旋转90度。现在将其添加到软件中并进行转换。打开导出的文件并将十六进制代码复制到 Arduino IDE。x 和 y 是图像的位置。sx 和 sy 是图像的大小。可以在最后一次输入中更改图像的颜色。

必要的文件和下载:
在这里插入图片描述

RGB 彩色图像显示

在这里插入图片描述

首先,您应该将图像转换为代码。使用此链接转换图像:

http://www.rinkydinkelectronics.com/t_imageconverter565.php

上传您的图像并下载 UTFT 库可以处理的转换后的文件。现在将十六进制代码复制到 Arduino IDE。x 和 y 是图像的位置。sx 和 sy 是图像的大小。

几个驱动库的使用案例

1、一个字符串和 8 个按顺序改变颜色的实心圆圈。要围绕静态点绘制圆圈,可以使用 sin(); 和 cos(); 职能。应该定义 PI 编号。要更改颜色,可以使用 color565(); 函数并替换你的 RGB 代码。

项目十五:一个字符串和 8 个按顺序改变颜色的实心圆圈

实验开源代码

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目十五:一个字符串和 8 个按顺序改变颜色的实心圆圈

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/

#include "Adafruit_GFX.h"

#include "MCUFRIEND_kbv.h"

MCUFRIEND_kbv tft;

#include "Fonts/FreeSans9pt7b.h"

#include "Fonts/FreeSans12pt7b.h"

#include "Fonts/FreeSerif12pt7b.h"

#include "FreeDefaultFonts.h"

#define PI 3.1415926535897932384626433832795

int col[8];

void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) {

 int16_t x1, y1;

 uint16_t wid, ht;

 tft.setFont(f);

 tft.setCursor(x, y);

 tft.setTextColor(0x0000);

 tft.setTextSize(sz);

 tft.print(msg);

}

void setup() {

 tft.reset();

 Serial.begin(9600);

 uint16_t ID = tft.readID();

 tft.begin(ID);

 tft.setRotation(1);

 tft.invertDisplay(true);

 tft.fillScreen(0xffff);

 showmsgXY(90, 200, 2, &FreeSans9pt7b, "Loading......");

 col[0] = tft.color565(155, 0, 50);

 col[1] = tft.color565(170, 30, 80);

 col[2] = tft.color565(195, 60, 110);

 col[3] = tft.color565(215, 90, 140);

 col[4] = tft.color565(230, 120, 170);

 col[5] = tft.color565(250, 150, 200);

 col[6] = tft.color565(255, 180, 220);

 col[7] = tft.color565(255, 210, 240);

}

void loop() {

 for (int i = 8; i > 0; i--) {

  tft.fillCircle(180 + 40 * (cos(-i * PI / 4)), 100 + 40 * (sin(-i * PI / 4)), 10, col[0]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 1)*PI / 4)), 100 + 40 * (sin(-(i + 1)*PI / 4)), 10, col[1]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 2)*PI / 4)), 100 + 40 * (sin(-(i + 2)*PI / 4)), 10, col[2]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 3)*PI / 4)), 100 + 40 * (sin(-(i + 3)*PI / 4)), 10, col[3]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 4)*PI / 4)), 100 + 40 * (sin(-(i + 4)*PI / 4)), 10, col[4]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 5)*PI / 4)), 100 + 40 * (sin(-(i + 5)*PI / 4)), 10, col[5]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 6)*PI / 4)), 100 + 40 * (sin(-(i + 6)*PI / 4)), 10, col[6]); delay(15);

  tft.fillCircle(180 + 40 * (cos(-(i + 7)*PI / 4)), 100 + 40 * (sin(-(i + 7)*PI / 4)), 10, col[7]); delay(15);

 }

}

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十六:2.4 英寸 TFT LCD 触摸屏模块 XPT2046 PCB ILI9341 240x320 像素 8 位 SPI 串口插接显示器

项目十五:一个字符串和 8 个按顺序改变颜色的实心圆圈

Arduino实验场景图

在这里插入图片描述
2、选择了经典字体并使用了一个函数来淡化文本

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

项目十六:选择了经典字体并使用了一个函数来淡化文本

实验开源代码

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

   实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目十六:选择了经典字体并使用了一个函数来淡化文本

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/

#include "Adafruit_GFX.h"  // Core graphics library

#include "MCUFRIEND_kbv.h"  // Hardware-specific library

MCUFRIEND_kbv tft;

#include "Fonts/FreeSans9pt7b.h"

#include "Fonts/FreeSans12pt7b.h"

#include "Fonts/FreeSerif12pt7b.h"

#include "FreeDefaultFonts.h"

void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg) {

 int16_t x1, y1;

 uint16_t wid, ht;

 tft.setFont(f);

 tft.setCursor(x, y);

 tft.setTextSize(sz);

 tft.println(msg);

}

uint8_t r = 255, g = 255, b = 255;

uint16_t color;

void setup() {

 Serial.begin(9600);

 uint16_t ID = tft.readID();

 tft.begin(ID);

 tft.invertDisplay(true);

 tft.setRotation(1);

}

void loop(void) {

 tft.invertDisplay(true);

 tft.fillScreen(fwrite);

 color = tft.color565(40, 240, 140);

 tft.setTextColor(color);

 showmsgXY(0, 0, 1, &FreeSerif12pt7b, "but they whose heart is firm"); delay(40);

 tft.println(" ");

 tft.println("and grow brave by reflection"); delay(40);

 tft.println(" ");

 tft.println("but they whose heart is firm"); delay(40);

 tft.println(" ");

 tft.println("and grow brave by reflection"); delay(40);

 delay(300);

 for (int j = 0; j < 20; j++) {

  tft.setCursor(60, 210);

  color = tft.color565(r -= 12, g -= 42, b -= 52);

  tft.setTextColor(color);

  tft.println(" ---- Da Vinci ----");

  delay(200);

 }

 while (1);

}

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

项目十六:选择了经典字体并使用了一个函数来淡化文本

实验场景图 https://imagemc.dfrobot.com.cn/data/attachment/forum/202106/29/154354m05drh5qd1rpf0jc.gif

在这里插入图片描述
3、将一个.jpg图片转换为.c文件并添加到代码中,写了一个字符串并使用淡入淡出代码显示。然后使用滚动代码将屏幕向左移动。下载 .h 文件并将其添加到 Arduino 草图的文件夹中。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

项目十七:画线、实心圆和字符串显示功能

实验开源代码:

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目十七:画线、实心圆和字符串显示功能

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/

#include "Adafruit_GFX.h"

#include "MCUFRIEND_kbv.h"

MCUFRIEND_kbv tft;

uint16_t ox = 0, oy = 0;

int ave = 0, avec = 0, avet = 0;

void aveg(void) {

 int z = 0;

 Serial.println(ave);

 Serial.println(avec);

 avet = ave / avec;

 Serial.println(avet);

 avet = avet * 32;

 for (int i = 0; i < 24; i++) {

  for (uint16_t a = 0; a < 3; a++) {

   tft.drawLine(avet + a, z, avet + a, z + 10, 0xFB21);

  } // thick

  for (uint16_t a = 0; a < 2; a++) {

   tft.drawLine(avet - a, z, avet - a, z + 10, 0xFB21);

  }

  delay(100);

  z = z + 20;

 }

}

void dchart_10x10(uint16_t nx, uint16_t ny) {

 ave += nx;

 avec++;

 nx = nx * 32;

 ny = ny * 48;

 tft.drawCircle(nx, ny, 10, 0x0517);

 tft.drawCircle(nx, ny, 9, 0x0517);

 tft.fillCircle(nx, ny, 7, 0x0517);

 delay (100);

 ox = nx;

 oy = ny;

}

void dotchart_10x10(uint16_t nx, uint16_t ny) {

 ave += nx;

 avec++;

 nx = nx * 32;

 ny = ny * 48;

 int plus = 0;

 float fplus = 0;

 int sign = 0;

 int y = 0, x = 0;

 y = oy;

 x = ox;

 float xmines, ymines;

 xmines = nx - ox;

 ymines = ny - oy;

 if (ox > nx) {

  xmines = ox - nx;

  sign = 1;

 }

 else

  sign = 0;

 for (int a = 0; a < (ny - oy); a++) {

  fplus += xmines / ymines;

  plus = fplus;

  if (sign == 1)

   tft.drawFastHLine(0, y, x - plus, 0xBFDF);

  else

   tft.drawFastHLine(0, y, x + plus, 0xBFDF);

  y++;

  delay(5);

 }

  

 for (uint16_t a = 0; a < 2; a++) {

  tft.drawLine(ox + a, oy, nx + a, ny, 0x01E8);

 } // thick

 for (uint16_t a = 0; a < 2; a++) {

  tft.drawLine(ox, oy + a, nx, ny + a, 0x01E8);

 }

 ox = nx;

 oy = ny;

}

void setup() {

 tft.reset();

 Serial.begin(9600);

 uint16_t ID = tft.readID();

 tft.begin(ID);

}

void loop() {

 tft.invertDisplay(true);

 tft.fillScreen(0xffff);

 dotchart_10x10(3, 0);

 dotchart_10x10(2, 1);

 dotchart_10x10(4, 2);

 dotchart_10x10(4, 3);

 dotchart_10x10(5, 4);

 dotchart_10x10(3, 5);

 dotchart_10x10(6, 6);

 dotchart_10x10(7, 7);

 dotchart_10x10(9, 8);

 dotchart_10x10(8, 9);

 dotchart_10x10(10, 10);

 dchart_10x10(3, 0);

 dchart_10x10(2, 1);

 dchart_10x10(4, 2);

 dchart_10x10(4, 3);

 dchart_10x10(5, 4);

 dchart_10x10(3, 5);

 dchart_10x10(6, 6);

 dchart_10x10(7, 7);

 dchart_10x10(9, 8);

 dchart_10x10(8, 9);

 dchart_10x10(10, 10);

 tft.setRotation(1);

 tft.setTextSize(2);

 tft.setTextColor(0x01E8);

 tft.setCursor(20, 20);

 tft.print("Average");

 int dl = 20;

 for (int i = 0; i < 6; i++) {

  for (uint16_t a = 0; a < 3; a++) {

   tft.drawLine(dl, 40 + a, dl + 10, 40 + a, 0xFB21);

  }

  dl += 16;

 }

 tft.setRotation(0);

 aveg();

 while (1);

}

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

项目十七:画线、实心圆和字符串显示功能

实验场景图 https://imagemc.dfrobot.com.cn/data/attachment/forum/202106/29/171035ppiot8q9orii9riz.gif

在这里插入图片描述

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

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

相关文章

详解c++---布隆过滤器

目录标题 位图的优缺点为什么会有布隆过滤器&#xff1a;布隆过滤器的应用场景&#xff1a;布隆过滤器的实现布隆过滤器的测试 位图的优缺点 位图的优点&#xff1a; 1.位图可以节省空间&#xff0c;位图判断存储的数据是在还是不在只用一个比特位就可以记录数据出现的情况&a…

【毕业季·进击的技术er】大学生计算机毕业设计应该这样写

活动地址&#xff1a;毕业季进击的技术erhttps://marketing.csdn.net/p/f4a818f6455f3a9a7a20c89f60ad35f7 目录 扉页 摘要 目录 一 绪论 二、相关技术环境介绍 三、系统需求分析 四、系统架构设计 五、系统实现 六、系统测试 致谢 参考文献 以一个过来学长的角度来看…

SQl排序与分页

1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date FROM employees ORDER…

元素配对----贪心1 (爱思创)

源代码 #include <bits/stdc.h> using namespace std; int main() {int n,data,sum0;cin>>n;vector<int> vec1,vec2;for(int i0; i<n; i){cin>>data;vec1.push_back(data);}for(int i0; i<n; i){cin>>data;vec2.push_back(data);}sort(ve…

linux下查看cpu使用率和内存占用

top top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器&#xff0c;下面详细介绍它的使用方法&#xff1b; top是一个动态显示过程&#xff0c;即可通过用户按键来不断刷新当前状态。如果在前台…

前端启动出现报错,提示vue-cli-service serve的解决办法

前端启动出现报错&#xff0c;提示vue-cli-service serve的解决办法 在命令行中使用命令 npm run dev运行从网上下载的一个vue项目时出现了以下报错&#xff1a; 原因&#xff1a; 原因是因为 node_modules文件的缺失 npm install再次执行 npm run dev启动成功

Java爬虫之CentOS7 安装Selenium+chrome+chromedriver+java【Java动态爬虫爬取数据环境安装一篇文章精通系列】

在这篇文章中&#xff0c;我们将学习如何在 CentOS 7 系统上安装 Java 动态爬虫所需的环境&#xff1a;Selenium、Chrome 浏览器和 ChromeDriver。这个教程将帮助你掌握如何搭建一个用于数据爬取的环境。 一、安装 chrome yum install https://dl.google.com/linux/direct/go…

JConsole或者JvisualVM远程连接jetty进行jvm监控

最近项目发现了服务有内存泄漏的问题&#xff0c;但是在jvm上并没有配置即jvm没有配置 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/tmp/heapdump.hprof 这两个参数&#xff0c;导致在发生了oom后只能看到日志中有OOM异常&#xff0c;其他的并不能分析出来&#xff0c;等…

手机快充协议

高通:QC2.0、QC3.0、QC3.5、QC4.0、QC5.0、 FCP、SCP、AFC、SFCP、 MTKPE1.1/PE2.0/PE3.0、TYPEC、PD2.0、PD3.0/3.1、VOOC 支持 PD3.0/PD2.0 支持 QC3.0/QC2.0 支持 AFC 支持 FCP 支持 PE2.0/PE1.1 联发科的PE&#xff08;Pump Express&#xff09;/PE 支持 SFCP 在PP…

【035】C++泛型编程(模板)实践:设计数组类模板模仿vector容器

C泛型编程&#xff08;模板&#xff09;实践 引言一、类模板的概述二、实现数组类模板三、类模板的继承3.1、类模板派生出普通类3.2、类模板派生出类模板 总结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&#xff0…

[MySQL]MySQL表的约束

[MySQL]表的约束 文章目录 [MySQL]表的约束1. 约束的概念2. 空属性(null/not null)3. 默认值(default)4. 列描述(comment)5. 填充零(zerofill)6. 主键(primary key)7. 自增长(auto_increment)8. 唯一键(unique)9. 外键(foreign key) 1. 约束的概念 数据库通过技术手段限制数据的…

ping是什么,有什么作用?

什么是Ping Ping是一种计算机网络管理员软件实用程序&#xff0c;通常用于检查主机的可访问性。可访问性包括两个方面。一个是可用性&#xff0c;另一个是响应时间。 ping 请求可以通过大多数命令行界面中标准的 ping 命令执行。Ping是什么意思&#xff1f;它是一个实用程序&…

同步锁-线程安全问题解决方案

同步锁-线程安全问题解决方案 目录 同步锁-线程安全问题解决方案1 同步锁1.1 前言1.2 同步与异步1.3 synchronized同步关键字1.3.1 写法1.3.2 前提1.3.3 特点1.4.1练习-改造售票案例implements Runnable1.4.2 练习-改造售票案例extends Thread 1.5 之前遇到过的同步例子 2 线程…

IIC(硬件实现)-GD32

IIC&#xff08;硬件实现&#xff09;-GD32 #include "i2c.h"void i2c_init(void){i2c_deinit(I2C0);//使能外设时钟rcu_periph_clock_enable(RCU_I2C0);rcu_periph_clock_enable(RCU_GPIOB);//设置gpio口gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO…

SSM项目 shiro整合redis

一、准备阶段&#x1f349; 创建好web工程后&#xff08;不会创建的可以看我前几篇文章&#xff09; 看不懂的小伙伴可以看一下我的第一篇文章里面有详细的介绍 1.引入依赖&#x1f95d; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"ht…

数据库管理-第九十期 本周升级一小坑(20230709)

第九十期 本周升级一小坑 19c OCM依然在准备之中&#xff0c;第三堂和第四堂应该在下周内完成。 本周割接了3次&#xff0c;一次给X8M计算节点换内存&#xff08;可修复的ECC报错了&#xff0c;没影响生产&#xff09;&#xff0c;两次都是给X8那套升级&#xff08;就是多灾多…

基础IO及文件系统

一、系统接口介绍 1. open()命令 模式下&#xff1a;ctrlv进入visual block模式&#xff0c;然后选择J、K&#xff0c;然后输入大写i&#xff0c;然后输入//&#xff0c;最后按ESC&#xff0c;即可完成批量注释&#xff0c;按u取消。ctrl v 进入块选择模式&#xff0c;选中你要…

LinuxCP插件virtio与内核vhost

以下为LCP创建的接口对&#xff0c;VPP侧为物理接口port7&#xff0c;映射到Linux侧的为虚拟接口hostap1&#xff0c;接口hostap1作为vhost的后端存在。VPP侧接口tap1为前端的virtio接口。 vpp# show lcp itf-pair: [0] port7 tap1 hostap1 24 type tap vdp# vdp# show interf…

QT登录界面

1.效果图 2.代码 #include "widget.h" #include "ui_widget.h" #include <QApplication> #include <QWidget> #include <QtWidgets>Widget::Widget(QWidget *parent): QMainWindow(parent), ui(new Ui::Widget) {ui->setupUi(this);…