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

目录

矩阵键盘的介绍

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

矩阵按键的扫描

代码演示

代码模块化移植

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.mzph.cn/news/650217.shtml

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

相关文章

GPT4.5人工智能即将来临,ChatGPT的正面影响和负面影响(好处和坏处),利弊分析

ChatGPT来了,对我们影响大不大? 近年来,人工智能技术的飞速进步催生了ChatGPT——一种强大的人工智能语言模型。其杰出的生成能力使其能够与人类进行自然、流畅的交流,从而在教育、医疗和娱乐等多个领域展现出巨大的应用潜力。然…

新版UI界面影视小程序亲测无问题带详细搭建教程

新版UI界面影视小程序亲测无问题带详细搭建教程 环境php7.0 — fileinfo–redis–sg11 mysql5.5 apache2.4 添加站点php7.0—-创建ftp—-上传后端文件《后端文件修改,/maccms/wxapi/config/dbs.php–修改当前数据库》—-设置ssl—-打开数据库安装cms 安装好后管…

4. sass实用函数归纳

4. sass实用函数归纳 字符串函数 1、quote(string) 给字符串添加引号 quote(xiaoming) // "xiaoming"2、unquote(string) 移除字符串的引号 unquote("xiaoming") // xiaoming3、str-index(string, substring) 返回 substring 子字符串第一次在 stri…

仰暮计划|“星星之火可以燎原,平凡人的一生同样值得称赞

传递助老之情,践行为老初心。为学习和发扬助老为老精神,我参与了康乐忆享实践队开展的以“仰暮计划”为主题的实践活动,在实践过程中了解老人的人生经历,传播尊老爱老思想。我与老人谭爷爷在谈论家常时,他拿出年轻时的…

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

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

CentOS安装Redis教程-shell脚本一键安装配置

文章目录 前言一、Redis单机版安装教程1. 复制脚本2. 增加执行权限3. 执行脚本 二、Redis扩展集群版安装教程1. 安装Redis单机版2. 复制脚本3. 增加执行权限4. 执行脚本5. 测试6. redis_cluster.sh 命令6.1 启动Redis扩展集群6.2 停止Redis扩展集群6.3 查看Redis扩展集群节点信…

手写rpc和redis

rpc框架搭建 consumer 消费者应用 provider 提供的服务 Provider-common 公共类模块 rpc 架构 service-Registration 服务发现 nacos nacos配置中心 load-balancing 负载均衡 redis-trench 手写redis实现和链接 package com.trench.protocol;import com.trench.enumUtil.Redis…

AI编译器的前端优化策略

背景 工作领域是AI芯片工具链相关,很多相关知识的概念都是跟着项目成长建立起来,但是比较整个技术体系在脑海中都不太系统,比如项目参与中涉及到了很多AI编译器开发相关内容,东西比较零碎,工作中也没有太多时间去做复盘…

Docker容器(自定义镜像,Dockerfile,网桥,DockerCompose)

自定义镜像 镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。 构建步骤 镜像结构 Dockerfile 它是一个文本文件,包含很多指令,用指令来说明要执行什么操作来构建镜像。 官网&am…

序列化和反序列化

目录 字节流序列化反序列化区别示例字节流需要注意的问题 字节流 字节流在计算机科学中是一种常见的数据结构,它是一系列字节的序列。字节流通常用来处理输入和输出的数据,例如读写文件、网络通信等。一个字节由8位二进制数字组成,可以代表一…

jQuery HTML - 获取 —— W3school 详解 简单易懂(十一)

jQuery 获得内容和属性 jQuery ChainingjQuery 设置 jQuery 拥有可操作 HTML 元素和属性的强大方法。 jQuery DOM 操作 jQuery 中非常重要的部分,就是操作 DOM 的能力。 jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易。 …

【漏洞复现】友讯D-Link路由器弱口令漏洞

Nx01 产品简介 友讯电子设备(上海)有限公司于2002年8月13日成立。公司经营范围包括区内以路由器、网络卡、集线器、交换器、转换器等。 Nx02 漏洞描述 友讯D-Link路由器存在默认口令(admin/admin),攻击者可利用该漏洞获取敏感信息。 Nx03 产…

windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

一、CMake 和 mingw64的安装和环境配置 二、tasks.json和launch.json文件配置 tasks.json {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell&q…

openssl3.2/test/certs - 074 - CT entry

文章目录 openssl3.2/test/certs - 074 - CT entry概述笔记setup074.shsetup074_sc1.shsetup074_sc2.shsetup074_sc3.shEND openssl3.2/test/certs - 074 - CT entry 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 setup074.sh #! /bin/bash# \file setup074.sh# o…

软件设计师——计算机网络(四)

📑前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1…

react中优化类名写法(类似与vue的动态class对象方式)

安装和引入方式 npm install classnamesimport classNames form classsnames//render 方法中,需要动态className的地方直接参照上图使用

【NodeJS JS】动态加载字体的各方式及注意事项;

首先加载字体这个需求基本只存在于非系统字体,系统已有字体不需要加载即可直接使用; 方案1:创建 style 标签,写入 font-face{font-family: xxx;src: url(xxx)} 等相关字体样式;将style标签添加到body里;方…

手机操作系统Android

▶1.Android系统概述 Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发,它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备,如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机,以后Android逐渐扩展到平板计算机、电视、…

C++学习| QT下载安装、VS配置QT

QT介绍 Qt:1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架。 应用:既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。 对比MFC:MFC和QT两者都是用于C图形用户界面应用程序。 跨平…

c#反射用法

在 C# 中,反射是一种能够在运行时检查类型信息、访问属性和调用方法的机制。通过反射,你可以动态地操作类型、对象和程序集,而无需在编译时知道这些类型的具体信息。 反射提供了一组 API,可以让你在运行时获取和操作类型的信息。…