4x4矩阵按键应用详解

2023-05-16

一.简介

4x4矩阵按键是单片机外部设备中所使用的排布类似于矩阵的按键组。显然矩阵按键的使用要比独立按键要复杂一些,编程也要复杂一些,但可以单片机IO资源。4x4矩阵按键即分为4组列线,4组行线,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。

二.硬件连接图

51单片机的P1口用作按键I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位;把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。如图:
在这里插入图片描述

三.控制程序

1.矩阵按键程序扫描步骤

  • 检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。
  • 去除按键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。
  • 若有键被按下,应识别出是哪一个键闭合。方法是先获取矩阵按键的列状态,即P1的低四位状态,对应为0111,1011,1101,1110;再获取行状态,即P1的高四位状态。
  • 最后,将由此得到闭合键的行值和列值组成8位数,可通过对应的编码表将闭合键的行值和列值转换成所定义的键值。

2.扫描程序

void key()	 //按键程序
{
	static uchar key_new = 0, key_l;
	key_can = 20;                   //按键值还原
	P1 = 0x0f;
	if((P1 & 0x0f) != 0x0f)		//按键按下
	{
		delay_1ms(1);	     	//按键消抖动
		if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
		{						//确认是按键按下
			key_new = 0;
			key_l = (P1 | 0xf0);   //矩阵键盘的列状态
			P1 = key_l;              //扫描矩阵键盘的行状态
			switch(P1)
			{
				case 0xee:  key_can = 1;  break;  //得到按键值 
				case 0xde:  key_can = 4;  break;   //得到按键值 
				case 0xbe:  key_can = 7;  break;   //得到按键值 
				case 0x7e:  key_can = 10;  break;   //得到按键值 
	
				case 0xed:  key_can = 2;					break;  //得到按键值 
				case 0xdd:  key_can = 5;  break;   //得到按键值 
				case 0xbd:  key_can = 8;  break;   //得到按键值 
				case 0x7d:  key_can = 0;  break;   //得到按键值 
	
				case 0xeb:  key_can = 3;  break;  //得到按键值 
				case 0xdb:  key_can = 6;  break;   //得到按键值 
				case 0xbb:  key_can = 9;  break;   //得到按键值 
				case 0x7b:  key_can = 11;  break;   //得到按键值 
	
				case 0xe7:  key_can = 15;  break;  //得到按键值 
				case 0xd7:  key_can = 14;  break;  //得到按键值 
				case 0xb7:  key_can = 13;  break;   //得到按键值 
				case 0x77:  key_can = 12;  break;  //得到按键值  
			}	
		}					
	}
	else 
	{
		key_new = 1;		
	}	
}

如果您喜欢,可关注个人公众号“电子应用学习馆”,获取更多的资料例程。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4x4矩阵按键应用详解 的相关文章

