【51单片机】矩阵键盘

server/2024/11/28 0:22:38/

学习使用的开发板: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/server/137703.html

相关文章

excel IF函数用法

IF函数以其灵活多变、易于上手的特点,成为了众多Excel用户不可或缺的好帮手,无论是简单的条件判断,还是复杂的逻辑分析,IF函数都能游刃有余地应对。 本文将深入探讨IF函数的10种精妙用法,从基础到进阶,相信…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的,使模块能够按需加载,使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

SYN590RH

一般描述 SYN590RH是SYNOXO全新开发设计的一款宽电压范围,低功耗,高性能,无需外置AGC电容,灵敏度达到典型-110 dBm,400MHz~450MHz频率范围应用的单芯片ASK或00 K射频接收器。 SYN590RH是一款典型的即插即用型单片高…

大数据之文件服务器方案

大数据文件服务器方案 一,文件服务器常用框架 二,文件服务器常用框架的实现技术 文件服务器常用框架 文件服务器是一种专门用于存储、管理和共享文件的服务器,其常用框架的实现技术涉及多个方面,以下是一些主要的实现技术及其详…

第八章 利用CSS制作导航菜单课后习题

1.利用CSS技术&#xff0c;结合链接和列表&#xff0c;设计并实现“山水之间”页面。 参考代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>山水之间</title><style>.all{width:900px;}.top…

Python-GUI-概览

1 需求 2 接口 3 示例 Tkinter 介绍&#xff1a;Tkinter 是 Python 的标准 GUI&#xff08;Graphical User Interface&#xff09;库&#xff0c;它提供了基本的组件来构建简单的图形用户界面。由于它是标准库&#xff0c;所以无需额外安装&#xff0c;使用起来很方便。组件和…

git入门教程5:git仓库操作

一、Git仓库初始化 安装Git&#xff1a; 首先&#xff0c;确保你的计算机上已经安装了Git。可以从Git的官方网站下载安装包&#xff0c;并按照提示进行安装。 初始化仓库&#xff1a; 打开终端或Git Bash&#xff0c;导航到你想要初始化为Git仓库的项目目录。输入git init命令…

计算机网络803-(5)运输层

目录 一.运输层的两个主要协议&#xff1a;TCP 与 UDP 1.TCP/IP 的运输层有两个不同的协议&#xff1a; 2.端口号(protocol port number) &#xff08;1&#xff09;软件端口与硬件端口 &#xff08;2&#xff09;TCP 的端口 &#xff08;3&#xff09;三类端口 二.用户…