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

蓝桥杯篇---按键长按与双击


文章目录

  • 前言
  • 1. 新增全局变量和宏定义
    • 解释
      • 1.1宏定义
        • KEY_EVENT_*
        • DEBOUNCE_TIME
        • HOLD_TIME
        • DOUBLE_TIME
        • MULTI_TIME
      • 1.2全局变量
        • Key_Val
        • Key_Old
        • Key_Down
        • Key_Up
        • sys_tick
        • key_event
        • key_pressed
        • key_press_start
        • key_last_release
        • click_cnt
  • 2. 定时器初始化(1ms中断)
    • 解释
      • 2.1定时器初始化
      • 2.2中断服务函数
  • 3. 按键扫描与状态机修改
    • 解释
      • 3.1ScanKey函数
      • 3.2Key_Loop函数
  • 4. 主函数使用示例
    • 解释
  • 5. 关键逻辑说明
    • 5.1消抖处理
    • 5.2长按检测
    • 5.3双击检测
    • 5.4连击检测
  • 6. 优化建议
    • 6.1矩阵键盘冲突
    • 6.2低功耗优化
    • 6.3事件调回


前言

本文简单介绍了一段代码,该代码是基于STC15F2K60S2单片机的按键检测程序,新增了长按、短按、双击、连击等功能,并采用状态机设计来适配原有的矩阵键盘扫描逻辑


1. 新增全局变量和宏定义

#include <STC15F2K60S2.H>// 新增按键事件类型定义
#define KEY_EVENT_NONE    0
#define KEY_EVENT_SHORT   1  // 短按/单击
#define KEY_EVENT_LONG    2  // 长按
#define KEY_EVENT_DOUBLE  3  // 双击
#define KEY_EVENT_MULTI   4  // 连击(如3次)// 时间阈值配置(单位:ms,需适配定时器频率)
#define DEBOUNCE_TIME   20   // 消抖时间
#define HOLD_TIME       1000 // 长按判定时间
#define DOUBLE_TIME     300  // 双击间隔
#define MULTI_TIME      500  // 连击间隔// 全局按键状态变量
unsigned char Key_Val = 0;    // 当前键值
unsigned char Key_Old = 0;    // 上一次键值
unsigned char Key_Down = 0;   // 按下瞬间
unsigned char Key_Up = 0;     // 释放瞬间volatile unsigned int sys_tick = 0;  // 系统时间戳(需定时器1ms中断更新)
unsigned char key_event = KEY_EVENT_NONE;  // 当前按键事件
unsigned char key_pressed = 0;        // 当前按下的键值
unsigned int key_press_start = 0;     // 按键按下开始时间
unsigned int key_last_release = 0;    // 按键最近释放时间
unsigned char click_cnt = 0;          // 连击次数

解释

1.1宏定义

KEY_EVENT_*

KEY_EVENT_*:定义了按键事件的类型,包括无事件、短按、长按、双击、连击

DEBOUNCE_TIME

DEBOUNCE_TIME:按键消抖时间,避免按键抖动误触发。

HOLD_TIME

HOLD_TIME:长按判定时间,超过该时间触发长按事件。

DOUBLE_TIME

DOUBLE_TIME:双击间隔时间,两次按下之间的时间小于该值则判定为双击。

MULTI_TIME

MULTI_TIME:连击间隔时间,多次按下之间的时间小于该值则判定为连击。

1.2全局变量

Key_Val

Key_Val:当前扫描到的键值

Key_Old

Key_Old:上一次扫描到的键值,用于检测按键状态变化。

Key_Down

Key_Down:按键按下瞬间的标志

Key_Up

Key_Up:按键释放瞬间的标志

sys_tick

sys_tick:系统时间戳,由定时器中断更新,用于时间相关的逻辑判断

key_event

key_event:当前检测到的按键事件

key_pressed

key_pressed:当前按下的键值。

key_press_start

key_press_start:按键按下的起始时间

key_last_release

key_last_release:按键最近一次释放的时间

click_cnt

click_cnt:连击次数计数器

2. 定时器初始化(1ms中断)

void Timer0_Init() {AUXR |= 0x80;       // 定时器0为1T模式TMOD &= 0xF0;       // 设置定时器模式TL0 = 0xCD;         // 1ms定时初值(11.0592MHz)TH0 = 0xD4;TF0 = 0;            // 清除标志TR0 = 1;            // 启动定时器ET0 = 1;            // 使能中断EA = 1;             // 全局中断使能
}// 定时器0中断服务函数
void timer0_isr() interrupt 1 {sys_tick++;         // 系统时间戳自增
}

