单片机学习笔记---矩阵键盘

news2024/9/30 15:24:02

目录

矩阵键盘的介绍

独立按键和矩阵按键的相同之处:

矩阵按键的扫描

代码演示

代码模块化移植

Keil自定义模板步骤:

代码编写


矩阵键盘就是开发板上右下角的这个模块

这一节的代码是基于上一节讲的LCD1602液晶显示屏驱动代码进行的

矩阵键盘的介绍

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式

采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

数码管扫描(输出扫描)

原理:显示第1位→显示第2位→显示第3位→……,然后快速循环这个过程,最终实现所有数码管同时显示的效果

矩阵键盘扫描(输入扫描)

原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果

以上两种扫描方式的共性:节省I/O口

独立按键和矩阵按键的相同之处:

独立按键是把按键公共的一端直接接地(低电平0),另一端接在IO口上

然后我们发现矩阵键盘和独立按键有个相似的地方就是如果只看一种一行,将这一整行接地的话,只看这一行两节IO口时,和独立按键的连接方式其实是一样的。

所以矩阵按键可以说是独立按键的复杂版,而独立按键是简单化的版本。

矩阵按键的扫描

比如想要判断第二行,那P16就给0,其他的给1

然后如果P13给0,就是S5按下了,如果P12给0,就是S6按下了,如果P11给0,就是S7按下了,如果P10给0,就是S6按下了。

其实这个和数码管的操作原理差不多,可以理解为上面4个引脚为使能,下面四个为读取,也可以说上面四个是位选,后四个事段选。

同理,如果想要判断第三行,和第四行,那就是P15和P14分别给0

就是这样一行一行读下来,就相当于把键盘扫描一遍。

要注意的一点是,这个P15口会连接到步进电机上,它相当于驱动器(增大输出电流能力的)

然后BZ就连接到蜂鸣器上

我们这个开发板上的蜂鸣器是无源蜂鸣器,所以这个BZ口以一定的频率高低变化,蜂鸣器就会响。

所以我们逐行扫描矩阵按键出现的问题就是蜂鸣器会自己响,并且关不掉,是引脚冲突造成的。

为了避免这个问题,我们可以采用逐列扫描。

怎么逐列扫描呢?

就是反过来,给下面四个IO口赋值,然后读取上面四个IO口

比如我们要判断第一行,就给P13口0,然后其余给1,然后如果P17口给0,就是S1按下了,如果P16给0,就是S5按下了,如果P15给0,就是S9按下了,如果P14给0,就是S13按下了。同理,其他列是一样的方式。

代码演示

接下来开始代码演示:

新建一个工程,写上框架

代码模块化移植

本节用到的所有程序源码文件可以到评论区自取!

我们把上一节用到的四个文件拷贝过来放进这节的工程文件夹中

这个过程就叫做模块化移植

然后我们把这四个文件添加进来

这样我们就可以引用这几个模块化的程序了。

然后我们需要再创建一个矩阵按键的.c和.h文件

这个时候发现只出现了MatrixKey的.c文件,.h文件我们要自己再添加

这样就能看到它的.h文件了

然后双击MatrixKey.h文件,写上防止重复定义的程序

如果嫌每次都写#ifndef这个框架很麻烦的话,可以把它做成一个templates模板

Keil自定义模板步骤:

左栏点击函数模板

可以看到一些已经被定义好的模板,我们也可以自己添加一个

点击右键-构建模板

点击新建模板

填写模板名称

填写模板内容

点击OK

这样就可以使用了

试一下,双击模板名称

框架就自动出来了!

把它补充完整:

.h文件的框架写好之后,可以写.c文件了

代码编写

根据原理图,我们在MatrixKey.c文件上编写一个程序扫描矩阵按键上的每一个按键,实现的效果是:当我们按下某个按键的时候,屏幕上就给我们提示所按下的按键的编号

写好之后在MatrixKey.h文件里面声明一下

然后我们在main.c上调用一下这些函数

编译无错误后看看效果:

按下S2键后松手后,的确是在第2行,第1列显示按键序号02

按下S3键后松手后,的确是在第2行,第1列显示按键序号03

我们可以添加这样一行代码,显示“MatrixKey:”

这样就可以自动在第一行显示“MatrixKey:”提示的按键序号在第二行显示

以上就是本节要实现的效果。

本节用到的所有程序源码文件可以到评论区自取!

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

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

相关文章

大数据学习之Flink算子、了解(Source)源算子(基础篇二)

Source源算子(基础篇二) 目录 Source源算子(基础篇二) 二、源算子(source) 1. 准备工作 2.从集合中读取数据 可以使用代码中的fromCollection()方法直接读取列表 也可以使用代码中的fromElements()方…

用户密码网络传输、保存方案分析

大华 1、大华19年的IPC,登录认证接口有两次,第一次请求算法所需数据,第二次传输摘要值,看样子是私有算法。 2、添加用户传输用户密码等敏感数据时,使用"RPAC-256"算法,应该是大华内部的私有算法。…

【从零到一】跑通CATR(二):在并行超算云上使用Cifar-10进行测试

