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

ESP32S3 使用LVGL驱动LCD屏(ST7789主控)

ESP32S3 使用LVGL驱动LCD屏(ST7789主控)


目录

1 分析原理图
2 驱动、点亮LCD(ST7789)
  2.1 在工程中添加目录、文件
  2.2 添加esp_lvgl_port组件
  2.3 对工程进行必要的配置
  2.4 编写必要代码
3 烧录、验证


1 分析原理图

要使用SOC驱动LCD屏,首先需要看的就是硬件原理图,主要要看的是用的什么驱动芯片、驱动接口类型、具体的引脚连接等。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

    通过这部分原理图,可以知道,主控用的是8MB Flash的ESP32S3-WROOM模组,LCD驱动芯片为ST7789,驱动接口为SPI接口。IO9控制的是LCD的亮度、IO10为ST7789的SPI片选、IO12为ST7789的SPI时钟、IO11和IO13则为ST7789的SPI数据输入输出,其他的还有一些复位信号、背光信号。


2 驱动、点亮LCD(ST7789)

我们在博文

IDF项目添加LVGL组件 创建的工程的基础上,进一步实现LCD屏幕的驱动点亮。

2.1 在工程中添加目录、文件

在工程中的main路径下创建一个文件夹lvgl_options,并在其中创建文件lvgl_options.h、lvgl_options.c。

在这里插入图片描述

    修改main路径下的CMakeLists.txt文件,将lvgl_options路径下的文件添加进构建系统。

在这里插入图片描述

2.2 添加esp_lvgl_port组件

在ESP组件中心搜索esp_lvgl_port组件,并通过idf 命令将其添加进工程。
idf.py clean
idf.py add-dependency "espressif/esp_lvgl_port^2.4.3"
idf.py set-target esp32s3

在这里插入图片描述

在这里插入图片描述

2.3 对工程进行必要的配置

根据模组的实际flash情况配置flash。

在这里插入图片描述

    根据模组的实际ram情况配置ram。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

    根据LCD情况和实际内存资源情况,调整LVGL相关配置。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4 编写必要代码

首先需要初始化对应的SPI 总线,通过创建一个spi_bus_config_t类型的对象,调用接口 spi_bus_initialize() 可以完成 SPI 总线的初始化。
spi_bus_config_t buscfg = {.sclk_io_num = EXAMPLE_LCD_GPIO_SCLK,.mosi_io_num = EXAMPLE_LCD_GPIO_MOSI,.miso_io_num = EXAMPLE_LCD_GPIO_MISO,.quadwp_io_num = GPIO_NUM_NC,.quadhd_io_num = GPIO_NUM_NC,.max_transfer_sz = EXAMPLE_LCD_H_RES * EXAMPLE_LCD_DRAW_BUFF_HEIGHT * sizeof(uint16_t),};ESP_RETURN_ON_ERROR(spi_bus_initialize(EXAMPLE_LCD_SPI_NUM, &buscfg, SPI_DMA_CH_AUTO), TAG, "SPI init failed");

    在完成了SPI 总线的初始化后,就可以开始初始化LCD设备了,LCD设备的初始化需要先创建一个esp_lcd_panel_io_spi_config_t类型的对象完成实际SPI的配置,再通过esp_lcd_new_panel_io_spi()接口完成lcd_io对象的创建,再通过lcd_io对象完成lcd_panel的创建。

