【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单片机】独立按键


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

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

相关推荐
小智学长 | 嵌入式11 分钟前
单片机-STM32部分:10、串口UART
stm32·单片机·嵌入式硬件
猎板阿权1 小时前
出于PCB设计层面考虑,连排半孔需要注意哪些事项?
单片机·物联网·平面
#金毛1 小时前
如何使用C51的Timer0实现定时功能
单片机·嵌入式硬件
Flocx1 小时前
在 STM32 上使用 register 关键字
stm32·单片机·嵌入式硬件
GodKK老神灭1 小时前
STM32 __main
stm32·单片机
梁下轻语的秋缘1 小时前
STM32 ADC 模数转换器详解:原理、配置与应用
stm32·单片机·嵌入式硬件
欢乐熊嵌入式编程2 小时前
智能手表试产总结报告
嵌入式硬件·目标跟踪·规格说明书·智能手表
欢乐熊嵌入式编程2 小时前
智能手表整机装配作业指导书(SOP)
嵌入式硬件·物联网·目标跟踪·智能手表
清月电子4 小时前
KT148A语音芯片发码很难播放_将4脚对地一下再发正常,什么原因?
单片机·嵌入式硬件·物联网·音视频
Despacito0o5 小时前
QMK键盘固件自定义指南 - 打造你的专属键盘体验
c语言·计算机外设·qmk