【51单片机】矩阵键盘

news/2024/11/1 13:59:53/

学习使用的开发板:STC89C52RC/LE52RC
编程软件:Keil5
烧录软件:stc-isp

开发板实图:
在这里插入图片描述

文章目录

矩阵键盘

矩阵键盘位于开发板的右下角
在这里插入图片描述

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式
采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态


原理图

独立按键原理图如下:
在这里插入图片描述
4个按键使用了4个I/O口,如果矩阵按键也使用这种接线,则需要16个I/O口
为了节省接线,矩阵按键采用行列排列,使用8个接线就可以控制16个按键
在这里插入图片描述

  • 通过P17控制 S1 ~ S4一端,P16控制 S5 ~ S8一端,以此类推
  • 一个按键按下,那个两端都会有信号,如S1按下,那么P17和P13都为0

如此就可以通过扫描检测按键是否按下

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

此处采用固定列,扫描行的方式,检测按键按下,代码如下:

//brief:方法描述   parm:参数说明   retval:返回值
/*** @brief 检测哪个按键被按下* @parm 无* @retval 被按下的按键的编号 范围: 1 ~ 16*/
unsigned char matrixKey()
{unsigned char keyNumber = 0;//先重置P1 = 0xFF;//第一列P1_3 = 0;if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);keyNumber = 1;}if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);keyNumber = 5;}if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);keyNumber = 9;}if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);keyNumber = 13;}//第二列P1 = 0xFF;P1_2 = 0;if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);keyNumber = 2;}if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);keyNumber = 6;}if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);keyNumber = 10;}if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);keyNumber = 14;}//第三列P1 = 0xFF;P1_1 = 0;if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);keyNumber = 3;}if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);keyNumber = 7;}if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);keyNumber = 11;}if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);keyNumber = 15;}//第四列P1 = 0xFF;P1_0 = 0;if(P1_7 == 0){Delay(20);while(P1_7 == 0);Delay(20);keyNumber = 4;}if(P1_6 == 0){Delay(20);while(P1_6 == 0);Delay(20);keyNumber = 8;}if(P1_5 == 0){Delay(20);while(P1_5 == 0);Delay(20);keyNumber = 12;}if(P1_4 == 0){Delay(20);while(P1_4 == 0);Delay(20);keyNumber = 16;}return keyNumber;
}

基本操作同独立按键,可参看【单片机>51单片机】独立按键


以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述


http://www.ppmy.cn/news/1543596.html

相关文章

3des算法

使用3des算法,加密模式:CBC,填充:pkcs5padding /*** 3DES加解密类*/ class Des3phpService {//加密秘钥(base64加密)private $key ;//初始偏移向量private $iv;/*** 构造,传递二个已经进行base64_encode的KEY与IV** pa…

ETF申购赎回指南:详解注意事项与低费率券商推荐!

​ETF 申购&赎回 ETF申购赎回是个啥业务? 01 ETF申购、赎回是一种交易委托方式,指投资者通过申购方式(买入方向)获得ETF份额,通过赎回的方式(卖出方向)换掉/卖出ETF份额。ETF申购,通常是通过一篮子成…

基于Springboot的在线考试与学习交流平台的设计与实现

基于Springboot的在线考试与学习交流平台 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取:https://download.csdn.net/downlo…

WebMvcConfigurationSupport和WebMvcConfigure

WebMvcConfigurationSupport和WebMvcConfigurer都是Spring MVC框架中用于配置MVC的组件,但它们之间存在显著的区别。以下是对这两者的详细比较: 一、定义与性质 WebMvcConfigurer ○定义:WebMvcConfigurer是Spring MVC中的一个接口&#xf…

基于单片机的家电远程控制系统的设计与实现

[ 摘 要 ] 本课题利用 51 单片机设计家电远程控制系统 。 通过软硬件相结合最终实现了通过手机与 GSM 模块通信控制继电器模拟家电开和关 , 为使系统相对操作和演示比较简单 。 整个系统设计功能完善 ,设计的成本较低, 并适用于各种家庭 , 具有一定的推广性 。 [ 关键…

计算机毕业设计django+大模型租房推荐系统 租房可视化 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统

开题报告:《Django大模型租房推荐系统》 一、研究背景与意义 随着城市化进程的加快,房屋租赁市场日益繁荣。然而,传统的房屋租赁方式存在信息不对称、交易流程繁琐等问题,给租户和房主带来了诸多不便。因此,开发一套…

Python零基础 [2.3] if else 语句的详解与示例

目录 引言 正文 什么是if-else语句 if-else语句的基本格式 示例:简单的if-else语句 示例:if-else语句与比较运算符 示例:if-else语句与逻辑运算符 嵌套的if-else语句 示例:嵌套的if-else语句 总结 引言 欢迎进入Python编…

windows下安装python库wordCloud报错

换电脑安装wordcloud半天安装失败,记录一下遇到的坑,也给大家节省点时间。 方法1: 错误呢就是下面这个,说没c编译器,要不就去他给的地址上安装一下,我安装了一下好像没什么用,也没太敢勾选&am…