本人在做proteus仿真时发现一个秘密,也许很多朋友在做键盘时不能得到预期结果,可能就是因为此原因,希望对你有帮助。
在键盘输入时,proteus会对输入端口的数字做一定时间保持模拟现实输入,如果你的延时程序或者处理程序很短,在下一次按键程序就会自动执行未知按键,从而发生未知错误,例如 :
uchar keyscan(void)
{ uchar i="1";
uchar scancode,tmpcode;
p2=0xf0
while(i)
{ if ((P2&0xf0)!=0xf0)
{
delay();
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P2 = scancode; // 输出行扫描码
if ((P2&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P2&0xf0)|0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
scancode=0x00;
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
}
}
此程序如果第一次按键,处理按键程序很短的话,第二次执行时就会p2=0xf0就会执行错误,从而产生未按键也会执行下面的程序,产生错误按键结果。
如果在p2=0xf0改为 while(P2!=0xf0)
{P2=0xff;
P2=0xf0;
}
就不会产生错误 。
多提意见
用户1534261 2008-10-27 22:55
huli184_389376486 2008-10-7 11:37
huli184_389376486 2008-10-7 11:28