0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

矩阵按键识别的两种方法

CHANBAEK 来源:头条号电子秘探 作者:头条号电子秘探 2023-03-23 15:54 次阅读

最近进度比较慢,马上要学习中断和计时器了。遇到一个很郁闷的问题,矩阵按键线反转法在proteus中用现成的模块就是实现不了,自己画的矩阵模块可以正常使用。不知道什么原因。

行列扫描---按键识别

原理比较简单:P2端口的低四位D0---D3置1,高四位D4-D7分别置0,顺序执行P2口的值

P2 端口的值 0xef 0xdf 0xbf 0x7f,利用按键底层驱动中Key_Scan()函数,得到返回键值

#define   KEYPAD P2
KEYPAD = 0xef;
		switch(Key_Scan())
		{
			case 1:
				LEDBuf[3]=1;break;
			case 2:
				LEDBuf[3]=2;break;
			case 3:
				LEDBuf[3]=3;break;
			case 4:
				LEDBuf[3]=4;break;
			default: break;
		
				
		}
		KEYPAD = 0xdf;
		switch(Key_Scan())
		{
			case 1:
				LEDBuf[3]=5;break;
			case 2:
				LEDBuf[3]=6;break;
			case 3:
				LEDBuf[3]=7;break;
			case 4:
				LEDBuf[3]=8;break;
			default: break;
		}
.........

线反转法--按键识别

1.首先,我们将所有行设置为逻辑0,将所有列设置为逻辑1。

P2口的低四位连接矩阵按键4行上,高四位连接矩阵按键4列上

2.每当我们按下一个按钮时,对应于该按钮的列和行都会短路,并使对应的列达到逻辑电平0。可以确定列号

3.同理我们将所有列设置为逻辑0,将所有行设置为逻辑1。按下一个按钮时,该按钮的列和行都会达到逻辑0.可以确定行号

4.把行号和列号通过逻辑与操作连接起来,和行列编码数组比较,得到按键返回值

#include "Key.h"