const esp_lcd_panel_io_spi_config_t io_config = {.dc_gpio_num = EXAMPLE_LCD_GPIO_DC,.cs_gpio_num = EXAMPLE_LCD_GPIO_CS,.pclk_hz = EXAMPLE_LCD_CLOCK_SPEED_HZ,.lcd_cmd_bits = EXAMPLE_LCD_CMD_BITS,.lcd_param_bits = EXAMPLE_LCD_PARAM_BITS,.spi_mode = EXAMPLE_LCD_SPI_MODE,.trans_queue_depth = 10,};
ESP_GOTO_ON_ERROR(esp_lcd_new_panel_io_spi((esp_lcd_spi_bus_handle_t)EXAMPLE_LCD_SPI_NUM, &io_config, &lcd_io), err, TAG, "New panel IO failed");const esp_lcd_panel_dev_config_t panel_config = {//.reset_gpio_num = EXAMPLE_LCD_GPIO_RST,.reset_gpio_num = GPIO_NUM_NC,.color_space = EXAMPLE_LCD_COLOR_SPACE,.bits_per_pixel = EXAMPLE_LCD_BITS_PER_PIXEL,
};
ESP_GOTO_ON_ERROR(esp_lcd_new_panel_st7789(lcd_io, &panel_config, &lcd_panel), err, TAG, "New panel failed");

    在完成了SPI和LCD设备的初始化后,就可以初始化lvgl组件了。主要就是调用lvgl_port_init()和lvgl_port_add_disp()。

    完整的lvgl_options.h

#ifndef _MY_LVGL_OPTIONS_H_
#define _MY_LVGL_OPTIONS_H_#ifdef __cplusplus
extern "C" {
#endifvoid lvgl_options_test(void);#ifdef __cplusplus
} /* extern "C" */
#endif#endif 

    完整的lvgl_options.c

