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

蓝桥杯备战——2.矩阵键盘

1.分析原理图

在这里插入图片描述
由上图可以看到若J5跳线帽接地,就S4~S7就可以当做四路独立按键,若接到P44,则就是4*4的矩阵键盘。

2.独立按键处理

相对传统的按键延时消抖方案,这里我采用更高效,更经典,更偏向产品级应用的状态机方案:

u8 Trg=0,Cont=0;
//独立按键
void Key_Scan()
{//状态机u8 ReadData = P3^0XFF;Trg = ReadData&(ReadData^Cont);	//记录短按键值Cont = ReadData;	//记录长按键值Key_Read();	//判断哪个按键按下
}
void Key_Read()
{if(Trg == 0x08){ //S4短按//按键任务区Set_Leds(1,1);//打开LED1}else if(Trg == 0x04){ //S5短按Set_Leds(2,1);	//打开LED2}else if(Trg == 0x02){	//S6短按Set_Leds(3,1);}else if(Trg == 0x01){ //S7短按Set_Leds(4,1);}else;
}

在应用的时候我们只需要知道三个状态对应的按键情况就行:
1.按键未按下或者松手时:Trg=0,Cont=0
2.按键刚按下,且Key_Scan只运行一遍时:Trg=键值,Cont=键值
3.按键持续按下状态时:Trg=0,Cont=键值
然后我们就能根据这三个状态来判断长按,短按,未按下,以及后续扩展双击等功能

扩展长按功能:由于按键持续按下状态Cont=键值,且Trg=0;因此我们可以在此条件基础上增加一个计时变量,当变量大于一定值则判定为长按。

u8 Trg=0,Cont=0,Num=0;
bit LONG_CLICKED=0;
//独立按键
void Key_Scan()	//20ms扫描一次
{//状态机u8 ReadData = P3^0XFF;Trg = ReadData&(ReadData^Cont);	//记录短按键值Cont = ReadData;	//记录长按键值if((Trg==0)&&(Cont!=0))	//记录按下时长{if(++Num==100) //满足长按2S{LONG_CLICKED=1;Num++;}}if((Trg==0)&&(Cont==0)) //松手或者未按下{//此处可扩展双击Num=0;}Key_Read();	//判断哪个按键按下
}void Key_Read()
{if(Trg == 0x08){ //S4短按//按键任务区Set_Leds(1,1);}else if(Trg == 0x04){ //S5短按Set_Leds(2,1);}else if(Trg == 0x02){	//S6短按Set_Leds(3,1);}else if(Trg == 0x01){ //S7短按Set_Leds(4,1);}else;if(!LONG_CLICKED) return;if(Cont==0x08){ //S4长按Set_Leds(1,0);}else if(Cont==0x04){ //S5长按Set_Leds(2,0);}else if(Cont==0x02){	//S6长按Set_Leds(3,0);}else if(Cont==0x01){ //S7长按Set_Leds(4,0);}else;LONG_CLICKED=0;
}

扩展双击功能:双击功能则是在松手状态下去判断长按功能的计时变量,小于一定值则可认为按键短按一次,此时再创建一个计时变量,当此计时变量大于一定值而小于一定值时按键再次按下则可判定为双击。好像往年都未曾考查过此功能,所以我就不写了,有兴趣的同学可以试试。

3.矩阵键盘

矩阵键盘的处理方案同独立按键,我就不细讲了,理解记忆即可

u8 Trg=0,Cont=0,Num=0;
bit LONG_CLICKED=0;
//矩阵键盘
void Keys_Scan()
{//状态机u8 ReadData,ColumnData;P3 = 0XF0;  //行低列高P42 = 1;P44 = 1;P36 = P42;	//IO映射,便于数据操作P37 = P44;ColumnData = P3; //暂存列数据P3 = 0X0F;	//行高列低P42 = 0;P44 = 0;ReadData=(P3 | ColumnData)^0XFF;Trg = ReadData&(ReadData^Cont);	//记录短按键值Cont = ReadData;	//记录长按键值if((Trg==0)&&(Cont!=0))	//记录按下时长{if(++Num==100) //满足长按2S{LONG_CLICKED=1;Num++;}}if((Trg==0)&&(Cont==0)) //松手或者未按下{//此处可扩展双击Num=0;}Keys_Read();	//判断哪个按键按下
}/****************矩阵键码表******************
S7-0X81  	S11-0X41 	S15-0X21 	S19-0X11   
S6-0X82		S10-0X42 	S14-0X22 	S18-0X12
S5-0X84		S9-0X44 	S13-0X24 	S17-0X14
S4-0X88		S8-0X48 	S12-0X28 	S16-0X18 
*******************************************/
void Keys_Read()
{	//用到再加,一一列举程序运行慢if(Trg == 0x81){ //S7按下Set_Leds(1,1);}else if(Trg == 0x48){	//S8按下Set_Leds(2,1);}else;if(!LONG_CLICKED) return;if(Cont == 0x81){ //S7长按Set_Leds(1,0);}else if(Cont == 0X48){ //S8按下Set_Leds(2,0);}else;LONG_CLICKED=0;
}

4.使用示例

#include "main.h"void System_Init(void);void Delay20ms()		//@12.000MHz
{unsigned char data i, j;i = 234;j = 115;do{while (--j);} while (--i);
}void main()
{System_Init();while(1){Delay20ms();//Key_Scan();Keys_Scan();}
}void System_Init()//系统上电初始化
{//先锁存蜂鸣器,继电器所在573输出低电平,防止上电乱叫P25=1;P26=0;P27=1; //74HC138-->Y5=0,else=1-->Y5C=1,else=0P0=0X00;	//ULN2003输入经过非门送入达林顿管,低电平有效P25=0;P26=0;P27=0;//锁存数据//关闭所有LED灯P25=0;P26=0;P27=1; //74HC138-->Y4=0,else=1-->Y4C=1,else=0P0=0XFF;P25=0;P26=0;P27=0;//锁存数据}

如果有用到长按功能,20ms运行一次最好是通过定时器去扫描实现,后续笔记中我会提供示例。

相关文章:

蓝桥杯备战——2.矩阵键盘

1.分析原理图 由上图可以看到若J5跳线帽接地,就S4~S7就可以当做四路独立按键,若接到P44,则就是4*4的矩阵键盘。 2.独立按键处理 相对传统的按键延时消抖方案,这里我采用更高效,更经典,更偏向产品级应用的…...

Docker部署思维导图工具SimpleMindMap并实现公网远程访问

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性,包含插件化架构、多种结构类型&…...

机器学习实验2——线性回归求解加州房价问题

文章目录 🧡🧡实验内容🧡🧡🧡🧡数据预处理🧡🧡代码缺失值处理特征探索相关性分析文本数据标签编码数值型数据标准化划分数据集 🧡🧡线性回归🧡&am…...

宝塔+nextcloud+docker+Onlyoffice 全开启https

折腾了我三天的经验分享 1.宝塔创建网站 nextcloud版本为28.0.1 php8.2 ,导入nextcloud绑定域名对应的证书 ,不用创建mysql 因为nextcloud 要求是mariadb:10.7 宝塔里没有,就用docker安装一个 端口设置为3307 将数据库文件映射出来/ww…...

呼吸机电机控制主控MCU方案

呼吸机是一种能代替、控制或改变人的正常生理呼吸,增加肺通气量,改善呼吸功能,减轻呼吸功消耗,节约心脏储备能力的装置。呼吸机连接一条管子到患者的嘴或鼻子,氧气量可以通过监视器加以控制。 基于灵动微控制器的呼吸…...

gitlab备份-迁移-升级方案9.2.7升级到15版本最佳实践

背景 了解官方提供的版本的升级方案 - GitLab 8: 8.11.Z 8.12.0 8.17.7 - GitLab 9: 9.0.13 9.5.10 9.2.7 - GitLab 10: 10.0.7 10.8.7 - GitLab 11: 11.0.6 11.11.8 - GitLab 12: 12.0.12 12.1.17 12.10.14 - GitLab 13: 13.0.14 13.1.11 13.8.8 13.12.15 - G…...

redis面试题合集-基础

前言 又来到每日的复习时刻,昨天我们学习了mysql相关基础知识,还有分布式数据库介绍(后续总结时再持续更新)。今日继续学习缓存杀器:redis redis基础面试题合集 什么是Redis? Redis是一个开源的、内存中…...

(Unity)C# 中的字符串格式化

前言 在软件开发中,理解和掌握字符串的格式化及调试技巧对于编写高效和可维护的代码至关重要。 字符串插值 ($ 符号) 在 C# 中,字符串插值是通过在字符串前加 $ 符号来实现的。这允许我们将变量、表达式或函数调用直接嵌入到字符串中。 string name &qu…...

【项目日记(五)】第二层: 中心缓存的具体实现(上)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:项目日记-高并发内存池⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你做项目   🔝🔝 开发环境: Visual Studio 2022 项目日…...

使用PSIM软件生成DSP28335流水灯程序

最近在学习DSP28335芯片,然后在使用PSIM仿真软件时发现这个仿真软件也支持28335芯片,于是就想学习下如何在PSIM软件中使用DSP28335芯片。在PSIM自带的官方示例中有使用DSP28335芯片的相关例子。 工程下载链接 https://download.csdn.net/download/qq_20…...

【iOS ARKit】人脸检测追踪基础

在计算机人工智能(Artificial Inteligence,AI)物体检测识别领域,最先研究的是人脸检测识别,目前技术发展最成熟的也是人脸检测识别。人脸检测识别已经广泛应用于安防、机场、车站、闸机、人流控制、安全支付等众多社会领域&#x…...

ES的一些名称和概念总结

概念 先看看ElasticSearch的整体架构: 一个 ES Index 在集群模式下,有多个 Node (节点)组成。每个节点就是 ES 的Instance (实例)。每个节点上会有多个 shard (分片), P1 P2 是主分片, R1 R2…...

Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析

2.3.3 集成 阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了,接下来我们就需要在案例当中集成oss对象存储服务,来存储和管理案例中上传的图片。 在新增员工的时候,上传员工的图像,而之所以需要上传员工的图像&…...

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台,在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因,调用树展示帮助你理解程序,支持 Go、Python、Ruby 语言。 Pyroscope 可以…...

【Git】windows系统安装git教程和配置

一、何为Git Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 二、git安装包 有2种版本,Git for Windows Setup和Git for Windows Portable(便携版)两个版本都可以。 三、Git for Windows Por…...

办公技巧:PPT制作技巧分享,值得收藏

目录 1、黑屏/白屏你用过么 2、图形组合替代动画刷 3、等距分布图形元素 4、快速统一字体 5、文本框也是可以改的 6、批量修改形状 7、搞定“怎么也选不中” 8、妙用CtrlD 9、图片阵列怎么做 10、临时放大某一区域 11、Word快速导入PPT 12、炫酷小人怎么做的&#…...

Google Chrome RCE漏洞 CVE-2020-6507 和 CVE-2024-0517 流程分析

本文深入研究了两个在 Google Chrome 的 V8 JavaScript 引擎中发现的漏洞,分别是 CVE-2020-6507 和 CVE-2024-0517。这两个漏洞都涉及 V8 引擎的堆损坏问题,允许远程代码执行。通过EXP HTML部分的内存操作、垃圾回收等流程方式实施利用攻击。 CVE-2020-…...

前端怎么监听手机键盘是否弹起

摘要: 开发移动端中,经常会遇到一些交互需要通过判断手机键盘是否被唤起来做的,说到判断手机键盘弹起和收起,应该都知道,安卓和ios判断手机键盘是否弹起的写法是有所不同的,下面讨论总结一下两端的区别以及…...

本地生活服务平台加盟前景与市场分析

随着短视频市场的的不断发展,人们的生活方式也在发生着巨大的变化。在这个数字化的时代,越来越多的创业者开始注重本地生活服务,这也为创业者提供了一个绝佳的商机。加盟本地生活服务平台,既可以抓住这波风口,又可以满…...

蓝桥杯备战——7.DS18B20温度传感器

1.分析原理图 通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。 2.查阅DS18B20使用手册 比赛的时候是会提供DS18B20单总线通讯协议的代码,但是没有提供读取温度数据的代码,所以还是需要我们去查看手册,我只把重要部分截下来了 …...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...