单片机矩阵键盘的键号=行首字+列号

作者&投稿:澹娅 (若有异议请与网页底部的电邮联系)
单片机矩阵键盘键号的判别~

PA口接列线,PC口接行线
扫面列线,读取行线状态....行线默认都为高电平,当行线和列线相交时,某一列线为低电平,那么如果这一列没有键按下,行线的状态依然为高电平,如果有键按下,那么行线被短路,变为低电平,哪条行线输出低电平,那么就是这一行的键被按下,又知道是在哪一列,也就完全确定按下的是哪一键了...也就是行首号加列号就是键号(行号和列号都是从0开始的)
应该是第一行的首键号为8,列号为1,所以闭合键号为9吧(你自己前面说的也是:闭合键的键号等于为低电平的列好加上行线为低电平的行的首键号)
扫描的意思就是没开始扫描时,列线全部为高电平,开始扫描时,先第0列变为低电平,其他列仍然是高电平,然后第1列变为低电平,其他列仍然为高电平(包括前面变低电平的0列,现在也恢复高电平了),然后是第2列变为低电平,其他列为高电平,直到第7列为低电平,其他列为高电平,完成一次扫描...
还有“PA口输出为11111101时,就是第1列输出为低电平,其他列为高电平,列为输入口,不读取它的状态,行口为输出口,读取行状态,若pc0~pc3输出1101,如果pc0~pc3依次对应行0~3的话,那么第2行为低电平(你说:则1行1列相交键处于闭合,是pc0~pc3依次对应行3~0的情况),则1列2行相交的键闭合,每行有8列,第2行的行首号(因为行号从0开始,所以行号为2的行,按照习惯是第3行)为16,列号为1,那么键号就为16+1=17
下面有扫描2*4键盘的汇编程序(你的是4*8,即4行8列的键盘),仅供参考
看不懂不强求,希望对你有所帮助
DATA SEGMENT
TABLE DB ‘A’ ,‘B’ ,‘C’ ,‘D’ ,‘E’ ,‘F’ ,‘G’ ,‘H’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,81H;使8255的A口和C口,并初始化
OUT 63H,AL
START1:
CALL EXAM;判断是否有键按下的子程序
JZ START1
CALL DELAY;延时程序,判断键是否误按
CALL EXAM
JZ START1;如果是误按,返回开始处,如果为否,顺序执行
MOV CL,00H ;开始键号判断
MOV CH,0FEH
CHECK:
MOV AL,CH
OUT 60H,AL
IN AL,62H ;从c口读数据,也就是读取行的状态...
TEST AL,01H;判断是否为第0行
JNZ OTHER ;不是,则转OTHER处
MOV AL,00H ;是的话,行首号置0
JMP KCODE;确定键号
OTHER: ;判断是否第1行
TEST AL,02H
JNZ NEXT ;不是则跳到NEXT处,进行下一列的判断
MOV AL,04H ;第1行行首号置4
KCODE: ;确定键号
ADD AL,CL
MOV BX,OFFSET TABLE
AND AX,0FFH
ADD BX,AX
MOV AL,[BX]
MOV [DI],AL
MOV AH,01H
MOV AL,[DI]
INT 10H
NEXT: ;进行下一列的判断
INC CL
MOV AL,CH
TEST AL,08H
JZ START1
ROL AL,1
MOV CH,AL
JMP CHECK
EXAM PROC
MOV AL,00H
OUT 60H,AL
IN AL,62H
NOT AL
TEST AL,03H
RET
EXAM ENDP
DELAY PROC
PUSH CX
MOV CX,0010H
T1:
MOV AX,1000H
T2:DEC AX
JNZ T2
LOOP T1
POP CX
RET
DELAY ENDP
CODE ENDS
END START

按键机:#includeunsigned char keyval,keynum=0;void t0isr() interrupt 1{unsigned char sccode,recode;TH0=(65536-10000)/256;TL0=(65536-10000)%256;P3=0x0f; //发0扫描,列线输入if ((P3 & 0x0f) != 0x0f)keynum++; //有键按下else keynum=0;if(keynum>5)//按键保持在5次中断以上{keynum=0;sccode = 0xef; //逐行扫描初值while((sccode&0x01)!=0){ P3=sccode;if((P3&0x0f)!=0x0f){ recode=(P3&0x0f)|0xf0;getkey((~sccode)+(~recode)); } elsesccode=(sccodeunsigned char distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};main(){TMOD=0x20;TH1=0xfd;TL1=0xfd;SCON=0x50;TR1=1;while(1){if(RI) { RI=0; P0=distab[SBUF]; }}}

这些,都是自定义的。

对于 4*4 的键盘,四个行首字,可以定为:0、4、8、12。
它们和行号的关系就是:4 * 行号。

