密码锁毕设求助 仿真成功 单片机实物键盘最后一行没用

2019-07-15 11:04发布

求大家解惑,我的密码锁程序下载到单片机里前三行键盘(4*4)可用,最后一行没用。如果1、4行线换接,最后一行变成第1行,键可用,第一行仍然不可用,且用别人的单片机也这样(是否排除硬件问题?)。
下面是我的键盘扫描程序 是否有问题呢?
uchar keyscan(void)           //键盘扫描
{
uchar temp,zhi;
P1=0x7f;
temp=P1&0x7f;
if(temp!=0x7f)
{
delay(10);
P1=0x7f;
temp=P1&0x7f;
if(temp!=0x7f)
{
P1=0x7f;
temp=P1&0x7f;
switch (temp)
{
case 0x7e:zhi=1;break;
case 0x7d:zhi=2;break;
case 0x7b:zhi=3;break;
case 0x77:zhi=4;break;
}
while(temp!=0x7f)
{
P1=0x7f;
temp=P1&0x7f;
}
return zhi;
}
}
P1=0xbf;
temp=P1&0xbf;
if(temp!=0xbf)
{
delay(10);
P1=0xbf;
temp=P1&0xbf;
if(temp!=0xbf)
{
P1=0xbf;
temp=P1&0xbf;
switch (temp)
{
case 0xbe:zhi=5;break;
case 0xbd:zhi=6;break;
case 0xbb:zhi=7;break;
case 0xb7:zhi=8;break;
}
while(temp!=0xbf)
{
P1=0xbf;
temp=P1&0xbf;
}
return zhi;
}
}
P1=0xdf;
temp=P1&0xdf;
if(temp!=0xdf)
{
delay(10);
P1=0xdf;
temp=P1&0xdf;
if(temp!=0xdf)
{
P1=0xdf;
temp=P1&0xdf;
switch (temp)
{
case 0xde:zhi=9;break;
case 0xdd:zhi=10;break;
case 0xdb:zhi=11;break;
case 0xd7:zhi=12;break;
}
while(temp!=0xdf)
{
P1=0xdf;
temp=P1&0xdf;
}
return zhi;
}
}
P1=0xef;
temp=P1&0xef;
if(temp!=0xef)
{
delay(10);
P1=0xef;
temp=P1&0xef;
if(temp!=0xef)
{
P1=0xef;
temp=P1&0xef;
switch (temp)
{
case 0xee:zhi=13;break;
case 0xed:zhi=14;break;
case 0xeb:zhi=15;break;
case 0xe7:zhi=16;break;
}
while(temp!=0xef)
{
P1=0xef;
temp=P1&0xef;
}
return zhi;
}
else
{
zhi=0;
return zhi;
}
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。