随机推荐

  • Debian-8.7.1 系统安装

    Debian 8 7 1 系统安装 本人使用Linux操作系统多年 xff0c 主要是centos xff0c 但从来没用过debian系统 xff0c 今天准备安装一个系统看看 xff0c 网上查资料 xff0c 大部都是debian老版
  • MySQL 8.0 忘记密码/修改root密码

    1 以管理员身份打开cmd窗口 xff0c 定位到MySQL安装目录下的bin目录 xff0c 输入net stop mysql 回车 xff0c 关闭MySQL数据库 2 输入mysqld console skip grant table
  • python使用ElementTree处理xml容易犯错的点&美化xml

    python使用ElementTree处理xml容易犯错的点 amp 美化xml 引言代码环境相关先上代码 引言 目前因为需要写一个tool处理xml文件 xff0c 对于面向浏览器编程的我来说 xff0c 迅速打开chrome开始搜索关键
  • java截取视频的三种方式

    String cut 61 34 ffmpeg ss 34 43 startTime 43 34 i 34 43 videoPath 43 34 t 34 43 String valueOf seconds 43 34 c v copy c
  • 有关C语言中字符串入栈的理解

    C语言中字符串的入栈 写在前面 对于C语言中变量入栈的顺序实际上需要具体情况具体分析 xff0c 不同操作系统下的编译器可能对此有不同的解释 xff0c 即使对于同一个C的编译器而言 xff0c 参数设定的不同也会导致编译器调整局部变量的入
  • win10 安装MySQL 无管理员权限

    1 找到下载的安装文件 xff0c 按住Shift键 xff0c 同时在安装文件上点击鼠标右键 xff0c 选择复制为路径 2 打开C Windows System32 xff0c 找打cmd exe xff0c 点击右键选择以管理员方式运
  • Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

    现象描述 xff1a 代码连接本地kafka没有问题 能监听到监听的topic xff0c 可获取通道中的所有topic 将kafka放到服务器上 xff0c 本地程序启动报异常 xff0c 可获取kafka中所有的topic xff0c
  • java 视频转换 avi 转 MP4

    添加jar 包 lt dependency gt lt groupId gt ws schild lt groupId gt lt artifactId gt jave core lt artifactId gt lt version gt
  • 前后端分离,SpringBoot。WEBSocket后台报警页面提示

    前端JS var websocket 61 null 判断当前浏览器是否支持WebSocket 主要此处要更换为自己的地址 if 39 WebSocket 39 in window websocket 61 new WebSocket 34
  • MYSQL 依据字段值分段统计

    SELECT sum mun max from select ceil distance 500 1 500 as min ceil distance 500 500 as max count mun from tablename wher
  • java8转换数组。找到最接近指定数据

    List lt String gt lsstr 61 Arrays asList arear 数组转list List lt String gt listWithoutNulls 61 lsstr stream filter Objects
  • nested exception is java.lang.IllegalStat eException:duplicate spring bean

    nested exception is java lang IllegalStat eException duplicate spring bean 多次注入bean信息 xff0c 经过长时间排查 xff0c 我是将项目进行整合 xff0
  • Artifact xxx:war exploded: Error during artifact deployment.

    Artifact xxx war exploded Error during artifact deployment 出现这个问题 xff0c 在网上查资料 xff0c 1 说是idear 配置的tomcat Artifact 添加的Var
  • zTree取消父子关联

    对于zTree父子关联关系的设置 xff0c zTree里面自带了一个chkboxType函数 取消父子关联 xff0c 只需要在初始化树的时候 xff0c 在settings里面设置 xff1a check enable true chk
  • 解决Linux系统下,出现“不在sudoers文件中,此事将被报告”的问题

    使用sudo mkdir software xff0c 提示XXX 不在 sudoers 文件中 此事将被报告 是因为当前操作用户的权限不足 xff0c 而root用户只有在权限分配及系统设置时才会使用 xff0c 而root用户的密码也不
  • 结构体数组的引用方式

    期末复习时发现答案中有p i a的用法 xff0c 遂进行了一番测试 xff0c 所获心得记载如下 引用结构体指针数组时 xff0c p i 61 61 A i 61 61 p 43 i 注意加括号 xff0c 优先级较低 具体为 xff1
  • Hadoop安装和配置

    1 安装Hadoop 注意 xff1a 安装JDK类似 xff0c 解压后配置环境变量 1 0 Hadoop下载地址 xff1a https archive apache org dist hadoop common hadoop 2 7
  • 机器学习(1)机器学习的范围

    机器学习的范围包括但是不局限与如下 xff1a 机器学习跟模式识别 xff0c 统计学习 xff0c 数据挖掘 xff0c 计算机视觉 xff0c 语音识别 xff0c 自然语言处理等领域有着很深的联系 从范围上来说 xff0c 机器学习跟
  • Tesseract-OCR-v5.0中文识别,训练自定义字库,提高图片的识别效果

    1 xff0c 下载安装Tesseract OCR 安装 xff0c 链接地址Index of tesseract 2 xff0c 安装成功 tesseract v 注意 xff1a 安装后 xff0c 要添加系统环境变量 3 xff0c
  • 4x4矩阵按键应用详解

    一 简介 4x4矩阵按键是单片机外部设备中所使用的排布类似于矩阵的按键组 显然矩阵按键的使用要比独立按键要复杂一些 xff0c 编程也要复杂一些 xff0c 但可以单片机IO资源 4x4矩阵按键即分为4组列线 xff0c 4组行线 xff0