51单片机实验四:键盘检测原理及应用实现
目录
一、实验环境与实验器材
二、实验内容及实验步骤
1.独立键盘检测
2.独立键盘(简易版本)
3.矩阵键盘检测
4.矩阵键盘(简单版,单数码管):
一、实验环境与实验器材
环境:Keli,STC-ISP烧写软件,Proteus.
器材:TX-1C单片机(STC89C52RC)、电脑。
图1.1 工具
二、实验内容及实验步骤
1.独立键盘检测
用数码管的前两位显示一个十进制数,变化范围为00~59,开始时显示00,每按下S2一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次;数值归零;按下S5一次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止自动加1。
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6; // 申明U1锁存器的锁存端
sbit wela=P2^7; // 申明U2锁存器的锁存端
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint);uchar numt0,num;void display(uchar numdis) // 显示子函数
{uchar shi,ge; // 分离两个分别要显示的数shi=numdis/10;ge=numdis%10;dula=1;P0=table[shi]; // 送十位选段数据dula=0;P0=0xff; // 送位选数据前关闭所有显示,防止打开位选锁存时wela=1; // 原来段选数据通过位选锁存器造成混乱P0=0xfe;wela=0;delayms(100); // 延时dula=1;P0=table[ge]; // 送个位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(100);
}void delayms(uint xms)
{uint i,j;for(i=xms;i>0;i--) // i=xms即延时约xms毫秒for(j=110;j>0;j--);
}void init() // 初始化函数
{TMOD=0x01; // 设置定时器0为工作方式1(0000 0001)TH0=(65536-45872)/256; // 初装值50ms一次中断TL0=(65536-45872)%256;EA=1; // 开总中断ET0=1; // 开定时器0中断
}void keyscan()
{if(key1==0){delayms(10);if(key1==0){num++;if(num==60) // 当到60时重新归0num=0;while(!key1); // 等待按键释放}}if(key2==0){delayms(10);if(key2==0){if(num==0) // 当到0时重新归60num=60;num--;while(!key2); }}if(key3==0){delayms(10);if(key3==0){num=0; // 清0while(!key3);}}if(key4==0){delayms(10);if(key4==0){while(!key4)TR0=~TR0; // 停止或启动定时器0}}
}void main()
{init(); // 初始化函数while(1){keyscan();display(num);}
}void T0_time() interrupt 1
{TH0=(65536-45872)/256; // 重装初值TL0=(65536-45872)%256;numt0++;if(numt0==20) // 如果到了20次,说明1秒时间到{numt0=0; // 然后把num清0重新再计20次num++;if(num==60)num=0; }
}
图2.1.2 烧录
图2.1.3实体按键和数码管初始显示
图2.1.4 实体按键功能说明
Proteus因为延时原因,数码管第一位会闪。(截图不显示)按键从上到下依次为S1,S2,S3,S4,S5
图2.1.1 proteus仿真图
仿真视频:
独立键盘检测
2.独立键盘(简易版本)
现象:每按一次键盘数码管数值加1.
代码:
#include "reg52.h"
sbit key0=P1^0;
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴0-9
//unsigned char str[]={0x76,0x79,0x38,0x38,0x3F}; // HELLO
//unsigned char wei[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
unsigned char num=0,flag=0;void delay(int n)
{int i=0,j=0;for (i=0;j<120;j++){for (j=0;j<120;j++);}
}void seg()
{P2=s[num];if(num==10){num=0;}
}/*void key()
{if(key0==0){delay(200);if(key0==0){num++;}}
}*/
void key()
{if(key0==0 && flag==0){flag=1;}if(flag==1 && key0==1){num++;flag=0;}
}void main()
{while(1){key();seg();}
}
图2.2.1 独立键盘简易仿真图
仿真视频:
独立键盘简易仿真
3.矩阵键盘检测
实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0~F,6个数码管同时静态显示。
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; // 申明U1锁存器的锁存端
sbit wela=P2^7; // 申明U2锁存器的锁存端
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint xms)
{uint i,j;for(i=xms;i>0;i--) //i=xms即延时约xms毫秒for(j=110;j>0;j--);
}void display(uchar num)
{P0=table[num]; //显示函数只送段选数据dula=1;dula=0;
}void matrixkeyscan()
{uchar temp,key;P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0) //等待按键释放{temp=P3;temp=temp&0xf0;}display(key); // 显示}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delayms(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=12;break;case 0xd7:key=13;break;case 0xb7:key=14;break;case 0x77:key=15;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}display(key);}}
}void main()
{P0=0; //关闭所有数码管段选dula=1;dula=0;P0=0xc0; // 位选中所有数码管wela=1;wela=0;while(1){matrixkeyscan(); //不停调用键盘扫描程序}
}
图2.3.1 上电现象(实体)
图2.3.2 按第一个按钮现象(实体)
图2.3.3 最后一个按钮现象(实体)
Proteus仿真:
图2.3.4 矩阵键盘仿真图
仿真视频:
矩阵键盘
4.矩阵键盘(简单版,单数码管):
图2.4.1 简易版矩阵键盘仿真图
#include "reg52.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴0-9
unsigned char num=99;void delay(unsigned int n)
{unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}void key_scan()
{unsigned char temp0=0,temp1=0,temp=0;P1=0xf0;if(P1!=0xf0) //检测按键是否被按下{delay(20);temp0=P1;P1=0x0f;if(P1!=0x0f);{temp1=P1;}}temp=temp0+temp1;if(temp==0xEE){num=0;}if(temp==0xED){num=1;}if(temp==0xEB){num=2;}if(temp==0xE7){num=3;}if(temp==0xDE){num=4;}if(temp==0xDD){num=5;}if(temp==0xDB){num=6;}if(temp==0xD7){num=7;}if(temp==0xBE){num=8;}if(temp==0xBD){num=9;}if(temp==0xBB){num=10;}if(temp==0xB7){num=11;}if(temp==0x7E){num=12;}if(temp==0x7D){num=13;}if(temp==0x7B){num=14;}if(temp==0x77){num=15;}
}void display()
{P2=s[num];
}void main()
{while(1){key_scan();display();}
}
这个代码冗余很高,if判断很多,明白逻辑即可。(仿真启动时间较长)
代码解释
在代码中,
temp
的值是通过将temp0
和temp1
相加得到的。具体来说:
temp0
的获取:
- 将
P1
端口的高 4 位设置为高电平(P1 = 0xF0
)。- 如果有按键按下,
P1
的值会改变,此时读取P1
的值并存储到temp0
中。
temp1
的获取:
- 将
P1
端口的低 4 位设置为高电平(P1 = 0x0F
)。- 再次读取
P1
的值并存储到temp1
中。
temp
的计算:
temp = temp0 + temp1
。按键矩阵的常见设计
在按键矩阵中,通常会有 4 行和 4 列,共 16 个按键。每个按键的位置可以通过行和列的交叉点来确定。假设按键矩阵的设计如下:
- 行:
P1.4
到P1.7
(高 4 位)- 列:
P1.0
到P1.3
(低 4 位)当某个按键被按下时,
P1
的值会反映出行和列的状态。
按键位置 | temp0 (高 4 位) | temp1 (低 4 位) | temp = temp0 + temp1 |
---|---|---|---|
第 1 行第 1 列 | 0xE0 | 0x0E | 0xEE |
第 1 行第 2 列 | 0xE0 | 0x0D | 0xED |
第 1 行第 3 列 | 0xE0 | 0x0B | 0xEB |
第 1 行第 4 列 | 0xE0 | 0x07 | 0xE7 |
第 2 行第 1 列 | 0xD0 | 0x0E | 0xDE |
第 2 行第 2 列 | 0xD0 | 0x0D | 0xDD |
第 2 行第 3 列 | 0xD0 | 0x0B | 0xDB |
第 2 行第 4 列 | 0xD0 | 0x07 | 0xD7 |
第 3 行第 1 列 | 0xB0 | 0x0E | 0xBE |
第 3 行第 2 列 | 0xB0 | 0x0D | 0xBD |
第 3 行第 3 列 | 0xB0 | 0x0B | 0xBB |
第 3 行第 4 列 | 0xB0 | 0x07 | 0xB7 |
第 4 行第 1 列 | 0x70 | 0x0E | 0x7E |
第 4 行第 2 列 | 0x70 | 0x0D | 0x7D |
第 4 行第 3 列 | 0x70 | 0x0B | 0x7B |
第 4 行第 4 列 | 0x70 | 0x07 | 0x77 |
表2.4.1 temp值计算
仿真视频:
矩阵键盘(简易版)
相关文章:
51单片机实验四:键盘检测原理及应用实现
目录 一、实验环境与实验器材 二、实验内容及实验步骤 1.独立键盘检测 2.独立键盘(简易版本) 3.矩阵键盘检测 4.矩阵键盘(简单版,单数码管): 一、实验环境与实验器材 环境:Keli,…...
GN ninja 工程化构建例程
文章目录 1. 前言✨2. 工程实例🚩2.1 工程目录结构2.2 工程顶层.gn文件2.3 工具链配置.gn文件2.4 编译配置.gn文件2.5 编译目标配置.gn文件2.6 工程接口文件2.7 动态库编译.gn文件2.8 动态库源文件2.9 静态库编译.gn文件2.10 静态库源文件2.11 主程序编译.gn文件2.12 主程序源…...
STC定时器频率占空比程序
// // 一、宏定义区 // #include <STC15.H> //头文件 #include <intrins.h> //库函数文件 #define FOSC 12000000L //IRC频率 typedef …...
观察者 ➜ 事件总线:一路走来的碎碎念
写给未来的自己:每次手敲事件模型都要 Google,干脆把思路和踩坑一次性记清楚。文章很长,都是唠叨,目的是让自己看两眼就能把设计理由找回来。 目录 为什么我要折腾事件模型?V0 ─ 单一事件的观察者模式V1 ─ 多事件同步总线(类型拆分)V2 ─ 订阅者优先级(链式调用可控)…...
AOP基本概念
上述语句解释感觉太过玄妙不似常人能够听懂,所以结合自己理解,给自己留点备注: 首先 目标对象: 就是这要对哪个对象进行代理,因为AOP是面向切面编程,在OOP的基础上再次解耦合,这个过程需要提…...
不确定与非单调推理的概率方法
前文我们学习了“不确定与非单调推理的基本概念”,了解了不确定性推理是人工智能领域中处理不完整、不精确或模糊信息的推理方法,其核心是在前提条件或推理规则存在不确定性时,通过某种数学或逻辑机制推导出合理结论,并对结论的可靠性进行量化。不确定与非单调推理的基本概…...
device_fingerprint、device_id、hmac生成
文章目录 1. 写在前面2. 设备信息3. 数美指纹 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...
centos下openjdk报:getVersion(FontConfiguration.java)异常,安装fontconfig无效问题的处理
TOC centos下openjdk报:getVersion(FontConfiguration.java)异常,安装fontconfig无效问题的处理 官网jdk包:Releases dragonwell-project/dragonwell8 背景: 为了适应国产化,使用东方通和国产jdk,从tomcat改为tongweb&#x…...
Banana Pi BPI-RV2 RISC-V 路由器开发板发售, 全球首款RISC-V路由器
Banana Pi BPI-RV2 开源路由器是矽昌通信和⾹蕉派开源社区(Banana Pi )合作设计, 联合打造全球首款RISC-V架构路由器开发板。 这是香蕉派开源社区与矽昌通信继BPI-Wifi5 低成本Wifi5 路由器合作之后的又一力作,为全球开发者与商业客户提供基于…...
自学新标日第十九课复习版本
第十九课 基本–》否定 うー>わ 单词 单词假名声调词义品物しなもの0物品,商品お皿おさら0盘子ごみごみ2垃圾初心者しょしんしゃ2初学者上級者じょうきゅうしゃ3熟练者高級こうきゅう0高级上級クラス5高级版英会話えいかいわ3英语会话コース1路线&a…...
网安加·百家讲坛 | 刘志诚:AI安全风险与未来展望
作者简介:刘志诚,乐信集团信息安全中心总监、OWASP广东区域负责人、网安加社区特聘专家。专注于企业数字化过程中网络空间安全风险治理,对大数据、人工智能、区块链等新技术在金融风险治理领域的应用,以及新技术带来的技术风险治理…...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)真题
青少年软件编程(Python)等级考试试卷(二级) 分数:100 题数:37 答案解析:https://blog.csdn.net/qq_33897084/article/details/147340870 一、单选题(共25题,共50分) 1. 老师要求大…...
@JsonView + 单一 DTO:如何实现多场景 JSON 字段动态渲染
JsonView 单一 DTO:如何实现多场景 JSON 字段动态渲染 JsonView 单一 DTO:如何实现多场景 JSON 字段动态渲染1、JsonView 注解产生的背景2、为了满足不同场景下返回对应的属性的做法有哪些?2.1 最快速的实现则是针对不同场景新建不同的 DTO…...
《深入探秘JavaScript原型链与继承机制:解锁前端编程的核心密码》
在JavaScript的奇妙世界里,原型链与继承机制犹如隐藏的宝藏,掌握它们,就如同拿到了开启高效编程大门的钥匙。对于前端开发者来说,这不仅是写出简洁、可维护代码的关键,更是深入理解JavaScript面向对象编程的基石。今天…...
Cursor 生成java测试用例
1. 安装cursor 站点:https://www.cursor.com/cn 安装后登录 2. 使用cursor 2.1 安装扩展: 组合键 CtrlShiftX,进入扩展程序页面,安装如下: Chinese:中文支持, 安装后 CtrlShiftP࿰…...
常见免杀框架的使用(3款)---【AniYaGUI1.2.0、AV_Evasion_Tool掩日、FoxBypass_V1.0】
一、AniYaGUI1.2.0免杀框架 环境:虚拟机Win10 、云服务器 工具:Xshell、CobaltStrike 项目下载地址: https://github.com/piiperxyz/AniYa 1. 安装Go语言环境 确保Win10虚拟机安装 Golang 且环境变量中包含 go 否则⽆法编译(注…...
PHP腾讯云人脸核身生成 SDK 接口调用步骤使用签名
参考腾讯云官方文档: 人脸核身 生成 SDK 接口调用步骤使用签名_腾讯云 前提条件:成功获取NonceTicket。 获取参考文档: PHP腾讯云人脸核身获取NONCE ticket-CSDN博客 function getTxFaceSign(){$appId ;$userId ;$version 1.0.0;$tic…...
LINUX418 加载YUM源 wireshark ping程序 解析
未找到挂载点 未连接 怪不得找不到 计划重启 sr0文件有了 挂载 删除 新建、修改配置文件 清空yum缓存 创建yum缓存 1.检查相关设置:虚拟机两个打钩 2.df -h查看光盘文件 3.挂载在/mnt mount -o ro /dev/sr0 /mnt 4.删除/etc/yum.repos.d 下的文件 5.新建local…...
解决Windows安全中心显示空白页面
1、电脑重装系统后,发现原本一些软件打不开了,电脑莫名认为有病毒,自动删除插件。附图。 2、第一反应是电脑防火墙的原因,默认威胁防护识别到了病毒软件,自动删除。在开始屏幕搜Windows安全中心,打开之后发…...
2.1 SQL server的安装以及一个数据表的创建
Microsoft SQL Server 2014 Express 是一个免费的、功能强大的可靠数据管理系统,为轻型网站和桌面应用程序提供丰富可靠的数据存储. 1. 下载软件并安装 https://www.microsoft.com/zh-cn/download/details.aspx?id42299 勾选SQLEXPRADV_X64_CHS.exe就够了。 可以更…...
楼梯上下检测数据集VOC+YOLO格式5462张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5462 标注数量(xml文件个数):5462 标注数量(txt文件个数):5462 …...
Excel提取图片并自动上传到文件服务器(OOS),获取文件链接
Excel提取图片并自动上传到接口 在实际项目中,我们可能经常会遇到需要批量从Excel文件(.xlsx)中提取图片并上传到特定接口的场景。今天,我就详细介绍一下如何使用Python实现这一功能,本文会手把手教你搭建一个完整的解…...
python有序列表
您的代码整体结构良好,但存在一些关键错误和优化点。以下是对代码的详细评价及改进建议:---### 主要问题1. **add方法中的链表断裂问题**- **问题描述**:当向链表中间插入节点时,未正确设置新节点的next,导致后续节点丢…...
Python(23)Python异常处理完全指南:从防御到调试的工程实践
目录 一、异常处理的核心价值与行业现状二、Python异常体系深度解析2.1 内置异常分类树2.2 七大高频异常处理方案2.2.1 文件操作异常链2.2.2 类型校验防御策略 三、企业级异常处理架构3.1 分布式系统异常封装3.2 上下文管理器资源保护 四、五大核心处理原则1. 精准捕获原则2.…...
LangChain4j-第一篇 |几分钟完成deepseek 在线集成
引言:AI 集成的Hello world 在AI迅猛增长的势头下,作为Java 程序员,也想学习开发AI 的应用产品。好在Java AI 生态也在逐步的完善,我们也可以使用java 语言开发属于自己的应用产品。LangChain4j通过声明式编程模型,将…...
C语言==》字符串断行
示例代码 #include <stdio.h>int main(void) {printf("Heres one way to print a ");printf("long string.\n");printf("Heres another way to print a \ long string.\n");printf("Heres the newest way to print a ""lo…...
springboot全局异常捕获处理
一、需求 实际项目中,经常抛出各种异常,不能直接抛出异常给前端,这样用户体验相当不好,用户看不懂你的Exception,对于一些sql异常,直接抛到页面上也不安全。所以有没有好的办法解决这些问题呢,当然有了&am…...
使用Jasypt对配置文件内容加密
使用Jasypt 配置文件内容加密 一、背景 在软件开发过程中,配置文件扮演着至关重要的角色,它存储着应用程序运行所需的各种参数和设置,例如数据库连接信息、API 密钥、第三方服务的认证信息等。然而,这些配置文件中的信息往往包含…...
opencv函数展示3
一、图像平滑(模糊) 线性滤波(速度快): 1.cv2.blur() 2.cv2.boxFilter() 3.cv2.GaussianBlur() 非线性滤波(速度慢但效果好): 4.cv2.medianBlur() 5.cv2.bilateralFilter() 二、锐…...
linux 4.14内核jffs2文件系统不自动释放空间的bug
前段时间在做spi-nor flash项目的时候,使用jffs2文件系统,发现在4.14内核下存在无法释放空间的bug,后来进行了修复,修复后功能正常,现将修复patch公开,供后来者学习: diff --git a/fs/jffs2/ac…...
华为仓颉智能体开发框架 Cangjie Magic深度解析
华为仓颉智能体开发框架 Cangjie Magic 深度解析 华为仓颉社区推出的 Cangjie Magic 是全球首个基于自研仓颉编程语言原生构建的 LLM Agent(大语言模型智能体) 开发框架,通过三大核心技术突破重构了智能体开发范式,为全场景智能化应用开发提供了全新工具链。以下从核心技术…...
Harmony5.0 设置应用全屏模式,隐藏导航栏和状态栏
Harmony5.0 设置应用全屏模式,隐藏导航栏和状态栏 在应用入口EntryAbility里添加 完整代码如下: import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from @kit.AbilityKit; import { hilog } from @kit.PerformanceAnalysisKit; import { window } fro…...
6. 实战(二):用Spring AI+OpenAI构建企业级智能客服
1、引言 前面几篇已经加深了我们对Spring Ai的体系结构,核心概念,以及也有初步集成实现了一个简单demo。今天,我们通过使用Spring AI框架与OpenAI API集成,构建一个功能完善的智能对话系统,加深我们对Spring AI从概念…...
线上健身预约小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的一款线上健身预约小程序源码,其主要功能包括搜索教练、课程、门店,以及轻松预约健身项目。 用户只需通过指尖轻点,即可快速查找并预约心仪的健身课程,无需繁琐的线下操作步骤。此外,…...
掌握MySQL:基本查询指令与技巧
🍑个人主页:Jupiter. 🚀 所属专栏:MySQL初阶学习笔记 欢迎大家点赞收藏评论😊 目录 表的增删查改1 CreateInsert1.1 单行数据 全列插入指定列插入1.2 多行数据插入 指定列插入1.3 插入否则更新 1.4 替换 2 Retrieve …...
本地生活服务信息分类信息系统
最近在找分类信息系统,看了很多市面上常见的分类信息系统: 1,私集分类信息系统 2,火鸟分类信息系统 3,觅分类信息系统 4,框分类信息系统 5,蚂蚁分类信息系统 发现很多分类信息系统,…...
视频编解码种类/技术/区别/优缺点汇总
视频编解码种类/技术/区别/优缺点汇总 按国家/机构划分的全球主要视频编码标准 (含优缺点)视频编解码涉及到的主要技术及通俗解释主流视频编码标准的实现方式 按国家/机构划分的全球主要视频编码标准 (含优缺点) 组织/国家分类标准名称 (常用名/别名)推出年份 (约)主要制定组织…...
【专题刷题】双指针(四):最接近的三数之和,接雨水
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
星露谷物语 7000+ 大型MOD整合包
衣服美化、家具美化、地图美化、人物肖像美化 全地图装修存档、人物美化、扩展包、环境美化、家具、动植物、通用前置包、新增NPC、功能、服装发饰妆 帽子发型农场小镇美化大型玩法拓展实用功能mod 动漫人物形象MOD 地点/动物/地图/功能/机械/家具/建筑/界面美化/扩展/农场/食谱…...
Vue自定义指令-防抖节流
Vue2版本 // 防抖 // <el-button v-debounce"[reset,click,300]" ></el-button> // <el-button v-debounce"[reset]" ></el-button> Vue.directive(debounce, { inserted: function (el, binding) { let [fn, event "cl…...
几款开源C#插件框架
有几个优秀的开源C#插件框架可供选择,它们提供了更完善的功能和更好的扩展性。以下是几个主流的开源C#插件框架: 1. MEF (Managed Extensibility Framework) 官方库:System.ComponentModel.Composition 特点: .NET官方提供的插件系统 基于特性(Attribute)的声明式组件注册…...
PHP使用pandoc把markdown文件转为word
文章目录 首先安装pandocPHP处理 服务器操作系统是Linux,centos 首先安装pandoc yum install -y pandoc安装完成后输入如下代码,检查安装是否成功 pandoc --versionPHP处理 我把markdown内容存到了数据库里,所以要从数据库读取内容。对内容…...
Vmware esxi 查看硬盘健康状况
起因 硬盘掉盘 - - 使用自带的命令esxcli 列出所有硬盘 esxcli storage core device list[rootlocalhost:~] esxcli storage core device list t10.NVMe____INTEL_MEMPEK1W016GAL____________________PHBT83660BYP016D____00000001Display Name: Local NVMe Disk (t10.NVMe…...
vue3中ref创建的变量使用`.value`(可以使用volar插件自动添加`.value)
1.安装volar插件 2.打开>设置 >扩展...
Docker中镜像、容器、仓库三者之间的关系
镜像: 定义: 镜像只是一个静态的、只读的模板,包括了创建容器所需的文件系统、依赖库、和配置。类似于操作系统之中的安装光盘或虚拟机的磁盘镜像。 特点和作用 特点: 分层存储:镜像由多个只读层(Layer)叠加而成,每一层代表一…...
【刷题Day19】HTTP的各个版本(浅)
HTTP 1.0 和 2.0 有什么区别? HTTP/1.0 版本主要增加以下几点: 增加了HEAD、POST等新方法。增加了响应状态码。引入了头部,即请求头和响应头在请求中加入了HTTP版本号引入了Content-Type,使得传输的数据不再限于文本。 HTTP/1.…...
浅析StringBuilder和StringBuffer的区别和联系?
区别 1. 线程安全性 StringBuilder:是非线程安全的。这意味着在多线程环境下,如果多个线程同时访问并修改同一个 StringBuilder 对象,可能会导致数据不一致或其他并发问题。不过,由于不需要考虑线程安全的额外开销,它…...
【数据融合实战手册·实战篇】二维赋能三维的5种高阶玩法:手把手教你用Mapmost打造智慧城市标杆案例
在当今数字化时代,二三维数据融合技术的重要性不言而喻。二三维数据融合通过整合二维数据的结构化优势与三维数据的直观性,打破了传统数据在表达和分析上的局限,为各行业提供了更全面、精准的数据分析手段。从智慧城市建设到工业智能制造&…...
Linux 系统编程 day5 进程管道
进程间通信(IPC) Linux环境下,进程地址空间相互独立,任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能互相访问,要交换数据必须通过内核,在内核中开辟一块缓冲区…...
【项目管理】第19章 配置与变更管理-- 知识点整理
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...