51单片机非常简洁的矩阵扫描程序
Posted prodigal-son
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机非常简洁的矩阵扫描程序相关的知识,希望对你有一定的参考价值。
/*按键的键位定义*/
unsigned char code anj[4][4] = {
1, 2, 3, 10,
4, 5, 6, 11,
7, 0, 9, 12,
13, 8, 14, 15,
};
char ScanKey()
{
char key = -1;//赋值用于判读没有按下
unsigned i,j;
for (i = 0;i < 4;i++)
{
P1 = _cror_(0x7f,i);
for (j = 0;j < 4;j++)
{
if ((P1 & _cror_(0x08,j)) == 0)
{
key = anj[i][j];
while ((P1 & _cror_(0x08,j)) == 0);//松手检测
break;
}
}
}
return key;
}
原理:
比如高位是行低位是列
先给P1复制 0111 1111
然后&上 0000 1000
如果第一列有按下那么
0111 1111
& 0000 0000 (有按键按下 0000 1000 变为 0000 0000)
= 0000 0000
自然就得到 (1,1)这个位置的按键按下了 加上右移(_cror_())后面的都以此类推就可以检测所有的按键了。
以上是关于51单片机非常简洁的矩阵扫描程序的主要内容,如果未能解决你的问题,请参考以下文章
51单片机C语言,电子密码的验证输入程序,矩阵键盘用作输入,密码正确时,向串口送1,否则送0