导航:首页 > 知识科普 > 矩阵扫描有哪些方法

矩阵扫描有哪些方法

发布时间:2022-08-27 13:01:49

1. 4*3按键矩阵,怎么实现按键扫描。c51程序。

那看你怎么连接的 比如是4排3列。。。P1^1--P1^4连接排,P1^5--P1^7连接列。。。。P1^0不能用所以只能一个一个置位了,,
先P1^5=0其他脚都置1(除了留着的P1^0外) 然后扫描P1^1---P1^4,P1^1---P1^4哪个为0那么P1^5对应的这列和P1^1---P1^4中等0的那排交叉处的按键就被按下了; P1^6,P1^7同理。。。。。和4*4的应该是一个道理的。。

2. C51矩阵键盘扫描 请解释一下程序 特别是关键步骤 急!!!

C51 P1端口 4X4键盘说明
这是一个用C51单片机P1端口制作的4X4键盘,p1端口低4位是键盘列扫描线,高4位是键盘行扫描线,

列扫描线是输出,行扫描线是输入。
下面就程序作一个说明
(***)表示注意点
1、首先判断整个键盘有无按下键,只要行扫描线输入不为全1,(1111)即有键按下;
P1 = 0xf0;if((P1&0xf0)!=0xf0) 如果无按键按下,全1,则返回return -1;
如果有键按下则延时,再次判断有无按键按下,Delay();if((P1&0xf0)!=0xf0)如果无按键按下则返回return -1。
有键按下则继续,这个过程就是判键消抖,避免多次读键值,***或者因为按键抖动到读键值的时候无键按下,发生错误,***列扫描线是输出全0,P1 = 0xf0。

2、进入读键值了,与上面不同,每一次判断,***列扫描线只有一根输出为0,即P1=0xfe,0xfd,0xfb,0xf7;
首先列扫描线P1.0,sCode = 0xfe;如果行扫描线全1,则本列无键按下,扫描下一列
sCode = _crol_(sCode,1); ***sCode左移一位,即0xfd,如此扫描4次,行扫描线都全0,则无键按下,
返回return -1;
如果行扫描线不全0,就是有键按下,现在可以读键值了
kCode = ~P1; //P1=EE,ED...
for(i=0;i<16;i++)
{
if(kCode == KeyCodeTable[i])
return i;
}

1.首先kCode = ~P1;***p1值取反行扫描线可能的是1,2,4,8;同样列扫描线对应值1,2,4,8
合起p1有16个值,就是KeyCodeTable[i]表的x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,
0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
如果 if(kCode == KeyCodeTable[i]) 成立,对应的 i 值就是键号。
2.返回i值就是键号,return i;。

uchar Keys_Scan()
{
uchar sCode,kCode,i,k;
P1 = 0xf0;
if((P1&0xf0)!=0xf0) //扫描列
{
Delay();
if((P1&0xf0)!=0xf0)//消抖
{
sCode = 0xfe;
for(k=0;k<4;k++)
{
P1 = sCode;//查找低位
if((P1&0xf0)!=0xf0)//只有等于才执行else P1和0xf0作与为0xf0 与 同真为真,一假为假
{
kCode = ~P1; //P1=EE,ED...
for(i=0;i<16;i++)
{
if(kCode == KeyCodeTable[i])
return i;
}
}
else
sCode = _crol_(sCode,1);
}
}
}
return -1;
}

3. 矩阵键盘扫描程序分析

uchar
keyscan(void)//键盘扫描函数,使用行列反转扫描法
比如:行为低电位,列为高四位
{
uchar
cord_h,cord_l;//行列值
P3=0x0f;
//行线输出全为0
cord_h=P3&0x0f;
//读入列线值
if(cord_h!=0x0f)
//这个句话意思是这样的,如果有按键按下的话。那肯定就不是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);
//返回该值
}
好像你的程序解释得很好了。但是好像这么快,最好要延时下才准的。
我教你按键的原理吧
就是那根线如果是高电平的话,遇到底电平就会变为底电平的。所以如果有按键按下的话,高电平就会变为低电平了。所以就可以读取了。

4. 矩阵键盘的识别方法

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
<1>确定矩阵式键盘上何键被按下介绍一种“行扫描法”。
行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。
2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
下面给出一个具体的例子:
图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线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”,则无键闭合,否则有键闭合。
2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。
3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:
P1.7 1 1 1 0
P1.6 1 1 0 1
P1.5 1 0 1 1
P1.4 0 1 1 1
在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值
4、为了保证键每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。
键盘扫描程序:
从以上分析得到键盘扫描程序的流程图所示。程序如下
SCAN: MOV P1,#0FH
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT1
SJMP NEXT3
NEXT1: ACALL D20MS
MOV A,#0EFH
NEXT2: MOV R1,A
MOV P1,A
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,KCODE;
MOV A,R1
SETB C
RLC A
JC NEXT2
NEXT3: MOV R0,#00H
RET
KCODE: MOV B,#0FBH
NEXT4: RRC A
INC B
JC NEXT4
MOV A,R1
SWAP A
NEXT5: RRC A
INC B
INC B
INC B
INC B
JC NEXT5
NEXT6: MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT6
MOV R0,#0FFH
RET
<2>确定矩阵式键盘上何键被按下介绍一种“高低电平翻转法”。
首先让P1口高四位为1,低四位为0,。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。
然后让P1口高四位为0,低四位为1,。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。
最后将上述两者进行或运算即可确定被按下的键的位置。
键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。