u8 Key_Scan()
{
	u8 temp,temp2,keycode,i;
	static u8 KeyNum = 0;//初始化显示0
	u8 KEYCODE[]=    //按键行列编码
	{0XEE,0XDE,0XBE,0X7E,
	0XED,0XDD,0XBD,0X7D,
	0XEB,0XDB,0XBB,0X7B,
	0XE7,0XD7,0XB7,0X77};
	
	KEYPORT = 0xf0;//4列置1,4行置0
	temp = KEYPORT ;//读P2口
	
	if(temp!=0xf0)//判断是否有按键按下
	{
		DelayXms(10);
		if(temp!=0xf0)//再次判断是否有按键按下
		{
			temp=KEYPORT & 0xf0;//取高4位,取列数
			KEYPORT = 0x0f;//低4位写1,高四位取0,线反转
			temp2 = KEYPORT & 0x0f;//取低四位,取行号	
			keycode =  temp | temp2;//高四位和第四位(行列)组合到一起
			for(i=0;i<16;i++)
			{
				if(keycode == KEYCODE[i])
				{
					KeyNum = i;
					return KeyNum;
				}
			}

		}
	
	}
	return KeyNum;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41025
  • 计时器
    +关注

    关注

    1

    文章

    395

    浏览量

    32156
  • 函数
    +关注

    关注

    3

    文章

    3881

    浏览量

    61310
  • 按键识别
    +关注

    关注

    0

    文章

    10

    浏览量

    6944
  • 矩阵按键
    +关注

    关注

    0

    文章

    28

    浏览量

    8305
收藏 人收藏

    评论

    相关推荐

    扫描矩阵键盘的三种方法:行列扫描法,反转法,状态机法

    进行循环查询,大量占用MCU的时间,效率比较低。初学者一般会学这两种第三种方法属于状态机方法,它是结合定时器中断的,相比于前两种采用延时函数的方法
    发表于 11-26 15:04

    两种方法解决电路设计问题

    将200V的电压施加到500欧姆的抽头电阻器。找到连接到25V时需要0.1A电路的个分接点之间的电阻。我用两种方法解决了这个问题。但正确的答案只能通过一种方法来实现。总电阻为Ra + Rb
    发表于 09-14 13:54

    请问c2000配置时钟的两种方法有什么区别?

    现使用20M的外部晶振,配置60M的主频,通过1.20*6/ 2 = 60M 2.20*3/ 1 = 60M这两种方法都能将系统时钟 配制成60M,请问有什么区别的,会导致精度的不一样吗,哪种更好呢?
    发表于 10-10 11:34

    消除按键抖动的两种方法分享

      按键也是机械装置,在按下或放开的一瞬间会产生抖动,如下图:    消除方法两种:  软件除抖和硬件除抖,其中硬件除抖是应用了电容对高频信号短路的原理。  软件除抖是检测出键闭合后执行一个延时
    发表于 09-02 17:52

    pcb库封装常用的两种方法

    识别模块通讯模块调试模块单片机模块PCB库——原理图库——原理图首先需要明白他们之间的关系画图的实质是什么pcb库封装常用的两种方法,简单实用原理图封装原理图的封装和pcb...
    发表于 07-29 09:33

    STM32操作矩阵键盘的两种方法

    目录STM32操作矩阵键盘的两种方法——扫描和中断一、矩阵键盘的结构和原理二、扫描式矩阵键盘的原理和实现三、中断式矩阵键盘的原理和实现四、
    发表于 08-12 06:33

    浅析addContext()与addWebapp()这两种方法

    addContext()与addWebapp()这两种方法都是向嵌入式tomcat添加web应用程序。addContext()需要配置相关所有内容,比如配置默认的Servlet,否则将无法访问静态
    发表于 12-16 07:02

    按键信号是如何识别的

    一、按键扫描的基本原理按键信号是如何识别的?一般来说,按键个引脚的一端通过电阻上拉到高电平,另一端则接地。在没有
    发表于 01-17 08:29

    矩阵按键的原理是什么

    导出与导入导出导入前言在做3x3按键矩阵时,本来是做单按键识别的,后来改需求需要能同时按下多个按键,经测试当同
    发表于 01-18 09:47

    矩阵按键识别的过程中是否要进行消抖处理?

    矩阵按键识别的过程中是否要进行消抖处理
    发表于 10-11 06:30

    关于51单片机的矩阵键盘扫描的两种方法的困惑求解

    key_value,然后在主函数里将根据key_value的值来做出相应的动作! 分析上述两种方法:对于第一种方法,如果主程序特别长且很消耗时间,那么很可能出现按键漏扫的情况,不可靠。第二种情况是每隔段
    发表于 10-26 08:02

    使用非负矩阵分解方法识别脸部表情

    在论文中两种图像识别的方法即非负矩阵分解方法(NMF)和主成分分析方法(PCA)被适用于认识三种
    发表于 12-14 14:07 19次下载

    矩阵键盘的按键识别方法_矩阵键盘扫描程序

    矩阵键盘的按键识别方法来自简单日记网精选推荐。在学习有关矩阵键盘的时候,往往要学会矩阵键盘的按键
    的头像 发表于 04-20 09:39 3.2w次阅读

    异常值自识别的鲁棒性矩阵补全方法

    的情况下,目前大部分矩阵补全算法的鲁棒性并不理想。为了増加矩阵补全算法的鲁棒性并避免算法过拟合,讨论了几种较汋经典的矩阵补全算法,并提岀了一种新的鲁棒性矩阵补全
    发表于 05-19 11:32 3次下载

    STM32操作矩阵键盘的两种方法——扫描和中断

    目录STM32操作矩阵键盘的两种方法——扫描和中断一、矩阵键盘的结构和原理二、扫描式矩阵键盘的原理和实现三、中断式矩阵键盘的原理和实现四、
    发表于 11-26 13:36 33次下载
    STM32操作<b class='flag-5'>矩阵</b>键盘的<b class='flag-5'>两种方法</b>——扫描和中断