用于矩阵键盘检测的行和列扫描方法:
以1到16的顺序为矩阵键盘编号,并通过以下扫描过程获取返回值以确定按下了哪个键。

矩阵键盘检测原理:
1、查询是否按下了一个键。
2、按键抖动处理。

3、查询所按下键的行和列位置以获取键值。
先行然后列扫描方法
#include
#define uchar unsigned char
#define uint unsigned int
#define temp P2 //定义按键I/O口
uchar keyscan()
{
uchar num;
temp=0xf0;
if(temp!=0xf0) //检测是否有键按下
{
delay_ms(5); //延时消抖
if(temp!=0xf0) //再次检测是否有键按下
{
temp=0xf0; //对应IO口拉高,以便检测
switch(temp) //先确定行
{
case 0x70: num=1; break; //第一行
case 0xb0: num=5; break; //第二行
case 0xd0: num=9; break; //第三行
case 0xe0: num=13; break; //第四行
}
temp=0x0f; //对应IO口拉高,以便检测
switch(temp) //再确定列
{
case 0x07: num=num+0; break; //第一列
case 0x0b: num=num+1; break; //第二列
case 0x0d: num=num+2; break; //第三列
case 0x0e: num=num+3; break; //第四列
}
}
}
return num; //结合行列扫描的值得出按键对应的数值,并返回
}

先列然后行扫描方法
#include
#define uchar unsigned char
#define uint unsigned int
#define temp P2
uchar keyscan()
{
uchar num;
temp=0x0f;
if(temp!=0x0f)
{
delay_ms(5);
if(temp!=0x0f)
{
temp=0x0f; //先确定列
switch(temp)
{
case 0x07: num=1; break;
case 0x0b: num=2; break;
case 0x0d: num=3; break;
case 0x0e: num=4; break;
}
temp=0xf0; //再确定行
switch(temp)
{
case 0x70: num=num+0; break;
case 0xb0: num=num+4; break;
case 0xd0: num=num+8; break;
case 0xe0: num=num+12; break;
}
}
}
return num;
}
注意:这里的排名是相对的。这取决于您自己的接线。请亲身体验。希望对大家有帮助!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-357408-1.html
从经济学角度来看
那就别人说人话了
那苏联人死两千万人