【电子基础】矩阵键盘的读取

发布时间:2025-05-17 17:25

如何使用光驱读取光盘:确保光盘放置正确,按下光驱的读取键 #生活技巧# #数码产品使用技巧# #电子维修基本技能#

矩阵键盘通常如下图设计

   下面就以按下S16键来讲解其思路:

   首先:

P3的高位P3.4~P3.7输出为0,低位P3.0~P3.3输出为1;即P3=0x0F,当按下S16键后(有消抖动过程),P3.3的值为0,则P3的值更新为0x07;

   其次:

P3的高位P3.4~P3.7输出为1,低位P3.0~P3.3输出为0;即P3=0xF0,当按下S16键后(有消抖动过程),P3.4的值为0,则P3的值更新为0xE0;

   最后将两个值相加得P3=0xE7;

在keyscan()函数(假设我们的键盘扫描程序为unsigned char keyscan())返回其键盘的值供后续的程序调用,通常会有一个switch块根据其返回值来确定输出的是哪一个数值。

   下面提供一段KeilC51语言的代码来解释一下:

uchar keyscan( void )

{

uchar cord_h,cord_l;

P3 = 0x0f;

cord_h = P3 & 0x0f;

if( cord_h != 0x0f )

{

delay( 100 );

if( cord_h != 0x0f )

{

cord_h = P3 & 0x0f;

P3 = cord_h | 0xf0;

cord_l = P3 & 0xf0;

return( cord_h + cord_l );

}

}

return( 0xff );

cpp

  首先把P3的口赋值为0x0f,同时把P3和0x0f赋值给cord_h(行的数值),倘若有按键按下,那么P3的值就会改变,随后cord_h的只也会随之变化,经过消抖之后记录cord_h的值,

   即cord_h = P3 & 0x0f;

   (若以S16为例,那么P3.3的值变为0,所以cord_h的值就会变为0x07;)

  接下来:P3 = cord_h | 0xf0;

   意在不改变P3的第四位,把P3的高四位赋为高电平,那么P3=0x0f7;

  到了关键的一步:

cord_l = P3 & 0xf0;我当初以为cord_l=0xf0呢,结果就和程序运行的不一样喽,其实在第二个if语言内,S16已经被按下了的,所以P3的值立刻就变为0x0e的了,以至于cord_l=0x0e,最后返回行和列的和return( cord_h + cord_l );(0xe7)。这才是最终对的结果。

   这个算法倒是看懂了,但是另一个算法让我纠结了很久(主要还是因为对硬件底层的不熟悉),贴图一张,有详细的解释。

本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1155435

网址:【电子基础】矩阵键盘的读取 https://www.yuejiaxmz.com/news/view/987192

相关内容

蓝桥杯 矩阵键盘的使用
求基础矩阵F方法
为什么共现矩阵* 评分矩阵=推荐结果
矩阵行列式
正交矩阵; 实对称矩阵; 为什么实对称矩阵一定可以对角化; AB=0 r(A)+r(B)<=n 证明; 初等矩阵; 初等矩阵的逆矩阵; 矩阵的左除右除;
短视频矩阵一键批量发布,引爆流量新高度!
hdmi矩阵切换器连接使用说明书如何连接多设备多显示器,hdmi矩阵控制软件
揭秘支付宝生活号:一键批量上传+矩阵管理,打造短视频带货帝国!
matlab取出矩阵某行某列
Python:seaborn的散点图矩阵(Pairs Plots)可视化数据

随便看看