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


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

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

相关推荐
悠哉悠哉愿意8 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
qq_459234428 天前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评
Lester_11019 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元9 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133979 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
AKA__Zas9 天前
初识基本排序
java·数据结构·学习方法·排序
z20348315209 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang9 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
神奇程序员9 天前
不止高刷:明基 RD280UG 在编码场景下的表现如何
计算机外设
脚后跟9 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程