#include "esp_err.h"
#include "esp_log.h"
#include "esp_check.h"#include "driver/gpio.h"
#include "driver/spi_master.h"#include "esp_lcd_panel_io.h"
#include "esp_lcd_panel_vendor.h"
#include "esp_lcd_panel_ops.h"#include "esp_lvgl_port.h"#include "lvgl_options.h"// ST7789 参数
#define SPI_TFT_ST7789_CLOCK_SPEED_HZ      (60*1000*1000) 
#define SPI_TFT_ST7789_SPI_MODE            (2)/* LCD size */
#define EXAMPLE_LCD_H_RES   (240)
#define EXAMPLE_LCD_V_RES   (320)/* LCD settings */
#define EXAMPLE_LCD_SPI_NUM         (SPI3_HOST)
#define EXAMPLE_LCD_CMD_BITS        (8)
#define EXAMPLE_LCD_PARAM_BITS      (8)
#define EXAMPLE_LCD_COLOR_SPACE     (ESP_LCD_COLOR_SPACE_BGR)
#define EXAMPLE_LCD_BITS_PER_PIXEL  (16)
#define EXAMPLE_LCD_DRAW_BUFF_DOUBLE (1)
#define EXAMPLE_LCD_DRAW_BUFF_HEIGHT (320)
#define EXAMPLE_LCD_BL_ON_LEVEL      (1)#define EXAMPLE_LCD_SPI_MODE        SPI_TFT_ST7789_SPI_MODE
#define EXAMPLE_LCD_CLOCK_SPEED_HZ  SPI_TFT_ST7789_CLOCK_SPEED_HZ
#define EXAMPLE_LCD_GPIO_SCLK       (GPIO_NUM_12)
#define EXAMPLE_LCD_GPIO_MOSI       (GPIO_NUM_11)
#define EXAMPLE_LCD_GPIO_MISO       (GPIO_NUM_13)
//#define EXAMPLE_LCD_GPIO_RST        (GPIO_NUM_48)
#define EXAMPLE_LCD_GPIO_DC         (GPIO_NUM_9)
#define EXAMPLE_LCD_GPIO_CS         (GPIO_NUM_10)
//#define EXAMPLE_LCD_GPIO_BL         (GPIO_NUM_45)static const char *TAG = "lvgl_options";// LVGL image declare
LV_IMG_DECLARE(esp_logo)/* LCD IO and panel */
static esp_lcd_panel_io_handle_t lcd_io = NULL;
static esp_lcd_panel_handle_t lcd_panel = NULL;/* LVGL display and touch */
static lv_display_t *lvgl_disp = NULL;static esp_err_t spi_bus_init(void)
{esp_err_t ret = ESP_OK;spi_bus_config_t buscfg = {.sclk_io_num = EXAMPLE_LCD_GPIO_SCLK,.mosi_io_num = EXAMPLE_LCD_GPIO_MOSI,.miso_io_num = EXAMPLE_LCD_GPIO_MISO,.quadwp_io_num = GPIO_NUM_NC,.quadhd_io_num = GPIO_NUM_NC,.max_transfer_sz = EXAMPLE_LCD_H_RES * EXAMPLE_LCD_DRAW_BUFF_HEIGHT * sizeof(uint16_t),};// 初始化SPI 总线ESP_LOGD(TAG, "Initialize SPI bus");ESP_RETURN_ON_ERROR(spi_bus_initialize(EXAMPLE_LCD_SPI_NUM, &buscfg, SPI_DMA_CH_AUTO), TAG, "SPI init failed");return ret;
}static esp_err_t app_lcd_init(void)
{esp_err_t ret = ESP_OK;ESP_LOGD(TAG, "Install LCD driver");// 初始化 LCD SPIESP_LOGD(TAG, "Install panel IO");const esp_lcd_panel_io_spi_config_t io_config = {.dc_gpio_num = EXAMPLE_LCD_GPIO_DC,.cs_gpio_num = EXAMPLE_LCD_GPIO_CS,.pclk_hz = EXAMPLE_LCD_CLOCK_SPEED_HZ,.lcd_cmd_bits = EXAMPLE_LCD_CMD_BITS,.lcd_param_bits = EXAMPLE_LCD_PARAM_BITS,.spi_mode = EXAMPLE_LCD_SPI_MODE,.trans_queue_depth = 10,};ESP_GOTO_ON_ERROR(esp_lcd_new_panel_io_spi((esp_lcd_spi_bus_handle_t)EXAMPLE_LCD_SPI_NUM, &io_config, &lcd_io), err, TAG, "New panel IO failed");const esp_lcd_panel_dev_config_t panel_config = {//.reset_gpio_num = EXAMPLE_LCD_GPIO_RST,.reset_gpio_num = GPIO_NUM_NC,.color_space = EXAMPLE_LCD_COLOR_SPACE,.bits_per_pixel = EXAMPLE_LCD_BITS_PER_PIXEL,};ESP_GOTO_ON_ERROR(esp_lcd_new_panel_st7789(lcd_io, &panel_config, &lcd_panel), err, TAG, "New panel failed");esp_lcd_panel_reset(lcd_panel);esp_lcd_panel_init(lcd_panel);//esp_lcd_panel_mirror(lcd_panel, true, true);esp_lcd_panel_disp_on_off(lcd_panel, true);/* LCD backlight on ESP_ERROR_CHECK(gpio_set_level(EXAMPLE_LCD_GPIO_BL, EXAMPLE_LCD_BL_ON_LEVEL));*/return ret;err:if (lcd_panel) {esp_lcd_panel_del(lcd_panel);}if (lcd_io) {esp_lcd_panel_io_del(lcd_io);}spi_bus_free(EXAMPLE_LCD_SPI_NUM);return ret;
}static esp_err_t app_lvgl_init(void)
{/* Initialize LVGL */const lvgl_port_cfg_t lvgl_cfg = {.task_priority = 4,         /* LVGL task priority */.task_stack = 6144,         /* LVGL task stack size */.task_affinity = -1,        /* LVGL task pinned to core (-1 is no affinity) */.task_max_sleep_ms = 500,   /* Maximum sleep in LVGL task */.timer_period_ms = 5        /* LVGL timer tick period in ms */};ESP_RETURN_ON_ERROR(lvgl_port_init(&lvgl_cfg), TAG, "LVGL port initialization failed");/* Add LCD screen */ESP_LOGD(TAG, "Add LCD screen");const lvgl_port_display_cfg_t disp_cfg = {.io_handle = lcd_io,.panel_handle = lcd_panel,.buffer_size = EXAMPLE_LCD_H_RES * EXAMPLE_LCD_DRAW_BUFF_HEIGHT,.trans_size = EXAMPLE_LCD_H_RES * (EXAMPLE_LCD_DRAW_BUFF_HEIGHT / 2),.double_buffer = EXAMPLE_LCD_DRAW_BUFF_DOUBLE,.hres = EXAMPLE_LCD_H_RES,.vres = EXAMPLE_LCD_V_RES,.monochrome = false,
#if LVGL_VERSION_MAJOR >= 9.color_format = LV_COLOR_FORMAT_RGB565,
#endif.rotation = {.swap_xy = false,.mirror_x = false,.mirror_y = true,},.flags = {//.buff_dma = true,.buff_spiram = true,
#if LVGL_VERSION_MAJOR >= 9//.swap_bytes = true,
#endif  }};lvgl_disp = lvgl_port_add_disp(&disp_cfg);return ESP_OK;
}static void app_main_display(void)
{lv_obj_t *scr = lv_scr_act();/* Task lock */lvgl_port_lock(0);/* Label */lv_obj_t *label = lv_label_create(scr);lv_obj_set_width(label, EXAMPLE_LCD_H_RES);lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, 0);
#if LVGL_VERSION_MAJOR == 8lv_label_set_recolor(label, true);lv_label_set_text(label, "#FF0000 "LV_SYMBOL_BELL" Hello world Espressif and LVGL "LV_SYMBOL_BELL"#\n#FF9400 "LV_SYMBOL_WARNING" For simplier initialization, use BSP "LV_SYMBOL_WARNING" #");
#elselv_label_set_text(label, LV_SYMBOL_BELL" Hello world Espressif and LVGL "LV_SYMBOL_BELL"\n "LV_SYMBOL_WARNING" For simplier initialization, use BSP "LV_SYMBOL_WARNING);
#endiflv_obj_align(label, LV_ALIGN_CENTER, 0, 20);/* Task unlock */lvgl_port_unlock();
}void lvgl_options_test(void)
{ESP_LOGD(TAG, "lvgl_options_test");/* SPI BUS  initialization*/ESP_ERROR_CHECK(spi_bus_init());/* LCD HW initialization */ESP_ERROR_CHECK(app_lcd_init());/* LVGL initialization */ESP_ERROR_CHECK(app_lvgl_init());/* Show LVGL objects */app_main_display();return;
}

