67

帖子

0

TA的资源

一粒金砂(初级)

81
 
学习了!

回复

71

帖子

0

TA的资源

一粒金砂(初级)

82
 
hao
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

83
 
一般用定时器10毫秒扫描一次
现在市面上的键盘做的不错的,把上次和这次扫描的结果与一下就差不多去掉抖动了,这中间有些细节慢慢研究
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

84
 
luguo
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

85
 

我在网上看到这样一种按键肖抖方式,感觉很不错。

设置状态机有4种状态,A0,A1,A2,A3
初始时处于A0状态,当扫描发现有键按下时,转入到A1状态。
当处于A1状态时,当扫描发现有键按下并且键值等于A1状态下的键值时,转入到A2状态,否则转入A0状态。
当处于A2状态时,当扫描发现有键按下并且键值等于A2状态下的键值时,转入到A3状态,同时发出键按下消息或将按下键的键值入队,否则转入A0状态。
当处于A3状态时,当扫描发现无键按下时,转入到A0状态。同时发出键弹起消息或弹起键的键值入队。
 

 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

86
 
赞同
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

87
 
引用 45 楼 fox_hacker 的回复:
刚在学习单片机,看到一段关于这个的文字,自己还没试:
? 延时12~15ms(机械按键由按下到稳定闭合的时间为5~10ms)



这个看不懂啊。。。。。。。。。。。。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

88
 
引用 46 楼 kitegirl 的回复:
我一般喜欢用“移位法”防抖,原理如下:

LLLLLLLL 0? KeyUp

LLLLLLLH >0 KeyDown

LLLLHHLL >0 KeyDown

HHLLHLHH >0 KeyDown

HHHHHHHH >0 KeyDown

为什么别人都用延时法,而不是这个办法我就不清楚了。


错了,是这个方法看不懂
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

89
 
没什么要求吧,调试出来的最好
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

90
 
软件防抖比较方便,下面是个例子,希望能给你帮助
if(key2==0)
                {
                        delay(10);//防抖
                        if(key2==0)
                                {
                                        if(num==0)
                                        num=60;
                                        num--;
                                        while(!key2);
                                }
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

91
 
接分
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

92
 
mark
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

93
 
可以给下电路图吗?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

94
 
一般10ms够用了,不过我还是比较喜欢硬件防抖,呵呵,延时防抖有时候出错
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

95
 
状态机的方法不错。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

96
 
状态机和移位的方法比较好。但移位的有些不明白,能说的明白一些吗,谢谢!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

97
 
学习了 不过我们项目中现在用的是10ms,目前还没有什么问题
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

98
 
20m左右吧,以前是这么用的,不过还得看你的具体方法,就在这附近
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

99
 
引用 89 楼 huhuheyaoyao 的回复:
软件防抖比较方便,下面是个例子,希望能给你帮助
if(key2==0)
{
delay(10);//防抖
if(key2==0)
{
if(num==0)
num=60;
num--;
while(!key2);
}


你还要不要跑其他代码段啊,典型的教科书思路啊
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

100
 
/**********************************************************************************
函    数:keyscan()
入口参数:无
出口参数:KeyCode
***********************************************************************************/
unsigned char KeyScan(void)
{
  static uchar ClearWobblingCnt;
  static uchar KeyDownCnt;
  unsigned char KeyCode=0,KeyCodeCurrent=0;
  if(iIncrease&&iDecrease)//判断按键释放
  {
          if(ClearWobblingCnt==0)
          {
                  if(KeyState==DOWN)
               KeyState=UP;                    
         ModeSwitchCnt=0;
         bSwitchCnt=0;
         bSwitch=NEVER;
         bTakeKeyCode=NEVER;         
         KeyType=0;
         KeyAge=0;
         KeyDownCnt=0; //按键持续按下的计时清零
          }
          else
            ClearWobblingCnt--;
  }
  else
  {
         if(!iIncrease)KeyCodeCurrent=INCREASE;
         else if(!iDecrease)KeyCodeCurrent=DECREASE;
         else NOP();
         if(ClearWobblingCnt==2)
         {
         if(bTakeKeyCode==NEVER)
         {
                 bTakeKeyCode=ALREADY;
                 KeyCode=KeyCodeCurrent;                              
         }
         else if(KeyDownCnt>UPPER_LIMIT)
         {
                 KeyDownCnt=INITAIL_VALUE;
                 if(KeyType==CONTINUED)
                    KeyCode=KeyCodeCurrent;
                 if(KeyAge<10)//用于蜂鸣器,在KeyDispose_Server()里保证连续键只在第一次按下才名叫
                    KeyAge++;
                 if(bSwitchCnt)
                    ModeSwitchCnt++;   //设置时间的"设置模式转换"计数
             }
            KeyState=DOWN;
            KeyDownCnt++;
      }
      else if(ClearWobblingCnt<2)           //消抖
        ClearWobblingCnt++;   
  }
  return KeyCode;
}
/*********************************************************************************
函    数:KeyDispose_Server
入口参数:函数指针,指向键盘扫描函数
出口参数:无
***********************************************************************************/
unsigned char flag_Setting,ParameterSetting;

void KeyDispose_Server(unsigned char(*KeyScan_ptr)(void),unsigned char *configure)
{  
  switch((*KeyScan_ptr)())
  {       
    case  INCREASE:                 // digit Increase
           configure+=temperature;
                  if(*configure<99)
           {
                              *configure+=1;
                              KeyType=CONTINUED;
                  }
                  /****刷新显示数据****/
           DispBuf[DPY1]=Segment[*configure/10];
           DispBuf[DPY2]=Segment[*configure%10];                             
               /*******************/                           
                  bParameterChanged=YES;        //setting process flag
           bStoreRequire=YES;
                  if(KeyAge<1)             //如果按键一直按下,则键盘扫描函数里将使KeyAge增加到>=1,\
                      flag_beep=SIGNAL;    //按键释放后KeyAge被清零
                  break;
      case DECREASE:                //digit Decrease
           configure+=temperature;
           if(*configure>10)
                  {
                            *configure-=1;
                            KeyType=CONTINUED;
               }
           /****刷新显示数据****/
           DispBuf[DPY1]=Segment[*configure/10];
           DispBuf[DPY2]=Segment[*configure%10];                           
               /********************/                                      
                  bParameterChanged=YES;        //setting process flag
           bStoreRequire=YES;
                  if(KeyAge<1)
                      flag_beep=SIGNAL;                     
                  break;
    default:
           break;
  }
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表