解释

2.1定时器初始化

配置定时器0为1T模式(1个时钟周期计数一次),设置初值以实现1ms定时。

启动定时器并开启中断。

2.2中断服务函数

1ms进入一次中断,sys_tick自增,用于记录系统运行时间。

3. 按键扫描与状态机修改

// 原有扫描函数(返回键值1~19,0表示无按键)
unsigned char ScanKey() {unsigned char temp = 0;P44=0; P42=P35=P34=1;if(P33==0) temp=4;  if(P32==0) temp=5;if(P31==0) temp=6;  if(P30==0) temp=7;P42=0; P44=P35=P34=1;if(P33==0) temp=8;  if(P32==0) temp=9;if(P31==0) temp=10; if(P30==0) temp=11;P35=0; P44=P42=P34=1;if(P33==0) temp=12; if(P32==0) temp=13;if(P31==0) temp=14; if(P30==0) temp=15;P34=0; P44=P42=P35=1;if(P33==0) temp=16; if(P32==0) temp=17;if(P31==0) temp=18; if(P30==0) temp=19;return temp;
}// 按键处理主逻辑(循环调用)
void Key_Loop() {Key_Val = ScanKey();Key_Down = Key_Val & (Key_Old ^ Key_Val);  // 检测下降沿Key_Up = ~Key_Val & (Key_Old ^ Key_Val);   // 检测上升沿Key_Old = Key_Val;// 无按键时重置状态if (Key_Val == 0) {if (key_pressed != 0) {// 记录释放时间并计算连击if (sys_tick - key_last_release < MULTI_TIME) {click_cnt++;} else {click_cnt = 1;  // 超过连击间隔则重置}key_last_release = sys_tick;key_pressed = 0;}return;}// 处理按键按下if (Key_Down != 0) {key_pressed = Key_Val;          // 记录当前按键key_press_start = sys_tick;    // 记录按下时间click_cnt = 0;                 // 连击计数重置}// 处理长按检测if (key_pressed != 0 && (sys_tick - key_press_start > HOLD_TIME)) {key_event = KEY_EVENT_LONG;     // 触发长按事件key_pressed = 0;               // 长按后标记处理完成}// 处理按键释放if (Key_Up != 0 && key_pressed != 0) {// 短按判定(未达到长按时间)if (sys_tick - key_press_start < HOLD_TIME) {// 双击检测:在DOUBLE_TIME内检测第二次按下if (sys_tick - key_last_release < DOUBLE_TIME) {key_event = KEY_EVENT_DOUBLE;} else {key_event = KEY_EVENT_SHORT;}}}// 连击检测(需配合释放后的时间窗口)if (click_cnt >= 2) {key_event = KEY_EVENT_MULTI;click_cnt = 0;  // 连击后重置}
}

解释

3.1ScanKey函数

扫描矩阵键盘,返回当前按下的键值**(1~19)**,0表示无按键。

3.2Key_Loop函数

  1. 检测按键按下和释放的边沿(Key_Down和Key_Up)。

  2. 无按键时,记录释放时间并计算连击次数

  3. 按键按下时,记录按下的键值和时间

  4. 长按检测:按下时间超过HOLD_TIME则触发长按事件

  5. 短按和双击检测:在释放时判断按下时间是否小于HOLD_TIME,并结合DOUBLE_TIME判断是否为双击

  6. 连击检测:在MULTI_TIME内多次按下同一键则触发连击事件。

4. 主函数使用示例

void main() {Timer0_Init();      // 初始化定时器while (1) {Key_Loop();     // 循环调用按键检测// 处理按键事件switch (key_event) {case KEY_EVENT_SHORT:printf("Key %d: 短按\r\n", key_pressed);key_event = KEY_EVENT_NONE;break;case KEY_EVENT_LONG:printf("Key %d: 长按\r\n", key_pressed);key_event = KEY_EVENT_NONE;break;case KEY_EVENT_DOUBLE:printf("Key %d: 双击\r\n", key_pressed);key_event = KEY_EVENT_NONE;break;case KEY_EVENT_MULTI:printf("Key %d: 连击%d次\r\n", key_pressed, click_cnt + 1);key_event = KEY_EVENT_NONE;break;}}
}

解释

  1. 初始化定时器并进入主循环。

  2. 调用Key_Loop检测按键事件。

  3. 根据key_event的值处理不同的按键事件,并输出相应的信息。

