4x4 4x4键盘问题,有四个键值始终不对,请大家帮帮忙

liu1946 2007-03-23 08:01:03
[#TK1117] 4x4 4x4键盘问题,有四个键值始终不对,请大家帮帮忙
用89c2051做了一个键盘,P1.0-P1.3接上拉电阻,程序如下:
uchar getkey()
{
uchar recode,key;
uchar sccode;
P1=0xF0;
if((P1&0xF0)!=0xF0)
{
delay(200); //延时1MS
if((P1&0xF0)!=0xF0)
{
sccode=0xFE;
while((sccode&0x10)!=0)
{ P1=sccode;
if((P1&0xF0)!=0xF0)
{
recode=(P1&0xF0)|0x0F;
keydd=0; key=(~sccode)+(~recode);
key=changekey(key);
return (key); }
else sccode=(sccode<<1)|0x01;
}
}
}
if((P1&0xF0)==0xF0)
{
delay(200);
if((P1&0xF0)==0xF0)
{
keydd=1;
return 0;
}
}
}

uchar changekey(uchar keystate)
{
switch(keystate)
{

case 0x41: keystate=0x47;break;
case 0x42: keystate=0x49;break;
case 0x44: keystate=0x45;break;
case 0x48: keystate=0x42;break;
case 0x22: keystate=0x48;break;
case 0x24: keystate=0x46;break;
case 0x28: keystate=0x43;break;
case 0x11: keystate=0x51;break;
case 0x12: keystate=0x16;break;
case 0x14: keystate=0x11;break;
case 0x18: keystate=0x41;break;

*case 0x01: keystate=0x50;break;
*case 0x02: keystate=0x15;break;
*case 0x04: keystate=0x12;break;
*case 0x08: keystate=0x44;break;

default: break;
}
DOG=!DOG;
return (keystate);

}

其中打*的四句不对,始终得不到我想要的值(如:keystate=0x50等),其他的都没有问题。一直没有找到原因!请大家帮帮忙看一下,谢谢!

...全文
357 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbing7 2007-04-02
  • 打赏
  • 举报
回复
怎么可能没释放完...

呵呵,只要没加电容,上拉是直接对地的放电,那放的叫一个爽

电子可是以光的速度在跑哈!!

呵呵
waitsomething 2007-04-02
  • 打赏
  • 举报
回复
分不在多,有心则灵。
如果可以但不调试的话建议你在键值不对的地方设置断点,观察是否还存在问题,如果仍存在问题,可能是获取键值的程序有问题,如果单步没问题,全速有问题,那么是硬件上的上拉电阻电量没有释放完全导致的,可以在软件上加入适当的延时,我估计你是第二个原因。
lxbluedream 2007-04-02
  • 打赏
  • 举报
回复
我晕,怎么会有0x01、0x02、0x04、0x08?不应该是0x81、0x82、0x84、0x88?
lbing7 2007-03-24
  • 打赏
  • 举报
回复
才给一分,不厚道

我也给一个不厚道的方法

用硬件仿真,在key=changekey(key);这一句处下断点,

现在你肯定是有四个键没有响应,找出那四个键然后执行,期间按这几个键,看它产生的KEY的值,相应的到你的uchar changekey(uchar keystate)里把相应的值改过来即可,嘿嘿

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