3 烧录、验证

经过上述的添加依赖组件、设定工程配置、编写必要代码后,就可以编译、烧录进设备进行验证了。测试结果显然是符合预期的。

在这里插入图片描述

相关文章:

ESP32S3 使用LVGL驱动LCD屏(ST7789主控)

ESP32S3 使用LVGL驱动LCD屏(ST7789主控) 目录 1 分析原理图 2 驱动、点亮LCD(ST7789) 2.1 在工程中添加目录、文件 2.2 添加esp_lvgl_port组件 2.3 对工程进行必要的配置 2.4 编写必要代码 3 烧录、验证 1 分析原理图 要使用SOC驱动LCD屏&#…...

Zed调试宏 C语言错误日志 异常错误调试信息

1、C中的错误码 在C语言中通过返回错误码或设置全局的errno值来反馈错误问题。errno.h是一个头文件,它定义了一个全局变量errno,用于在程序中记录和报告错误的原因。这个机制主要用于处理系统调用或标准库函数出错时的错误反馈。当系统调用或库函数…...

GitCode 光引计划征文|JavaVision:引领全能视觉智能识别新纪元

在人工智能技术飞速发展的今天,计算机视觉作为AI领域的重要分支,正逐渐渗透到各行各业中。JavaVision,作为[光引计划]的一部分,致力于提供一个基于Java的全能视觉智能识别解决方案。同时它集成了MilvusPlus,旨在提供一…...