5. 关键逻辑说明

5.1消抖处理

消抖处理:通过Key_Down和Key_Up检测边沿,隐式消抖。

5.2长按检测

长按检测:按下时间超过HOLD_TIME触发长按事件

5.3双击检测

双击检测:在DOUBLE_TIME内检测第二次按下

5.4连击检测

连击检测:在MULTI_TIME检测多次按下

6. 优化建议

6.1矩阵键盘冲突

矩阵键盘冲突:改进ScanKey函数以支持多键同时按下

6.2低功耗优化

低功耗优化:在空闲时进入休眠模式,通过按键唤醒。

6.3事件调回

事件回调:通过函数指针绑定事件处理函数,提高代码灵活性。


相关文章:

蓝桥杯篇---按键长按与双击

文章目录 前言1. 新增全局变量和宏定义解释1.1宏定义KEY_EVENT_*DEBOUNCE_TIMEHOLD_TIMEDOUBLE_TIMEMULTI_TIME 1.2全局变量Key_ValKey_OldKey_DownKey_Upsys_tickkey_eventkey_pressedkey_press_startkey_last_releaseclick_cnt 2. 定时器初始化&#xff08;1ms中断&#xff0…...

created在vue3 script setup中的写法

在 Vue 2 里&#xff0c;created 是一个生命周期钩子函数&#xff0c;会在实例已经创建完成之后被调用&#xff0c;主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里&#xff0c;不再有像 Vue 2 那样直…...

基于springboot的房屋租赁系统(008)

摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符…...

Linux上的`i2c-tools`工具集的编译构建和安装

源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接&#xff1a; https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…...

java项目之基于ssm的社区流浪动物救助领养系统

项目简介 社区流浪动物救助领养系统实现了以下功能&#xff1a; 本社区流浪动物救助领养系统分为管理员还有用户两个权限&#xff0c;管理员可以管理用户的基本信息内容&#xff0c;可以管理回访信息以及回访的租赁信息&#xff0c;能够与用户进行相互交流等操作&#xff0c;…...

网络空间安全(34)安全防御体系

前言 安全防御体系是一个多层次、多维度的系统&#xff0c;旨在保护组织或个人的信息资产免受各种网络攻击和威胁。 一、技术层面 网络边界防御 防火墙&#xff1a;部署在网络边界&#xff0c;通过设定规则允许或阻止特定流量的进出&#xff0c;保护内部网络不受外部攻击。入侵…...

《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》

一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统&#xff0c;由一个服务器和多个客户端组成。客户端可以连接到服务器&#xff0c;向服务器发送消息&#xff0c;服务器接收到消息后将其转发给其他客户端&#xff0c;实现多人之间的实时聊天。系统使用 C 语言编写&#x…...

知识蒸馏:让大模型“瘦身”的魔法

知识蒸馏&#xff1a;让大模型“瘦身”的魔法 什么是蒸馏模型&#xff1f;AI界的“知识浓缩术”核心定义传统训练 vs 知识蒸馏关键优势 DeepSeek的蒸馏“三步魔法”骨架提取——搭建“迷你版大脑”知识灌注——模仿教师的“思考过程”微调优化——针对场景“查漏补缺” DeepSee…...

MySQL数据库精研之旅第一期:开启数据管理新旅程

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、数据库简介 1.1. 数据库的概念 1.2. 数据库和数据结构的关系 1.3. 主流数据库 1.3.1. 关系型数据库 1.3.2. 非关系型数据库 1.4. 关系型数据库的概念 二、MySQL配置 2.1. mysqld服务端程序 …...

Linux复习——基础IO,认识文件描述符、软硬件链接

1.复习C文件接口 1.1 fopen FILE *fopen(const char *path, const char *mode); path&#xff1a;带路径的文件名称(待打开的文件) mode&#xff1a; r&#xff1a;以可读方式打开&#xff0c;不可写&#xff0c;文件不存在&#xff0c;则报错 r&…...

【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计

欢迎来到Java集合框架系列的第一篇文章&#xff01;&#x1f339; 本系列文章将以通俗易懂的语言&#xff0c;结合实际开发经验&#xff0c;带您深入理解Java集合框架的设计智慧。&#x1f339; 若文章中有任何不准确或需要改进的地方&#xff0c;欢迎大家指出&#xff0c;让我…...

Prometheus使用

