unsigned char KeyScan(void) //键盘扫描函数,使用行列逐级扫描法
{
unsigned char Val;
KeyPort=0xf0;//高四位置高,低四位拉低
if(KeyPort!=0xf0)//表示有按键按下
{
DelayMs(10); //去抖
if(KeyPort!=0xf0)
{ //表示有按键按下
KeyPort=0xfe; //检测第一行
if(KeyPort!=0xfe)
{
Val=KeyPort&0xf0;
Val+=0x0e;
while(KeyPort!=0xfe);
DelayMs(10); //去抖
while(KeyPort!=0xfe);
return Val;
}
KeyPort=0xfd; //检测第二行
if(KeyPort!=0xfd)
{
Val=KeyPort&0xf0;
Val+=0x0d;
while(KeyPort!=0xfd);
DelayMs(10); //去抖
while(KeyPort!=0xfd);
return Val;
}
KeyPort=0xfb; //检测第三行
if(KeyPort!=0xfb)
{
Val=KeyPort&0xf0;
Val+=0x0b;
while(KeyPort!=0xfb);
DelayMs(10); //去抖
while(KeyPort!=0xfb);
return Val;
}
KeyPort=0xf7; //检测第四行
if(KeyPort!=0xf7)
{
Val=KeyPort&0xf0;
Val+=0x07;
while(KeyPort!=0xf7);
DelayMs(10); //去抖
while(KeyPort!=0xf7);
return Val;
}
}
}
return 0xff;
}
/*------------------------------------------------
按键值处理函数,返回扫键值
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;//0 按下相应的键显示相对应的码值
case 0x7d:return 1;break;//1
case 0x7b:return 2;break;//2
case 0x77:return 3;break;//3
case 0xbe:return 4;break;//4
case 0xbd:return 5;break;//5
case 0xbb:return 6;break;//6
case 0xb7:return 7;break;//7
case 0xde:return 8;break;//8
case 0xdd:return 9;break;//9
case 0xdb:return 10;break;//a
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
哈哈,你不用看懂的啊。。我已经解决了。。人一但被逼急了,就能爆发出无穷的能量。。
矩阵键盘扫描程序分析
矩形键盘扫描程序分析如下:1、在键盘中按键数量较多时,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接;2、一个端口就可构成16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键...
C语言矩阵键盘函数疑问
看程序中P1.0-P1.3是行扫描输出,P1.4-P1.7是扫描输入。所以原理是P1.0-P1.3中每次只有一个引脚输出0,其余输出1,然后读取P1.4-P1.7是否有引脚为0;如果有0说明有按键按下,如果全1说明没有按键按下。scancode这个变量就是用于控制P1.0-P1.3(P1 = scancode;由这句输出)中每次...
单片机矩阵键盘键号的判别
每行有8列,第2行的行首号(因为行号从0开始,所以行号为2的行,按照习惯是第3行)为16,列号为1,那么键号就为16+1=17 下面有扫描2*4键盘的汇编程序(你的是4*8,即4行8列的键盘),仅供参考 看不懂不强求,希望对你有所帮助 DATA SEGMENT TABLE DB ‘A’ ,‘B’ ,‘C’ ,‘D...
51单片机键盘矩阵扫描代码的理解
本人是学C的,但还看得懂汇编语言。MOV P2,A 是把扫描码赋给P2口,其实是赋给P2口的低四位,进行扫描;MOV A,P2 是读取P2口的值,后面一句把低四位屏蔽了,最终还是读取了高四位
矩阵键盘矩阵式键盘的按键识别方法
矩阵键盘的按键识别方法通常采用两种策略:行扫描法和高低电平翻转法。1. 行扫描法:这是最常见的识别方法。首先,将所有行线(如Y0-Y3)置低电平,检查列线状态。若有一列变为低电平,则说明有键按下,其位置在该列线与4个行线交叉的按键中。如果所有列线都保持高电平,则无键按下。接着,逐行...
单片机4×4矩阵键盘扫描编程问题(里面详细,欢迎高手)
扫描第一行,就是将第一行电平置为低电平,其他的都为高,扫描哪一行就让哪一行的电平置零,其他行为高电平。这就是第一个问题。在没有键按下的时候,列线全部是高电平,有第一行的键按下的时候,相应的列线就为低电平了,n=P1;n&=0xf0;if(n!=0xf0)这几句就是判断有没有键按下。在第...
谁能帮我解释一下这个程序中的这个(键盘扫描函数,使用行列反转扫描法...
你用的是4x4的矩阵键盘的行列反转扫描吧,这种方法确定一个键码要分成3步:第一步:将行IO置低电平,列IO置高电平,读数据。按下任意键时,将有一个列IO被拉低,于是读到类似00001011的数据 第二步:将行IO置高电平,列IO置低电平,重复第一步,读到类似11010000的数据cord_l=P3&0xf0;本句取...
C51矩阵键盘扫描 请解释一下程序 特别是关键步骤 急!!!
列扫描线是输出,行扫描线是输入。下面就程序作一个说明 (***)表示注意点 1、首先判断整个键盘有无按下键,只要行扫描线输入不为全1,(1111)即有键按下;P1 = 0xf0;if((P1&0xf0)!=0xf0) 如果无按键按下,全1,则返回return -1;如果有键按下则延时,再次判断有无按键按下,Delay();...
我想要一份矩阵键盘的操作说明书
矩阵键盘的扫描就是三个步骤:1:判断是否有按键按下,同时要注意去抖动。明白一个道理:矩阵键盘的任何一个按键按下所产生的效果就是把P1的两个IO口连接起来,也就是P1口低四位中的某一个口跟P1口高四位中的某一个口连接起来了。同时要知道,低电平的IO口会把高电平的IO口电平拉低,如果他们相...
51单片机矩阵键盘扫描程序,怎样判断当前按键式第几行的?
p3=fe就是扫描第一行,然后&上f0就是屏蔽低位高位不等于f0则有建按下,后面你那个12345678……就是第几个建,如你的例子,=ed的时候是发生在p3=fd的程序,fd是第二行手机打字欢迎追问