4*4 独立键盘 求51单片机高手

2024-12-27 22:50:26
推荐回答(5个)
回答1:

你的程序里for是嵌套循环,所以这个会一直循环到j=4,i=4,为止,又数码管显示的数组就0~15个,则for循环最后出来的value一直是等于15的,所以一直显示F

回答2:

……
if (P1=buf[j])  --这里,是等号?

if里面,是不是应该写双等号? 大于等于...,也行。

{

P1=0X0F;
……

回答3:

uchar buf[]={0x08,0x04,0x02,0x01};
uchar buf2[]={0x80,0x40,0x20,0x10};
uchar Keyscan()
{ uchar value;
uchar i,j;
for(j=0;j<4;j++)
{
P1=buf[j];
for (i=0;i<4;i++)
{
if ((P1&0xf0)==buf2[i])
value=4*j+i;
}
}
return value;
}

回答4:

这样方法不好做,可以试试反转法。
思路:
第一次送F0,读取回来保存;
第二次送0F,读取回来保存;
把一次和二次读回来的数据相或就对应了按键的值,再根据此值查表就得到键码了。

回答5:

参考一下这个,仿真实例 试试