键盘扫描的消抖

[复制链接]
5108|34
 楼主| heweibig 发表于 2012-5-13 18:47 | 显示全部楼层
上升沿我一般少用得到,要用也行,不过还要加多抬起的消抖。
jlyuan 发表于 2012-5-13 18:48 | 显示全部楼层
void main()
{
  P3=0xff;
  wela=1;
  P2=0x00;
  wela=0;
  while(1)
  {
  if(d2==0)    //检测是否有键按下
  {
  delay(5);
  if(d2==0)   //确认是否有键按下
  {
  P1=0x00;
  num++;
  if(num==16)
  num=0;
  }
  while(!d2);   //键盘松手检测
  delay(5);
  while(!d2);
  }
  else
  P1=0xff;
  dula=1;
  P0=table[num];
  dula=0;
  }
  }
  void delay(uint z)
{
  uint x,y;
  for(x=100;x>0;x--)
     for(y=z;y>0;y--);
}
我用的是5MS,还行。。。用键盘加数减数枚问题。。带松手检测按下松开后相应。。。这是我学习键盘时写的一个小程序希望对你有用。。。
 楼主| heweibig 发表于 2012-5-13 18:48 | 显示全部楼层
谢谢,不过,消抖还是要中断的好
yszong 发表于 2012-5-13 18:50 | 显示全部楼层
键盘 我的做法是例如定时1ms扫描一次键盘,若连续10次扫描到按键按下,则查询按键已经按下标志:
此标志为0则证明这是新的按下行为,置标志,处理按键程序;
此标志为1则证明按键已经按下,处理程序已经执行,不再重复执行。
扫描时发现按键释放,则清标志。
dengdc 发表于 2012-5-13 18:51 | 显示全部楼层
消抖只是一个概念,一般在几个MS~100MS之间
延时也是消抖,定时调用也是消抖,只是实方法不同
wuhany 发表于 2012-5-13 18:52 | 显示全部楼层
楼主这个程序稍作修改就能得到你想要的结果

bit   fg_shake;               =0
bit   fg_scan;                 =0

//中断中,每10ms就fg_scan=1;
void    main(void)
{
         -----;
         if(fg_scan==1)
         {
                    fg_scan = 0;
                    keyscan();
         }
}

void   keyscan(void)
{
         if(key_on ==1) //有键按下
         {
                   if(fg_shake==0)  
                   {
                               fg_shake=1;
                   }
                   else  if(fg_shake_1==0)  
                   {
                               fg_shake_1=1;
                              //按键处理

                   }
         }
         else   fg_shake =0;
}
 楼主| heweibig 发表于 2012-5-13 18:54 | 显示全部楼层
我整理一下,多谢大家
 楼主| heweibig 发表于 2012-5-13 18:55 | 显示全部楼层
先结贴吧
sysdriver 发表于 2012-5-13 22:48 | 显示全部楼层
怎么感觉这些对话那么熟悉啊....
李冬发 发表于 2012-5-13 23:48 | 显示全部楼层
5ms读一次,只要不是按下,清计数值。当计数值大于5至10时,读键值。
nishiwodeduyao 发表于 2012-5-14 10:21 | 显示全部楼层
手动最快的速度是100ms
nongfuxu 发表于 2012-5-14 13:41 | 显示全部楼层
每隔1ms扫描一次键盘, 有键盘输入时7~15ms消抖.
FEIFEIWENDAO 发表于 2012-5-14 16:20 | 显示全部楼层
毫秒级别
ayb_ice 发表于 2012-5-15 10:00 | 显示全部楼层
简单的计数即可
szyijitong 发表于 2012-5-15 10:55 | 显示全部楼层
一般20ms
键盘是不停的打描的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部