介绍&#xff1a;Prometheus 是一个开源的 监控与告警系统&#xff0c;主要用于采集和存储时间序列数据&#xff08;Time Series Data&#xff09; Prometheus的自定义查询语言PromQL Metric类型 为了能够帮助用户理解和区分这些不同监控指标之间的差异&#xff0c;Prometheu…...

Java学习打卡-Day19-Set、HashSet、LinkedHashSet

Set 接口 无序&#xff08;添加和取出顺序不一致&#xff09;&#xff08;但取出顺序固定&#xff09;。没有索引。不允许重复&#xff0c;所以最多一个null。遍历方式 迭代器增强for循环不能使用普通for循环索引方式。 HashSet 实现了Set接口&#xff0c;具有相应特征。底…...

冯・诺依曼架构深度解析

一、历史溯源&#xff1a;计算机科学的革命性突破 1.1 前冯・诺依曼时代 在 1940 年代之前&#xff0c;计算机领域呈现 "百家争鸣" 的格局&#xff1a; 哈佛 Mark I&#xff08;1944&#xff09;&#xff1a;采用分离的指令存储与数据存储ENIAC&#xff08;1946&a…...

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段&#xff1a;觉得自己会的东西不少&#xff0c;但又不知道下一步该干啥。会点C语言&#xff0c;能烧录程序&#xff0c;能点亮LED&#xff0c;玩转按键&#xff0c;搞定串口等等&#xff0c;能用开发板做点小玩意儿&#xff0c;但面对…...

Nginx 日志格式

默认日志格式配置 log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for";该格式记录了客户端IP、用户、时间、请求、状态…...

Spring Boot 整合 Elasticsearch 实践:从入门到上手

引言 Elasticsearch 是一个开源的分布式搜索引擎&#xff0c;广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程&#xff0c;在 Spring Boot 项目中整合 Elasticsearch&#xff0c;轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先&#xff…...

STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构

目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层&#xff08;Perception Layer&#xff09; 2. 网络层&#xff08;Network Layer&#xff09; …...

SARAD 解读

出处&#xff1a;NIPS 2024 代码链接&#xff1a;https://github.com/daidahao/SARAD/ 一 文章动机 ① 时间建模&#xff08;Temporal Modeling&#xff09;的局限性&#xff1a; a. 时间维度上 感受野极小&#xff1b;b. 变量间时间戳错位 (时间建模、空间建模不统一) →…...

【愚公系列】《高效使用DeepSeek》017-知识点思维导图生成

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

【linux】scp和rsync

scp 和 rsync 都是 Linux 系统中用于文件传输的命令行工具&#xff0c;它们都可以通过网络在本地和远程主机之间传输文件。 scp 命令 定义 scp 是 “secure copy” 的缩写&#xff0c;它是一个基于 SSH 协议的文件传输工具&#xff0c;用于在本地和远程主机之间安全地复制文…...

软件需求分类、需求获取(高软46)

系列文章目录 软件需求分类&#xff0c;需求获取 文章目录 系列文章目录前言一、软件需求二、获取需求三、真题总结 前言 本节讲明软件需求分类、需求获取的相关知识。 一、软件需求 二、获取需求 三、真题 总结 就是高软笔记&#xff0c;大佬请略过&#xff01;...

蓝桥杯单片机之AT24C02(基于自己对AT24C02的学习和理解)

一、先用抽象法说明原理&#xff0c;让原理变得简单易懂&#xff1a; 1、向AT24C02写入数据&#xff1a; 有个关系户&#xff0c;他想安排自己的儿子进某个大厦里某个楼层的公司&#xff0c;那么他就要先找到这个公司的地址&#xff0c;然后再找到该公司是第几楼&#xff0c;最…...

【Qt】Qt + Modbus 服务端学习笔记

《Qt Modbus 服务端学习笔记》 1.因为项目的需要&#xff0c;要写一个modbus通信&#xff0c;csdn上感觉有些回答&#xff0c;代码是人工智能生成的&#xff0c;有些细节不对。我这个经过实测&#xff0c;是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…...

抖音用户视频批量下载工具开发全解析

一、逆向工程原理剖析 1.1 抖音Web端防护体系 抖音采用五层防御机制保护数据接口: graph LRA[浏览器指纹检测] --> B[请求参数签名]B --> C[Cookie动态验证]C --> D[请求频率限制]D --> E[IP信誉评级] 1.2 核心参数解密 参数名称作用原理生成方式有效期x-bogu…...

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…...