四个列号,可以定为:0、1、2、3。

参考:
http://zhidao.baidu.com/question/298046533.html

其中检测按键的返回值就是:return (i + j * 4); //如果为0就返回按键值

如下阵列:

行/列 0 1 2 3
0 1 1 1 1
1 1 0 1 1
2 1 1 1 1
3 1 1 1 1
如上所示,第1行1列键被按下
那么键值就等于:1*4+1=5,
这里行首字=1*4(之所以乘4是因为是四列)

如图:



只不过是个标号而已啊


PIC16F877A的4*4矩阵式按键程序该怎么写
这个题目,矩阵式键盘:要求用PIC16F877单片机作为主控制器,4×4矩阵键盘作为输入设备,当按下矩阵按键的相应键时,在一只LED数码管上显示出相应的键号,同时,当键按下时,蜂鸣器响一声。(要求:画出硬件电路图,用C语言编写出以上程序) 我不知怎么来用C语言编程。。。 本回答由提问者推荐 已赞过 已踩过< 你对...

矩阵键盘的按键识别方法
在学习有关矩阵键盘的时候,往往要学会矩阵键盘的按键识别方法,那么矩阵键盘的按键识别方法有哪些呢?我带着你来了解 方法一 行扫描法 1、判断键盘中有无键按下 将全部行线P1.4-P1.7置低电平,当然P1.0-P1.3为高电平(或许芯片内部已经将这些引脚它上拉),然后检测列线的状态。只要有一列的...

单片机 矩阵键盘 怎么扫描多个数?
将接键盘的端口置为读状态,例如接在P1口上的4*4键盘就写:MOV P1,#0F0H 然后读P1口的状态,然后消除键抖动,在确定有键按下的情况下逐个判断P1.0,P1.1P,P1.2,P1.3的状态,再逐个判断P1.4,P1.5,P1.6,P1.7的状态,最后的键值等于行首号加列号。行首号从上到下依次为:0,4,8,...

4X4 矩阵键盘,实现自己定义键号为0~9,A~F,编程实现按下按键抬起后在多...
0x7e,0x7d,0x7b,0x77}; \/\/键盘代码 void delay(unsigned char a) \/\/延时 { unsigned char i;while(a--)for(i=100;i>0;i--);} uchar kbscan(void) \/\/键盘扫描 { unsigned char hang,lie,key;P1=0xf0;delay(5);lie=P1;P1=0x0f;delay(5);hang=P1;for(key=16;key>0;key...

写一个2*4的矩阵式按键的检测程序,方便移植
单片机系统区域P3.0-P3.7端口用8芯排线连接4X4行列式键盘区域C1-C4 R1-R4端口;单片机系统区域P0.0\/AD0-P0.7\/AD7端口用8芯排线连接四路静态数码显示模块区域任a-h端口;要求:P0.0\/AD0应着aP0.1\/AD1应着b……P0.7\/AD7应着h 程序设计内容 4×4矩阵键盘识别处理 每按键行值列...

矩阵键盘逐行扫描原理是什么
矩阵键盘逐行扫描是一种常用的键盘扫描技术。在这种技术中,键盘的按键是按照矩阵形式排列的。每行和每列都有一个电路,并且在键盘扫描时,会依次选中每一行或列。当系统扫描第一行时,会将第一行的电路激活,并将其余行的电路断开。如果在第一行中的某个按键被按下,系统会检测到一个电信号,从而...

急!急!急!单片机4x4矩阵键盘的键值与红外遥控板的键值类型是否一样...
键值是不一样的,4x4矩阵键盘是直接读单片机的8位口。P0 P1 P2或是P3,是并行数据的键值。红外遥控板的键值是由一系列的串码构成的,常用的红外编码包括起始码+8bit用户码+8bit用户反码+8bit数据码+8bit数据反码+连发码。引导码(起始码)高电平9ms,低电平4.5ms;系统码8 位,数据码8 位,...

单片机电子琴 用矩阵键盘代表琴键 求帮助
1)知道怎么驱动矩阵键盘,识别按下的键盘(可以是单键或者多键);2)音符振荡器,如键值 1--7分别对应音符 1--7,这样需要对应输出不同的音频频率,这个可以百度找到。这些都是为了给定时器设备不同的参数以便输出所需要的音频频率;3)按下单键得到单音,按下双键(或多键)你还可以定义为其他音...

proteus里面的矩阵键盘在哪里找?
1、打开proteus,在原理图界面点击P按钮,进入元器件选择界面;2、在器件查找界面,关键词输入KEY,点enter键查找,然后选择Switches & Relays,就得到四 个搜索结果;3、单击查找结果,即可在右侧查看元器件符号,双击可添加元器件到器件栏;4、以下是查找到的四种矩阵键盘,分别是计算器键盘、简易计算器...

