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

51单片机基础部分——矩阵按键检测

前言

上一节,我们说到了独立按键的检测以及使用,但是独立按键每一个按键都要对应一个IO口进行检测,在一些需要多按键的情况下,使用过多的独立按键会过多的占用单片机的IO资源,为了解决这个问题的出现,我们今天就来介绍一些矩阵按键。

矩阵按键

为了解决独立按键占用过多IO的问题,我们这里用到矩阵按键,这里我们要先搞懂,矩阵按键的工作原理,我们先看一下我们开发板上面的独立按键和矩阵按键部分的原理图
在这里插入图片描述
在这里插入图片描述
上面是独立按键的部分,下面则是矩阵按键部分的原理图,我们只看按键的样子,上下两种模式似乎是一样的,实际情况也确实如此,上下部分使用的按键是同样的,他们的区别是排列接线方式不同,我们来看,上面的独立按键是使用了4个IO来连接了4个按键,下面的矩阵按键则使用了8个IO连接了16个按键,这就会节省了IO的使用,提高单片机的运行效率。

原理

在该开发板我们用了8个IO来检测16个按键的状态检测,在该开发板中,,我们看到P0端口全部是用来做矩阵按键检测,8个IO检测16个按键,将16个按键以4*4的方式排摆开来,每行四个,每列四个,这样我们就可以通过8个IO来检测16个按键,每一个按键只对应一个行和一个列,所以我们可以将8个IO分为两组,一组检测行,一组检测列,每个按键只对应两个IO,但是每个IO可以对应四个按键。

在这里插入图片描述
在这里插入图片描述

检测&代码

该开发板中,矩阵按键为4*4排列,每一行(列)对应4个按键,共可以交叉出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;
}

我们可以对KeyNumber进行判断,判断读取到了哪个按键有变化,然后做出相应的状态,写对应的代码;
大家可以尝试用矩阵按键在数码管做一个简易的计算器,在数码管显示,大家可以自己尝试写一下,后面会在其他文章更新

相关文章:

  • C#使用MindFusion.Diagramming框架绘制流程图(2):流程图示例
  • 【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案
  • 大数据(2) 大数据处理架构Hadoop
  • WPS中将在线链接转为图片
  • C++循环全解析
  • Java高级 |【实验八】springboot 使用Websocket
  • 【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理
  • 【云架构】
  • Node.js: express 使用 Open SSL
  • 新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
  • 怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • 基于SFC的windows系统损坏修复程序
  • SQL Server全局搜索:在整个数据库中查找特定值的高效方法
  • C++.OpenGL (2/64)你好,三角形(Hello Triangle)
  • mitmproxy 爬虫,下载自己的博客图片
  • 个人电脑部署本地大模型+UI
  • 湖北理元理律师事务所:企业债务重组的风险控制方法论
  • 11.RV1126-ROCKX项目 API和人脸检测画框
  • CMake 为 Debug 版本的库或可执行文件添加 d 后缀
  • 深圳网站设计公司电/搜索引擎优化是指
  • wordpress扁平化登录页源码/女装标题优化关键词
  • vps云主机可以做网站/产品线上营销推广方案
  • 什么是网站二级目录/百度公司全称叫什么
  • 外贸网站注册/推广策划方案
  • 苹果应用商店/网站seo方案撰写