论坛风格切换切换到宽版
  • 2586阅读
  • 4回复

我这查键函数有啥问题么? [复制链接]

上一主题 下一主题
离线BG4UVR
 
发帖
11288
只看楼主 倒序阅读 0楼 发表于: 2006-11-07
这个函数,大多数按键都正常。只有一个按键,会没松键的时候就被检测到。实在搞不懂!大概我什么地方把缓冲给改写了,但找来找去没找着…… 严重郁闷,卡在这了……

  1. //键值处理函数
  2. unsigned char key_cal(void){
  3.      unsigned char temp;
  4.      if((key_buf|0x60)!=0xff){//屏蔽5/6位
  5.            delayms(10);//延时10ms
  6.            if((key_buf|0x60)!=0xff){//再读
  7.                  temp=key_buf;
  8.                  while((key_buf|0x60)!=0xff);//等松键
  9.                  delayms(10);
  10.                  return(temp);
  11.            }
  12.      }
  13.      return(null);
  14. }
离线BD6KF
发帖
1126
只看该作者 1楼 发表于: 2006-11-07
delayms(50)实验一下
离线BG4XCR
发帖
33381
只看该作者 2楼 发表于: 2006-11-08
去抖时间太短
离线BG4UVR
发帖
11288
只看该作者 3楼 发表于: 2006-11-08
在出差,没法做实验。但问题是,5个按键,有4个是完全正常的,只有1个不正常。
离线BG4UVR
发帖
11288
只看该作者 4楼 发表于: 2006-11-10
通过实验,已确定不是延时过短的问题。

而且发现一个更过份的事:

把null定义成0x00时,那个不正常的键,按下去没松开就会检测到。可把null定义成0xff,那么,无论怎么按,这个键也检测不到。

到了这里,看起来似乎不是这个函数本身的问题了,似乎是调用函数的地方有计算错误,可问题是,仍然没能够在调用的地方发现问题。

严重郁闷。我找到原因后,会在这只公布。(这事感觉太怪了,不过还是相信,应该是我的程序什么地方考虑不够周到)

btw:那个不正常的键的键值是: (msb)1xx1 1110(lsb)

1xx1 1101
1xx1 1011
1xx1 0111
1xx0 1111
以上4个键,工作完全正常,而不管null的值是0x00还是0xff