谁能给我讲明白单片机的4x4矩阵键盘工作原理
给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。因此P1的值就不等于0xf0,这是就可以判断有按键按下。4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉...

万宁市13584254372: 单片机 行列矩阵键盘 -
纳钢艾达: 这是一种常见的4*4矩阵键盘扫描按键的方法.其原理是先把4条列线设置为低电平,然后扫描行线,如有按键被按下,必定有一条行线为低电平;再把为低电平的行线设置为低电平,然后扫描列线,如有按键被按下,必定有一条列线为低电平....

万宁市13584254372: 单片机 矩阵键盘 怎么扫描多个数? -
纳钢艾达: 将接键盘的端口置为读状态,例如接在P1口上的4*4键盘就写:MOV P1,#0F0H 然后读P1口的状态,然后消除键抖动,在确定有键按下的情况下逐个判断P1.0,P1.1P,P1.2,P1.3的状态,再逐个判断P1.4,P1.5,P1.6,P1.7的状态,最后的键值等于行首号加列号.行首号从上到下依次为:0,4,8,C,列号从左到右依次为0,1,2,3,例如第二列第三个数应该为4+2=6,第三行第二个数应为8+1=9,第一个应为8+0=8.4*4键盘最后一个数应为第四行初值C+第四列值3=键码F.让我们共同进步.

万宁市13584254372: 单片机矩阵键盘如何输入多位数?程序 -
纳钢艾达: 1.声明个全局变量用于存储按键码(具体要多大的数据位,取决于你的应用).2.调用底层按键驱动程序获取按键码.3.通过数学运算把,按键码存储到全局变量中.4.显示出来,看正确否...

万宁市13584254372: 请问单片机中的4*4矩阵键盘的键值怎么求??? -
纳钢艾达: 单片机书上应该有讲的哦,多查资料. 既然是4x4,即4行4列了,共需要8个I/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx.还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I/O口电平状态,每...

万宁市13584254372: C 51单片机 矩阵按键 -
纳钢艾达: 首先记住,你的是矩阵键盘,就是说一个按键A的一端接单片机的一个脚(假设P00),另一个也接一个脚(假设P07), GPIO_KEY=0x0f; 当没有按下的话,GPIO_KEY还是等于0x0f的,假设按下A按键,由于按键两边一个接高电平,一个接低电平,按下后,高电平被低电平拉成低电平,也就是说按键A两侧都是0,此时不就可以判定了嘛

万宁市13584254372: 独立式按键和矩阵式按键的使用特点 -
纳钢艾达: 独立式按键:直接由I / O线组成的单个按钮电路,其特征在于每个按钮分别占用一条I / O线,适用于八个按键. 矩阵式键盘:它由行和列线组成,按钮位于行和列线的交点处.当按钮数量很大时,矩阵式键盘较之独立式按键键盘要节省很多I/O口...

万宁市13584254372: 单片机,里面的矩阵键盘用的按键行坐标*4+案件列坐标的方法怎么做?具体意思是什么? -
纳钢艾达: 前面的程序,够滥的.dispbuf》9转换成ASCIi为什么+0x37或者0x30.---- 数字 0~9:加上 30H 即为 ASCII 码.数字 A~F:加上 37H 即为 ASCII 码.

万宁市13584254372: 矩阵键盘与单片机怎么连接 -
纳钢艾达: 矩阵键盘是行x列,需要看你矩阵的多少而定,接单片机IO口P0、P1都可以 矩阵键盘就是个按键阵列,不需要电源和地,电源和地是接单片机的

万宁市13584254372: 51单片机4*4矩阵键盘如何同时实现单击+双击的功能? -
纳钢艾达: 一般地,我们的键盘检测都有一个按键码存储字节,一般情况下,只要检测到有效按键,那么这个存储字节的按键码就有效,也就是单击.何为双击呢?双击就是在监测到该按键后在该按键要有作用(这个作用就是单击)之前又检测到该按键,然后就当作了双击.那怎么实现这一判断呢?我们只要加一个软计数器,当检测到有效按键后,该计数器开始向下计数,如果计数器自然减到了0那么就是单击生效;如果在该计数器值没有减到0之前又检测到该按键,那么就是双击立马有效同时计数器归零.这个计数器肯定是ms级的,也就是要在定时器里工作,只要它不为0,那么定时器中断服务就对它减1操作,因此计数器本身同时就是一个开关量,而触发它的是检测到有效按键.

万宁市13584254372: 51单片机矩阵按键 -
纳钢艾达: i=keyscan(); delay(50); while(i==keyscan());

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网