清晰易懂的 Swift 安装与配置教程

初学者也能看懂的 Swift 安装与配置教程 本教程将手把手教你如何在 macOS 系统上安装 Swift&#xff0c;配置依赖包缓存位置&#xff0c;并指出新手容易踩坑的细节。即使你是零基础小白&#xff0c;也能快速上手&#xff01; 一、安装 Swift&#xff08;macOS 环境&#xff09…...

Post-Training Quantization, PTQ

Post-Training Quantization&#xff08;PTQ&#xff09; 是 模型训练完成后&#xff0c;对其参数&#xff08;权重 & 激活值&#xff09;进行量化 的方法&#xff0c;目的是 减少存储占用 & 提高推理速度&#xff0c;同时尽可能保持模型精度。 相比于 量化感知训练&a…...

linux Redhat9.5采用DNS主从实现跨网段解析

文章目录 主从服务器DNS实现跨网段解析一、服务器规划二、主服务器配置1、安装bind2、修改主配置文件3、配置区域配置文件4、配置正向解析文件5、配置反向解析文件6、检查并启动服务 三、从服务器配置1、安装bind2、配置主配置文件3、修改区域配置文件4、检查并启动服务 四、路…...

Python个人学习笔记(18):模块(异常处理、traceback、日志记录)

七、异常处理 语法错误不属于异常&#xff0c;处理的是程序运行时的一些意外情况 代码&#xff1a; a int(input(>>>&#xff1a;)) b int(input(>>>&#xff1a;)) print(a / b) # 在运行的时候由于数据不对&#xff0c;导致出错 # 此时程序会中断 prin…...

记一次MyBatis分页莫名其妙的失效,首次执行合适,后续执行分页失效且异常

代码几乎一样&#xff0c;为啥这个xml配置的就会出现莫名其妙的问题呢 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{propertymybatis_plus_first, modeI…...

Claude是什么?适合哪些场景?

Claude 是由人工智能公司 Anthropic 开发的一款 大型语言模型&#xff08;LLM&#xff09;&#xff0c;旨在通过自然语言交互帮助用户完成复杂任务。以下是关于 Claude 的核心信息&#xff1a; 1. 核心定位 • 安全可靠&#xff1a; 采用 Constitutional AI&#xff08;宪法AI…...

基于yolov11的持刀检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的持刀检测系统 随着公共安全问题的日益突出&#xff0c;特别是在公共场所如机场、车站、学校等地&#xff0c;持刀等危险行为频发&#xff0c;对人们的生命财产安全构成严重威胁。传统的监控手段往往依赖于人工观察&#xff0c;但这种方式不仅效率低…...

openEuler24.03 LTS下安装Hive3

目录 前提条件 安装MySQL 卸载原有mysql及mariadb 下载mysql 解压mysql 安装mysql 启动mysql服务 开机自启动mysql服务 登录mysql 修改mysql密码 远程连接mysql 安装Hive 下载安装包 解压 设置环境变量 解决日志包冲突 将mysql驱动拷贝到lib目录 配置Hive 创…...

13-动态规划-最长公共子序列

题目 来源 24. 最长公共子序列 思路 不想打字&#xff0c;援引自最长公共子序列 (LCS) 详解例题模板&#xff08;全&#xff09;-CSDN博客 图示举例&#xff1a; 其余详见代码 代码 #include<bits/stdc.h> using namespace std; const int N110; int f[N][N]; int m…...

golang 生成单元测试报告

在 Go 语言中&#xff0c;你可以使用 go test 生成单元测试报告。以下是几种方法&#xff1a; 1. 生成基本测试报告&#xff08;文本格式&#xff09; go test -v ./... > test_report.txt-v&#xff1a;显示详细的测试信息./...&#xff1a;递归测试所有子目录> test_r…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

设备健康管理系统是什么,设备健康管理系统多少钱?

想象一下&#xff0c;你的汽车在仪表盘报警前 3 天&#xff0c;手机就收到 “发动机轴承剩余寿命 1500 公里” 的提醒 —— 这就是 ** 设备健康管理系统&#xff08;EHM&#xff09;** 的日常。在制造业&#xff0c;设备故障每年造成全球 3.4 万亿美元损失&#xff0c;而 80% 的…...

设计模式(创建型)-抽象工厂模式

摘要 在软件开发的复杂世界中,设计模式作为解决常见问题的最佳实践方案,一直扮演着至关重要的角色。抽象工厂模式,作为一种强大的创建型设计模式,在处理创建一系列或相关依赖对象的场景时,展现出了独特的优势和灵活性。它通过提供一个创建对象的接口,让开发者能够在不指定…...