从零到一配环境篇 由于今年要展开大量的编程工作,实验室在用的云计算平台是并行超算云,因此打算在寒假期间先熟悉一下超算云的环境,并从配套的文档和网上的教程开始,从零到一先跑通一个用于音视频分割的模型CATR。 以blog的形式…

docker-compose部署单机ES+Kibana

记录部署的操作步骤 准备工作编写docker-compose.yml启动服务验证部署结果 本次elasticsearch和kibana版本为8.2.2 使用环境:centos7.9 本次记录还包括:安装elasticsearch中文分词插件和拼音分词插件 准备工作 1、创建目录和填写配置 mkdir /home/es/s…

Vue3中的ref和shallowRef、reactive和shallowReactive

一:ref、reactive简介 ref和reactive是Vue3中定义响应式数据的一种方式。ref通常用来定义基础类型数据。reactive通常用来定义复杂类型数据。 二、shallowRef、shallowReactive简介 shallowRef和shallowReactive是Vue3中定义浅层次响应式数据的方式 三、Api使用对比…

【寒假每日一题·2024】AcWing 5307. 小苹果(补)

文章目录 一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 一、题目 1、原题链接 5307. 小苹果 2、题目描述 二、解题报告 1、思路分析 思路参考y总:y总讲解视频 (1)根据题目可以分析出&…

中小型企业机房设计部署方案

我对接参与过至少十几个分公司和总部的机房设计,结合十几年实际工作管理经验,归纳设计了以下这个机房方案,这个机房最大化利用了空间的同时,最大化设计了各方面的冗余。 机房包含了UPS隔离,噪音隔离,功率冗…

SpringBoot之分页查询的使用

背景 在业务中我们在前端总是需要展示数据,将后端得到的数据进行分页处理,通过pagehelper实现动态的分页查询,将查询页数和分页数通过前端发送到后端,后端使用pagehelper,底层是封装threadlocal得到页数和分页数并动态…

2. MySQL 多实例

重点: MySQL 的 三种安装方式:包安装,二进制安装,源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 2.5)通用 二进制格式安装 MySQL 2.5.1&#xff…

深入理解ZooKeeper分布式锁

第1章:引言 分布式系统,简单来说,就是由多台计算机通过网络相连,共同完成任务的系统。想象一下,咱们平时上网浏览网页、看视频,背后其实都是一大堆服务器在协同工作。这些服务器之间需要协调一致&#xff…

拥有大规模犯罪联盟链的网络攻击中心

VexTrio 是一个网络犯罪集团,其历史至少可以追溯到 2017 年,该集团涉嫌利用复杂的字典域生成算法 (DDGA) 进行邪恶活动。 他们的恶意活动包括诈骗、风险软件、间谍软件、广告软件、隐匿垃圾程序 (PUP) 和露骨内容,其中 2022 年发生的一次引…

【广度优先搜索】【拓扑排序】【C++算法】913. 猫和老鼠

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 广度优先搜索 拓扑排序 逆推 LeetCode913. 猫和老鼠 两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。 图的形式是:graph[a] 是一个列…

067:Vue2 + vite 开发环境的搭建(含源文件包,运行即可)

第067个 查看专栏目录: VUE 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 提供vue2的一些基本操作:安装、引用,模板使用,computed,watch&am…

【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 1. 综合实验的调试 1.1 实验…

YOLOv8改进 | Conv篇 | 结合Dual思想利用HetConv创新一种全新轻量化结构CSPHet(参数量下降70W)

一、本文介绍 本文给大家带来的改进机制是我结合Dual的思想利用HetConv提出一种全新的结构CSPHet,我们将其用于替换我们的C2f结构,可以将参数降低越75W,GFLOPs降低至6.6GFLOPs,同时本文结构为我独家创新,全网无第二份,非常适合用于发表论文,该结构非常灵活,利用Dual卷…

调用阿里通义千问大语言模型API-小白新手教程-python

阿里大语言模型通义千问API使用新手教程 最近需要用到大模型,了解到目前国产大模型中,阿里的通义千问有比较详细的SDK文档可进行二次开发,目前通义千问的API文档其实是可以进行精简然后学习的,也就是说,是可以通过简单的API调用在自己网页或…

【GitHub项目推荐--推荐一个开源的任务管理工具(仿X书/X钉)】【转载】

推荐一个开源的任务管理工具,该工具会提供各类文档协作功能、在线思维导图、在线流程图、项目管理、任务分发、即时 IM,文件管理等等。该开源项目使用到 Vue、Element-UI、ECharts 等技术栈。 开源地址:www.github.com/kuaifan/dootask 预览地…

ES的一些名称和概念总结

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

Flink实现数据写入MySQL

先准备一个文件里面数据有: a, 1547718199, 1000000 b, 1547718200, 1000000 c, 1547718201, 1000000 d, 1547718202, 1000000 e, 1547718203, 1000000 f, 1547718204, 1000000 g, 1547718205, 1000000 h, 1547718210, 1000000 i, 1547718210, 1000000 j, 154771821…

数学建模-------误差来源以及误差分析

绝对误差:精确值-近似值; 举个例子:从A到B,应该有73千米,但是我们近似成了70千米;从C到D,应该是1373千米,我们近似成了1370千米,如果使用绝对误差,结果都是3…