打印

凑热闹我也发个使用状态机的键盘程序,支持单键和双键

[复制链接]
楼主: mohanwei
手机看帖
扫描二维码
随时随地手机跟帖
21
efen| | 2010-1-24 13:29 | 只看该作者 回帖奖励 |倒序浏览
请教LZ究竟什么是状态机??
是按下键设置标志位,然后轮询么?

使用特权

评论回复
22
laslison| | 2010-1-24 18:49 | 只看该作者
状态迁移图太模糊

使用特权

评论回复
23
32446975| | 2010-4-15 08:49 | 只看该作者
学习了。

使用特权

评论回复
24
john_light| | 2010-4-15 10:39 | 只看该作者
不错。

个人习惯在使用常量和枚举量时,名称全大写……

使用特权

评论回复
25
cj05311321| | 2010-4-21 13:24 | 只看该作者
mark

使用特权

评论回复
26
pinyione| | 2010-4-21 13:28 | 只看该作者
留个标记

使用特权

评论回复
27
book99| | 2010-4-28 09:56 | 只看该作者
我现在也在用状态机思想写一键多功能的程序,一个按键实现正常显示,进入查询界面,十个查询状态间的切换,查询完退出查询界面,再次返回到正常显示界面,我的思路是当有短键按下时进入查询界面,每有一次短键按下,便切换一个查询状态,当有长键按下时变返回到正常显示界面,现在的问题是程序没办法识别长短键,所有键都按短键处理,即没办法从查询状态退出到正常显示状态,以下是我的长短键程序 各位高手帮我看一下对不对,有没有更好的方法呀
uchar keyprocessor()  //短键
{
  uchar kn=0,knum;
        for(knum=0;knum<100;knum++)
        {
          Delay_m(100);
          if(key1==0)
                                kn++;
                 else
                                kn=kn;
                //if(kn==100)
        //        break;
        }
        //if(key1==1)
        //{
  // Delay_m(10);
        // if(key1==1)
         //{
                if(kn==100)
                        return 1;
                //}
  // }
        else
        return 0;
}

uchar lt_key(void)  // 长键
{
       
  int lkn=0;
        int i;
        for(i=0;i<1000;i++)
                {
                 Delay_m(1000);
                 Delay_m(1000);
                 Delay_m(1000);
                 Delay_m(1000);
                 Delay_m(1000);
                 if(key1==0)
                                lkn++;
                 else
                    lkn=lkn;               
          }
       
   if(lkn==1000)
     return 1;
        else
                return 0;
}

使用特权

评论回复
28
dxd19811115| | 2010-4-28 14:23 | 只看该作者
一键多功能的时候用过状态机... 单键双键的状态机学习了...

使用特权

评论回复
29
sytu_chyq| | 2010-4-28 16:53 | 只看该作者
学习学习。。

使用特权

评论回复
30
8421bcd| | 2010-4-28 16:57 | 只看该作者
MARK

使用特权

评论回复
31
chg123| | 2010-5-3 20:42 | 只看该作者
路过

使用特权

评论回复
32
lhbdyx1| | 2010-9-7 11:42 | 只看该作者
不错,学习了

使用特权

评论回复
33
andloani| | 2010-9-28 15:22 | 只看该作者
wow,啥都看不懂,标记一下先。。。。

使用特权

评论回复
34
GNMXD| | 2010-9-29 07:50 | 只看该作者
mark下  不太明白  下次好好看看

使用特权

评论回复
35
流行音乐| | 2010-10-6 17:37 | 只看该作者
在楼主的程序中单键和双键并没有本质区别,所以完全可以把双键当作是一种单键,那么程序和状态图都大约可以简化一半。

使用特权

评论回复
36
求知的电工| | 2010-10-6 22:54 | 只看该作者
好好学习,,

使用特权

评论回复
37
ou123| | 2010-10-7 17:26 | 只看该作者
学习

使用特权

评论回复
38
shanweichao| | 2010-10-24 23:39 | 只看该作者
void Key_In(void) 函数  中 step 被初始化为 0;  怎么可能进入 switch 呢??
移至了一下,发现不对啊,望版主赐教。谢谢。

使用特权

评论回复
39
shanweichao| | 2010-10-24 23:44 | 只看该作者
哦,是对的,理解错误,sorry。。
:$

使用特权

评论回复
40
Galway-Zhang| | 2010-10-27 12:51 | 只看该作者
看懂了些.....单键双键.三键.都是一起检测..存储.读取对应状态输出.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则