数据分析思维(五):分析方法——假设检验分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...

《OpenCV计算机视觉》--介绍及基础操作

文章目录 《OpenCV计算机视觉》--介绍及基础操作一.OpenCV介绍二.下载OpenCV三.基础操作1.调用OpenCV2.读取图片信息3.读取图片的灰度图4.视频文件读取5.对图片进行切片6.提取RGB颜色通道7.合并颜色通道8.图片修改图片打码图片组合 9.cv2.resize10.图形运算图像加法运算cv2.add…...

利用Java爬虫获取苏宁易购商品详情

在数字化时代,电商平台的商品信息对于市场分析、价格监控和消费者决策至关重要。苏宁易购作为中国领先的电商平台之一,提供了丰富的商品信息。本文将介绍如何使用Java语言开发爬虫,获取苏宁易购商品的详细信息。 Java爬虫技术简介 Java作为一…...

【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)

CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…...

DP动态规划(装箱问题)

# [NOIP2001 普及组] 装箱问题 ## 题目描述 有一个箱子容量为 $V$,同时有 $n$ 个物品,每个物品有一个体积。 现在从 $n$ 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。…...

selenium学习笔记(一)

文章目录 前言一、selenium的简介java使用seleniumPython使用selenium常用的浏览器selenium的功能 二、chromeDriver的安装查看本机的chrome版本?匹配对应的chromedriver并下载在服务器上例如Centos如何安装Chrome 三、selenium内容详解chrome启动chrome启动参数元素…...

jest expect().resolves和expect().rejects原理