5. 初学单片机矩阵键盘逐行扫描,问题困扰好久

P3=0x7f;//高4位作为输出,低4 位为输入,作为输入时要先将其置1
每次扫描时高4位中只有一根线是0,如果没有按键按下,高4位中的0就不会传到低4位上
那么读P3的低4位,它将仍保持原状态4个1(0x0f)
反之,若读到的不是4个1,说明有按键按下了
temp=P3;//将P3口的状态读回来
temp=temp&0x0f;//只取低4 位
if(temp!=0x0f)//如果不全为1,说明有按键按下
{
Delay1ms(5);//消抖动
temp=P3;//再次将P3口的状态读回来
temp=temp&0x0f;//仍然只取低4 位
if(temp!=0x0f)//再次判断是不是4 个1
{
temp=P3;//是 再次读回,因高4位送出的是7,读回也只能是7
switch(temp)//1 根输出线上(此处是最高位)挂有4 个按键,因此读回的数值只有4 种可能
其它3 根线上也各挂4个按键,但你此时按下也不起作用,因它们输出是1
高4位以很快的速度轮流输出低电平,且你按任何键都要持续几十到上百ms,因此你按任何键都有可被扫描到
7二进制是0111 b二进制是1011 d二进制是1011 e二进制是1110
{
case 0x7e:num=1;xianshi=table[num-1];//num是你自己定义的
break;
case 0x7d:num=2;xianshi=table[num-1];
break;
case 0x7b:num=3;xianshi=table[num-1];
break;
case 0x77:num=4;xianshi=table[num-1];
break;
}

6. 单片机汇编矩阵键盘实验(扫描法)

关于扫描按键的原理,可以看下面这篇文章。

本文以循序渐进的思路,引导大家思考如何用最少的IO驱动更多的按键,并依次给出5种方案原理图提供参考。在实际项目中我们经常会遇到有按键输入的需求,但有的时候为了节省资源成本,我们都会选择在不增加硬件的情况下使用最少的控制器IO驱动更多的按键,那么具体是怎么做的呢,下面我们就以用5个IO引脚为例,讲下怎么设计可以实现更多的按键?共有5种设计思路,下面依次介绍。

思路一

首先通常想到的可能是下面这样的设计:

这样我们可以先识别K01、K02、K03、K04、K05,若没有按键按下然后再和思路四的设计一样去识别其他按键。但这样存在一个问题,如果IO1配置为0,IO5读到0,那么怎么知道是K51按下还是K05按下呢,这里只需要在程序里做下判断,先判断下是不是K05按下,若不是就是K51,因为按键K01、K02、K03、K04、K05在5个IO口都为读取的情况下,就可以识别,不需要扫描识别处理,相当于这5个按键优先级高与其他按键。

总结

综合上述,5个IO口最多可以识别25个按键,思路五程序上处理比较麻烦,若实际中只按思路四设计,也可识别20个按键,那么如果有N个IO口可识别多少按键呢?这里给出如下公式:

假设有N个IO口按照思路三可以识别N*(N-1)/2个;

按照思路四可识别N*(N-1)个;

按照思路5可以识别N*(N-1)+N个。

最后再说下,如果实际设计时,还是按思路四设计好,软件也没那么麻烦。如果是你的话你会选择哪种方法呢?你还有没有其他的设计方法呢?

7. 非编码键盘有几种常见的扫描方法简要介绍这几种扫描方法

非编码式技术按照代码转换方式,键盘可以分为编码式和非编码式两种。编码式键盘是通过数字电路直接产生对应于按键的ASCⅡ码,这种方式目前很少使用。非编码式键盘将案件排列成矩阵的形势,由硬件或软件随时对矩阵扫描,一旦某一键被按下

8. 10、行列式硬件(矩阵键盘扫描)扫描原理,以及软硬件如何实现

按键有2个管脚,一个管脚接一个IO口,自定义MCU的IO口其中一个为输入、另一个为输出,在对输出进行翻转后读IO口状态,即输出为0时读一次状态输出为1时读一次状态,如果按键没有按下则两次状态相同且为初始状态,如果按键按下则状态改变,根据预定义好的状态代码即可确认按键。

9. 51单片机4*4矩阵键盘有哪几种扫描方式

行扫描法,线反转法,你用专用接口不就简单多了,例如8279

阅读全文

与矩阵扫描有哪些方法相关的资料

热点内容
恒温龙头使用方法 浏览:69
小米4c音量键怎么设置在哪里设置方法 浏览:851
巡视方法技巧经验交流 浏览:174
疫情下有什么防疫措施和方法 浏览:143
常用偏旁练字方法 浏览:653
抛竿浮漂连接主线方法 浏览:338
汽车机油泵的安装方法 浏览:17
放大器电流放大倍数的测量方法 浏览:580
土霉素功效与作用及食用方法 浏览:124
杏树短化种植方法 浏览:574
室内盆栽香菜的种植方法 浏览:556
研究物质性质的方法和程序导学案 浏览:637
亮点支架计算方法 浏览:492
如何斩杀业九的方法 浏览:391
微观经济理论数理分析方法 浏览:391
治疗脂膜炎最好的方法 浏览:703
子宫糜烂物理治疗方法 浏览:1001
多功能收纳架的使用方法 浏览:461
刮痧腿的正确方法视频 浏览:456
小猴子的避暑方法是什么 浏览:145