简单有效的“单键复用”C51程序

来源:互联网 发布:ajax返回类型json数据 编辑:程序博客网 时间:2024/05/17 23:39
简单有效的“单键复用”C51程序
2009-08-25 00:27

        在做我的MINI POV时,考虑到空间有限,必须简化结构,尽量减少按键数量,最后设计只用两个按键作模式转换和时间调整,这样,需将其中的一键“单键复用”,采用最常见的是“短击”、“长击”和“双击”三种模式。这样一来编程就成了问题。
         然而,真不明白一个简单的“单键复用”的问题居然在网上还找不到合适的现成的程序,找到的也是一些高深莫测的(还用上什么状态机之类的)东西。没办法,还是自己动手吧!
    nn=0;                                                               //“按下”时长计数器清零
    mm=0;                                                             //“释放”时长计数器清零
    if(set0==0){                                                     //如按键set0按下
          DelayMs(30);                                            //延时(消抖)
          if(set0==0){                                               //如按键set0按下
                do {                                                     //“按下”计数器开始计数
                    nn++;
                    DelayMs(10);
                }while(set0==0);          
                if(nn<50)                                             //如“按下”计数小于设定值(短击的最大限制值)
                {
                    DelayMs(30);                                   //延时(消抖)
                     do {                                                 //“释放”计数器开始计数
                         mm++;
                         DelayMs(10);
                     }while((mm<40)&&(set0==1));          //当超出设定值或再次有“按下”事件发生,结束计数
                     DelayMs(25);                                   //延时(消抖)
                     do {                                                  //待到第二次的“按下”事件结束
                      }while(set0==0);
                     if(mm<40) Key_Num=3; else Key_Num=1;   //在释放期间提前结束的为双击,否则为短击
                }
               else
                {
                   Key_Num=2;                                     //”按下”计数大于设定值为长击

                }
          }
}

         嘿嘿,其实就这么简单。
        有的人喜欢将简单问题复杂化,而本人更喜欢将复杂问题简单化。

 

类别:c51编程 | | 添加到搜藏 | 分享到i贴吧 | 浏览(820) | 评论 (9)登录后,您就出现在这里。