docker 部署elk 设置账号密码

1. 先把 kibana 停掉 2.进入es 容器 docker exec -it 75895a078cbc /bin/bash 找到 bin 目录 执行 ./elasticsearch-setup-passwords interactive 全部设置一样的密码 ,不一样自己要记住&#xff0c;设置成功会输出如下内容 Changed password for user [apm_system] Chang…...

<table>内有两行<tr>,第一行设定高度为60,剩余第二行,和右侧元素高度补齐。

实现 <table> 内第一行高度设定为 60px&#xff0c;第二行和右侧元素高度补齐的效果&#xff0c;你可以通过 CSS 样式来控制。示例&#xff1a; 为第一行 <tr> 设置固定高度 60px。对于右侧元素&#xff0c;假设它是一个 <div> 或者其他容器&#xff0c;将其…...

QT5.15.2加载pdf为QGraphicsScene的背景

5.15.2使用pdf 必须要安装QT源码&#xff0c;可以看到编译器lib目录已经有pdf相关的lib文件&#xff0c;d是debug 1.找到源码目录&#xff1a;D:\soft\QT\5.15.2\Src\qtwebengine\include 复制这两个文件夹到编译器的包含目录中:D:\soft\QT\5.15.2\msvc2019_64\include 2.找…...

常见的工具和技术

Mockito Mockito 是一个流行的 Java Mocking 框架&#xff0c;用于创建和配置模拟对象&#xff08;Mock Objects&#xff09;&#xff0c;以便在单元测试中模拟复杂依赖关系的行为 使用场景&#xff1a;单元测试、隔离测试 EclipseEclipse 是一个开源的集成开发环境&#xff08…...

Linux怎样源码安装Nginx

1. 安装必要的依赖 在编译 Nginx 之前&#xff0c;你需要安装一些必要的依赖包&#xff0c;像编译工具和库文件等。以 CentOS 系统为例&#xff0c;可借助yum命令来安装&#xff1a; bash sudo yum install -y gcc pcre-devel zlib-devel openssl-devel要是使用的是 Ubuntu 系…...

汇编指令(20250319)

SOC常用总线 AHB&#xff08;Advanced High-performance Bus&#xff09;&#xff1a;先进高性能总线&#xff0c;连接RAM&#xff0c;ROM等高速设备APB&#xff08;Advanced Peripheral Bus&#xff09;&#xff1a;先进外设总线&#xff0c;连接外设等一些低速设备 CISC和R…...

PlainUSR|LIA: 追求更快的卷积网络实现高效的超分辨率重建

PlainUSR|LIA: 追求更快的卷积网络实现高效的超分辨率重建 引言 在深度学习领域&#xff0c;图像处理始终是一个热门话题。而超分辨率重建&#xff08;Super-Resolution Reconstruction, SR&#xff09;作为其中一个重要的研究方向&#xff0c;旨在通过算法将低分辨率图像恢复…...

神经网络基础之正则化

引言&#xff1a;正则化 &#xff08;Regularization&#xff09; 是机器学习中一种用于防止模型过拟合技术。核心思想是通过在模型损失函数中添加一个惩罚项 &#xff08;Penalty Term&#xff09;&#xff0c;对模型的复杂度进行约束&#xff0c;从而提升模型在新数据上的泛化…...

JAVA序列化与反序列化URLDNS链CC1链

1、序列化的实现 java序列化的是对象属性的&#xff0c;只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列。&#xff08;不是则会抛出异常&#xff09;&#xff0c;静态成员变量是属于类的&#xff0c;所以静态成员变量是不能被序列化的&#x…...

孤儿进程和僵尸进程

本文讲述了什么是孤儿进程和僵尸进程&#xff0c;会带来怎样的问题以及如何处理 一、孤儿进程 1&#xff09;什么是孤儿进程 孤儿进程&#xff0c;顾名思义&#xff0c;就是父进程提前终止&#xff0c;但是子进程还在运行中&#xff0c;父进程无法对子进程进行监管&#…...

用ASCII字符转化图片

代码 from PIL import Image# 定义 ASCII 字符集&#xff0c;从最暗到最亮 ASCII_CHARS "%#*-:. "def resize_image(image, new_width100):width, height image.sizeratio height / widthnew_height int(new_width * ratio)resized_image image.resize((new_wi…...