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

[复制链接]
efen 发表于 2010-1-24 13:29 | 显示全部楼层
请教LZ究竟什么是状态机??
是按下键设置标志位,然后轮询么?
laslison 发表于 2010-1-24 18:49 | 显示全部楼层
状态迁移图太模糊
32446975 发表于 2010-4-15 08:49 | 显示全部楼层
学习了。
john_light 发表于 2010-4-15 10:39 | 显示全部楼层
不错。

个人习惯在使用常量和枚举量时,名称全大写……
cj05311321 发表于 2010-4-21 13:24 | 显示全部楼层
pinyione 发表于 2010-4-21 13:28 | 显示全部楼层
留个标记
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;
}
dxd19811115 发表于 2010-4-28 14:23 | 显示全部楼层
一键多功能的时候用过状态机... 单键双键的状态机学习了...
sytu_chyq 发表于 2010-4-28 16:53 | 显示全部楼层
学习学习。。
8421bcd 发表于 2010-4-28 16:57 | 显示全部楼层
chg123 发表于 2010-5-3 20:42 | 显示全部楼层
lhbdyx1 发表于 2010-9-7 11:42 | 显示全部楼层
不错,学习了
andloani 发表于 2010-9-28 15:22 | 显示全部楼层
wow,啥都看不懂,标记一下先。。。。
GNMXD 发表于 2010-9-29 07:50 | 显示全部楼层
mark下  不太明白  下次好好看看
流行音乐 发表于 2010-10-6 17:37 | 显示全部楼层
在楼主的程序中单键和双键并没有本质区别,所以完全可以把双键当作是一种单键,那么程序和状态图都大约可以简化一半。
求知的电工 发表于 2010-10-6 22:54 | 显示全部楼层
好好学习,,
ou123 发表于 2010-10-7 17:26 | 显示全部楼层
shanweichao 发表于 2010-10-24 23:39 | 显示全部楼层
void Key_In(void) 函数  中 step 被初始化为 0;  怎么可能进入 switch 呢??
移至了一下,发现不对啊,望版主赐教。谢谢。
shanweichao 发表于 2010-10-24 23:44 | 显示全部楼层
哦,是对的,理解错误,sorry。。
:$
Galway-Zhang 发表于 2010-10-27 12:51 | 显示全部楼层
看懂了些.....单键双键.三键.都是一起检测..存储.读取对应状态输出.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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