harng 发表于 2008-4-16 12:18:11

马老师,请教一个按键问题

马老师:
      你好,你的状态机按键程序,我已经看过了,也在实验板上测过了,感觉相当好,但有一个问请教一下马老师,就是我想用一个按键实现计数器按一下开始,在按一下暂停,在按一下又开始,连续按按两下就停止的程序怎么写呀,希望马老师指点一下,

mljda 发表于 2008-4-16 12:35:36

自己写,慢慢调来的好些!
按键检测程序()
{
   if按键按下
   {
   if 按键计数=0;
       按键计数=1;
       if 计数切换 = 0
       {开始计数;
          计数切换=1;
      }
       else
       {计数切换=0;
          暂停计数;
      }
       按键计时开始;
   elseif 按键计数=1 & 按键计时<双击最大间隔
       按键计时关闭;
       关闭计数;
   }
}

按键计时程序()
{
    if按键计时>大于双击最大间隔
   {    按键计数=0;
       关闭按键计时;
   }else
   {
      按键计时++;
    }
}

harng 发表于 2008-4-16 15:58:11

我自已写的是这样的结构:
按键检测程序
{COUNT++//计数
   if(count>4)
    {cont=0}
    switch(count)
    {
      case 1:
            计数开始程序
   case 2:
            计数暂停
      case 4:
             计数停止
   }

不知这种结构行不,但就是调不出来呀

mljda 发表于 2008-4-16 18:35:48

不对!
你的功能是 1 单击切换状态 2 双击(连续点击)关闭

如果要检测双击,必须要计时器。才能检测有没有在规定时间里连续击打两次按键。

machao 发表于 2008-4-16 20:59:51

lz,程序不重要,关键是通过例子去掌握思想和方法,那么你就能根据自己的需要设计编写程序了.

"用一个按键实现计数器按一下开始,在按一下暂停,在按一下又开始,连续按按两下就停止的程序怎么写呀"

首先你对于系统的描述和理解就不清楚:

1.首先怎么区别什么是"按一下"和"连续按两下",其中的时间间隔应该有定义.比如在0.5s间隔内按下键算连续2下,间隔1s以上算一下.

2.正常操作过程以及可能出现的过程如何处理?"按一下开始,再按一下暂停,再按一下又开始,连续按按两下就停止"太简单了.那么当按一下开始后连续按按两下应该如何处理?或连续按按两下后又连续按按两下怎么处理?

3.你把所有的过程分析清楚了,用状态图正确表示出来,再开始编写代码.

4.在你的应用中,还存在问题要解决.按键要消抖,可能需要10-20ms后才能确定一次按键,那么计数的准确性就会受到影响,实际系统允许吗?如果要测试反映时间,那么ms级的误差可能是不允许的.按键系统的设计就要做不同的变化.

不要小看一个按键处理,需要一定水平的人才能编写出真正适合系统的按键处理程序.

harng 发表于 2008-4-17 10:10:53

马老师,谢谢你,想问一下,有没有这方面的例程呀

machao 发表于 2008-4-17 12:58:28

怎么老是动不动的要例程呀.

taishandadi 发表于 2008-4-18 10:57:48

很多人喜欢看例程。自己看书,看资料,自己学者编写,能掌握的更快。

machao 发表于 2008-4-18 16:15:52

不可能有包罗万象的例程呀.

harng 发表于 2008-4-21 12:42:36

一键多功能终于搞明白了,谢谢马老师

zrhxy 发表于 2008-5-6 11:41:33

马老师真是耐心呀,讲解的真是详细.
页: [1]
查看完整版本: 马老师,请教一个按键问题