假设存在如下代码 export default function fetchData(fn) {return Axios.get(http://www.dell-lee.com/react/api/demo.json) } 接口返回的数据为 {"success": true } 那么对于测试代码 test(fetchData, async () > {await expect(fetchData()).resolves.to…...

大语言模型驱动的Agent:定义、工作原理与应用

文章目录 引言什么是大语言模型? Agent的概念LLM Agent的工作原理 Dify平台上的AgentLLM Agent的应用场景挑战与展望结论 引言 随着人工智能(AI)技术的发展,特别是自然语言处理(NLP)领域的进步&#xff0c…...

写作词汇积累:纰漏、坎肩、颠三倒四、隔阂

纰漏 【纰漏】是指因粗心而产生的差错、小事故或漏洞 1. 在准备这次会议的过程中,我们反复核对资料,力求不出现任何【纰漏】。2. 在这次重要的项目汇报中,他小心翼翼地检查每一页 PPT,生怕出现任何【纰漏】。3. 尽管她工作一向细…...

一种简易的免杀绕过方法

一种简易的免杀绕过方法 这里我们直接参考师兄的项目https://github.com/snnxyss/In-Swor exe-shellcode-加密-运行 话不多说直接上图 这里我们用geacon作为本次实验 从这里我们可以看到 geacon已经不行了 这里我们将exe转shellcode 生成之后将123.txt放到config目录下 利…...

CTF web解题 [NISACTF 2022]popchains PHP反序列化 pop链

不积跬步无以至千里 不积小流无以成江海 对web方向有了更近一步的了解&#xff0c;根据一道题目来学习PHP反序列化及pop链 [NISACTF 2022]popchains flag&#xff1a;NSSCTF{3096663a-4b18-4567-bdfb-8403f9414704} Happy New Year~ MAKE A WISH <?php echo?Happy?Ne…...

重温设计模式--单例模式

文章目录 单例模式&#xff08;Singleton Pattern&#xff09;概述单例模式的实现方式及代码示例1. 饿汉式单例&#xff08;在程序启动时就创建实例&#xff09;2. 懒汉式单例&#xff08;在第一次使用时才创建实例&#xff09; 单例模式的注意事项应用场景 C代码懒汉模式-经典…...

AI的进阶之路:从机器学习到深度学习的演变(一)

AI的进阶之路&#xff1a;从机器学习到深度学习的演变 在当今科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09;已成为推动创新的核心力量。这三个领域虽然紧密相连&#xff0c;却…...

WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件

文章目录 1、案例效果2、创建自定义 PathButton 控件1、定义 PathButton 类2、设计样式与控件模板3、代码解释3、控件使用4、直接在 XAML 中绑定命令3、源代码获取4、总结1、案例效果 2、创建自定义 PathButton 控件 1、定义 PathButton 类 首先,我们需要创建一个新的类 Pat…...

Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印

图样&#xff1a; 就可以导入了 上代码 import tkinter as tk from tkinter import ttk import sqlite3 from datetime import datetime from tkinter import messagebox, filedialog import pandas as pd import reclass OrderSystem:def __init__(self, root):self.root r…...

【电商搜索】CRM: 具有可控条件的检索模型

【电商搜索】CRM: 具有可控条件的检索模型 目录 文章目录 【电商搜索】CRM: 具有可控条件的检索模型目录文章信息摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要数据与结论&#xff09;相关工作后续优化方向 后记 https://arxiv.org/pdf/2412.…...

python使用pip进行库的下载

前言 现如今有太多的python编译软件&#xff0c;其库的下载也是五花八门&#xff0c;但在作者看来&#xff0c;无论是哪种方法都是万变不离其宗&#xff0c;即pip下载。 pip是python的包管理工具&#xff0c;无论你是用的什么python软件&#xff0c;都可以用pip进行库的下载。 …...

Golang 的并发优势

在如今的编程领域&#xff0c;一个程序能够同时处理多个任务的能力非常重要&#xff0c;这就是所谓的并发处理。而 Golang 在并发编程方面表现十分出色&#xff0c;具有很多独特的优势&#xff0c;简直不要太简单。 一、轻量级的协程&#xff08;Goroutine&#xff09; 在传统…...

5G学习笔记之Non-Public Network

目录 0. NPN系列 1. 概述 2. SNPN 2.1 SNPN概述 2.2 SNPN架构 2.3 SNPN部署 2.3.1 完全独立 2.3.2 共享PLMN基站 2.3.3 共享PLMN基站和PLMN频谱 3. PNI-NPN 3.1 PNI-NPN概述 3.2 PNI-NPN部署 3.2.1 UPF独立 3.2.2 完全共享 0. NPN系列 1. NPN概述 2. NPN R18 3. 【SNPN系列】S…...

SpringBoot——核心概念

文章目录 一.核心概念IoC/DI思想2.Ioc容器3.Bean 二.IoC入门案例三.DI入门案例分析四.bean基础配置五.bean的实例化&#xff08;创建&#xff09;六.bean实例化——静态工厂七.bean实例化——示例工程与FactoryBean八.bean的生命周期九.依赖注入的两种方式十.构造器注入十一.依…...

【HarmonyOs学习日志(14)】计算机网络之域名系统DNS

域名系统DNS 域名系统DNS——从域名解析出IP地址 文章目录 域名系统DNS概述域名到IP地址的解析 互联网的域名结构命名标准 域名服务器域名的解析过程 概述 域名系统DNS&#xff08;Domain Name System&#xff09;是互联网使用的命名系统&#xff0c;用来把便于人们使用的机器…...

电脑丢失bcrypt.dll文件是什么原因?找不到bcrypt.dll文件修复办法来啦!

电脑运行时常见问题及解决方案&#xff1a;文件丢失、文件损坏与系统报错 作为一名软件开发从业者&#xff0c;深知电脑在日常使用中难免会遇到各种问题&#xff0c;如文件丢失、文件损坏和系统报错等。这些问题不仅影响工作效率&#xff0c;还可能带来数据丢失的风险。今天&a…...

shell编程3

声明 学习视频来自B站UP主 泷羽sec 向脚本程序传递参数 可以向脚本程序传递一个或多参数 echo 执行的文件名是:S0 echo 第一个参数是: 1 e c h o 传递的参数作为一个字符串显示 : 1 echo 传递的参数作为一个字符串显示: 1echo传递的参数作为一个字符串显示:* echo 传递的参数…...

LAUNCHXL_F28379D_Workspace_CCS124

/// 安装 controlSUITE C:\ti\controlSUITE\device_support\F2837xD\v210 /// /// /// /// /// 删除 /// /// /// >> Compilation failure source_common/subdir_rules.mk:9: recipe for target source_common/F2837xD_Adc.obj failed "C:/ti/controlSUITE/devic…...

智慧商城:编辑切换状态,删除功能

编辑切换状态 为 编辑 注册点击事件进行状态取反&#xff0c;为该状态赋一个初始值 false 如果是非编辑状态是要进行结算的&#xff0c;否则删除 点击“编辑”状态是 要进行 “删除”&#xff0c;非编辑状态是要进行 “结算” 当 结算 时&#xff0c;希望是能 全选 进而能多卖…...

支付测试 流程

支付测试 流程 支付测试是确保支付系统安全、稳定、可靠运行的关键环节&#xff0c;以下是其一般流程&#xff1a; 测试计划阶段 明确测试目标&#xff1a;确定本次支付测试的重点和预期达到的目标&#xff0c;如测试支付功能的完整性、安全性、性能等。制定测试计划&#x…...

Ai编程从零开始全栈开发一个后台管理系统之用户登录、权限控制、用户管理-前端部分(十二)

云风网 云风笔记 云风知识库 一、创建前端部分 1、vite初始化项目 npm create vitelatest admin-frontend – --template vue-ts 2、安装必要的依赖 npm install vue-router pinia axios element-plus element-plus/icons-vue安装完成后package.json如下&#xff1a; {&qu…...

LeetCode 197. 上升的温度

LeetCode 197. 上升的温度 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是该表具有唯一值的列。 没有具有相同 recordDate 的不同行。…...

ECharts散点图-气泡图,附视频讲解与代码下载

引言&#xff1a; ECharts散点图是一种常见的数据可视化图表类型&#xff0c;它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图&#xff0c;包括图表效果预览、视频讲解及代码下载&#xff0c;让你轻松掌握…...

【pycharm】对需要传参数以及配置文件的情况进行debug教程

【pycharm】对需要传参数以及配置文件的情况进行debug教程 例如下面这个项目&#xff0c;我们要运行需要在终端输入 python main.py -mtrain -trsr0.03 -vsr0.01其中 -m‘train’ -trsr0.03 -vsr0.01是我们需要传的参数 在终端运行如下&#xff1a; 如果我们要进行debug的话…...

three.js混合白色模型的智慧城市扫光效果

three.js混合白色模型的智慧城市扫光效果 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idcityBlendLight import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { FBXLoader …...

【QT常用技术讲解】发送POST包(两种方式:阻塞方式及非阻塞方式)

前言 http/https(应用层)协议是广泛使用的网络通信协议。在很多与第三方API对接的场景中&#xff0c;通常是通过http/https协议完成&#xff0c;比如API对接时&#xff0c;通常要通过POST包获取access_token进行鉴权&#xff0c;然后再进行数据交互&#xff08;本篇也包含有对接…...

基于Python大数据的电影可视化分析系统

标题:基于 Python 大数据的电影可视化分析系统 内容:1.摘要 本文介绍了一个基于 Python 大数据的电影可视化分析系统。该系统通过收集和分析大量电影数据&#xff0c;提供了对电影市场的深入洞察。文章首先介绍了系统的背景和目的&#xff0c;然后详细描述了系统的架构和功能。…...

Vue3:uv-upload图片上传

效果图&#xff1a; 参考文档&#xff1a; Upload 上传 | 我的资料管理-uv-ui 是全面兼容vue32、nvue、app、h5、小程序等多端的uni-app生态框架 (uvui.cn) 代码&#xff1a; <view class"greenBtn_zw2" click"handleAddGroup">添加班级群</vie…...

VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

redis使用注意哪些事项

1. 数据类型选择&#xff1a; • Redis支持多种数据类型&#xff0c;如字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&#xff09;等。在选择…...

Go使用sqlx操作MySQL完整指南

# Go使用sqlx操作MySQL完整指南## 1. 安装依赖bash go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx2. 数据库基础操作 package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx" )// 定…...

计算机基础复习12.23

ThreadLocal 线程隔离&#xff1a;ThreadLocal为每个线程提供了独立的变量副本&#xff0c;意味着线程之间不会相互影响&#xff0c;可以安全的在多线程环境中使用这些变量而不必担心数据竞争或同步问题 ThreadLocal的实现依赖于Thread类中的一个ThreadLocalMap字段&#xff…...

Jenkins介绍

Jenkins 是一款流行的开源自动化服务器&#xff0c;在软件开发和持续集成 / 持续交付&#xff08;CI/CD&#xff09;流程中发挥着关键作用。 一、主要功能 1.持续集成&#xff08;CI&#xff09; &#xff08;1&#xff09;.自动构建&#xff1a;Jenkins 可以配置为监听代码仓…...

RK3588 , mpp硬编码yuv, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件....

Delphi WebBrowser 基本操作与常见问题的解决方案

前言 WebBrowser 作为Delphi 常见的网络浏览控件&#xff0c;我这里整理了一些它的基本操作&#xff0c;遇到了一些问题&#xff0c;我梳理了一下并给出解决方案 基本操作 WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 Web…...

【更新】LLM Interview

课程链接&#xff1a;BV1o217YeELo 文章目录 LLM基础相关1. LLMs概述2. 大语言模型尺寸3. LLMs的优势与劣势4. 常见的大模型分类5. 目前主流的LLMs开源模型体系有哪些&#xff08;Prefix Decoder&#xff0c;Causal Decoder&#xff0c;Encoder-Decoder的区别是什么&#xff09…...

从零开始C++棋牌游戏开发之第一篇:C++ 游戏开发环境搭建与工具简介

前言&#xff1a;作者的感想 每一次选择开始一项新技能的学习&#xff0c;总会让人感到既兴奋又有些许忐忑。C 游戏开发&#xff0c;尤其是针对棋牌类游戏规则实现的开发&#xff0c;更是一个有趣而充满挑战的领域。作为一名开发者&#xff0c;我深知面对 C 时的那种 "既…...

Hydrogen-Web 项目常见问题解决方案

Hydrogen-Web 项目常见问题解决方案 hydrogen-web Lightweight matrix client with legacy and mobile browser support [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/hy/hydrogen-web 项目基础介绍 Hydrogen-Web 是一个轻量级的 Matrix 客户端&#xff0c;专…...

LabVIEW中的“Synchronize with Other Application Instances“

在LabVIEW中&#xff0c;“Synchronize with Other Application Instances”是一个常见的提示或错误&#xff0c;通常出现在尝试并行运行多个LabVIEW实例时&#xff0c;特别是当你打开多个VI或项目时。这个问题可能影响程序的执行流程&#xff0c;导致不同实例之间的数据同步或…...

Hslcommunication通讯调用

Vs2022选择配置属性选择高级语言运行时(/clr);符合模式选择否;引用选择Hslcommunication.dll和HslCppExtension.dll; Demo #include <iostream> using namespace HslCommunication; using namespace HslCommunication::Core::Net; using namespace HslCommunication::Mo…...

渐进式 Web 应用程序:新的 FE 系统

在企业环境中&#xff0c;我们通常认为稳定的互联网连接是理所当然的。然而&#xff0c;现实世界的条件经常挑战这一假设&#xff0c;可能会中断关键业务运营。本文详细介绍了我们如何将传统的纯在线 ERP 系统转变为具有弹性、支持离线的解决方案的更可靠的系统。通过利用基于浏…...