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


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

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

相关推荐
CC呢1 小时前
基于单片机智能热水壶/养生壶设计
单片机·嵌入式硬件·单片机设计
dujunqiu1 小时前
S32K328上芯片内部RTC的使用和唤醒配置
mcu·计算机外设
fFee-ops1 小时前
73. 矩阵置零
线性代数·矩阵
贾亚超2 小时前
【STM32外设】DAC
stm32·单片机·嵌入式硬件
明天见~~3 小时前
硬件基础:串口通信
嵌入式硬件
sheepwjl4 小时前
《嵌入式硬件(三):串口通信》
网络·嵌入式硬件·网络协议·串口通信
嵌入式牛马在努力帮老板娶老婆5 小时前
十四、STM32-----低功耗
stm32·单片机·嵌入式硬件
来生硬件工程师6 小时前
【硬件笔记】负载是如何烧MOS的?
笔记·嵌入式硬件·硬件架构·硬件工程·硬件设计
少男的脸红藏不住心事6 小时前
GD32入门到实战34--ARM启动流程
单片机·嵌入式硬件
日更嵌入式的打工仔6 小时前
PHY的自适应协商简析
网络·嵌入式硬件·自适应·phy