【51单片机】矩阵键盘

学习使用的开发板: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行(列) →......

然后快速循环这个过程,最终实现所有按键同时检测的效果

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

c 复制代码
//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单片机】独立按键


以上就是本篇博客的所有内容,感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

相关推荐
ACP广源盛139246256733 分钟前
GSV6127E(EA)#Type-C / 显示端口 1.4/HDMI 2.0 转 MIPI/LVDS 转换器(带音频提取和嵌入式微控制器)
单片机·嵌入式硬件·音视频
.普通人1 小时前
stm32f103c8t6寄存器点灯法
stm32·单片机·嵌入式硬件
电子工程师-C511 小时前
基于单片机的智能手表
单片机·嵌入式硬件·智能手表
点云SLAM2 小时前
四元数 (Quaternion)微分-四元数导数的矩阵表示推导(8)
线性代数·算法·计算机视觉·矩阵·机器人·slam·四元数
蓁蓁啊2 小时前
ARM交叉编译中编译与链接参数不一致导致的问题
开发语言·arm开发·嵌入式硬件
TomCode先生3 小时前
MES 学习方法深度落地指南:流程图绘制、系统支撑分析、角色场景模拟
流程图·学习方法·mes
01100001乄夵4 小时前
第六课:仿真进阶与调试技巧
经验分享·笔记·学习方法
YaraMemo4 小时前
对称/Hermitian矩阵相关记号
线性代数·5g·矩阵·信息与通信
Jerry丶Li4 小时前
二十八、STM32的USART (介绍)
stm32·单片机·嵌入式硬件
资料,小偿4 小时前
3.55基于51单片机温度报警器基于51proteus的DS18B20温度报警器+报告可设置上下限,低于或者高于都会有声光报警,蜂鸣器响LED灯亮。
51单片机·proteus