xpstudio2003 发表于 2009-8-7 00:17:35

贴一个个人使用的按键程序,.C .H 文件,,使用状态机.

个人经常在程序中使用,,,
移植比较方便,,把接口函数一改,,,直接拿来使用,,
有按下,长按,连_发,抬起,,四种按键返回值...

不多说,见代码.

点击此处下载 ourdev_468199.rar(文件大小:2K) (原文件名:KEYINPUT.rar)



贴一个使用例子...
   KeyTmp = GetKey();
   switch(KeyTmp)
   {
      case KEY_DOWN|KEY3:
            //返回键
            SysSts = STS_IDLE;
            KeyDir = GOTO_FATHER;
            break;      
            
      case KEY_DOWN|KEY2:
      case KEY_LONG|KEY2:
      case KEY_LIAN|KEY2:
            //...
            break;      
      
    }

xpstudio2003 发表于 2009-8-7 00:18:53

考虑做上 双击 的按键,,,到时候再贴上来大家参考...

32446975 发表于 2009-8-7 06:03:18

谢谢!收下了!

mydows 发表于 2009-8-7 07:51:06

留名

miscell 发表于 2009-8-7 08:22:00

thanks!

ZRJ8951 发表于 2009-8-7 08:30:18

正要用。参考下。谢谢!

snoopyzz 发表于 2009-8-7 08:58:29

有复合按键处理吗?

sunki_avr 发表于 2009-8-7 09:13:23

thank you!

deepin 发表于 2009-8-7 09:18:25

看看
MARK

sunki_avr 发表于 2009-8-7 09:33:43

mark

xyz2008 发表于 2009-8-7 09:45:08

mark,ding

guangan854214 发表于 2009-8-7 09:53:12

正要用到,参考一下,谢谢了

lucsunny 发表于 2009-8-7 10:22:22

按键防抖效果如何?

menghong_4 发表于 2009-8-7 10:28:42

顶~~~~

fjpmbb 发表于 2009-8-7 13:32:50

飘过!!!!!!!!!!!!!!!

mayis 发表于 2009-8-7 17:42:45

MARK

lv998127 发表于 2009-8-7 18:35:11

做个记号!!

miscell 发表于 2009-8-7 20:27:07

学习学习

Bird 发表于 2009-9-12 15:13:59

学习ing!!

giantwjt88 发表于 2009-9-12 20:28:09

正好要用

ls81250 发表于 2009-9-18 18:16:46

学习

cgbabc 发表于 2009-9-18 18:46:23

学习中

fzxuecumt 发表于 2009-9-18 21:19:09

楼主的防抖效果咋样啊?

liuzhengyaAVR 发表于 2009-10-26 06:33:21

TKS

leiyun121 发表于 2009-10-26 08:45:36

mark下!

Excellence 发表于 2009-10-28 10:16:35

谢谢。。。。下载试试。。。

zhuoyue36524 发表于 2010-4-3 11:46:30

mark

ricefat 发表于 2010-8-26 16:26:19

感谢LZ的分享,已经用上了

xinxinEC 发表于 2011-7-6 08:35:07

mark

smtgg 发表于 2011-7-6 09:33:54

mark

jinquan123 发表于 2011-9-6 17:45:27

收下@谢谢

snwuzhisheng 发表于 2012-6-5 09:30:41

为什么老考虑 按键消抖! 简单的单键程序 100ms周期扫描一次 一点问题都没有

yao1 发表于 2012-6-5 09:38:30

snwuzhisheng 发表于 2012-6-5 09:30 static/image/common/back.gif
为什么老考虑 按键消抖! 简单的单键程序 100ms周期扫描一次 一点问题都没有

你没做过产品吧? 真正的消抖必须得用状态机啊 你以为别人不想简单点啊

snwuzhisheng 发表于 2012-6-5 10:04:24

yao1 发表于 2012-6-5 09:38 static/image/common/back.gif
你没做过产品吧? 真正的消抖必须得用状态机啊 你以为别人不想简单点啊

{:3_48:} 没像其他人 专门开辟了个 case状态来做消抖 就是100ms扫描一次 当两个周期内都按键了就判断为短按 即200ms内按下按键就判断有按键按下   嘿嘿 不知道这个算消除抖动吗

yao1 发表于 2012-6-5 11:51:12

snwuzhisheng 发表于 2012-6-5 10:04 static/image/common/back.gif
没像其他人 专门开辟了个 case状态来做消抖 就是100ms扫描一次 当两个周期内都按键了就判断为短 ...

不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的

zhanyanqiang 发表于 2012-6-5 12:37:04

苦苦追寻啊~~~

snwuzhisheng 发表于 2012-6-5 14:40:18

yao1 发表于 2012-6-5 11:51 static/image/common/back.gif
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 ...

嗯 好的我现在用时间触发的 任务调度 做四个任务的东西还可以 一般像你们的产品有多少任务哦

by886 发表于 2012-6-5 20:56:24

mark下!   

yikuang 发表于 2012-6-7 16:24:40

谢谢楼主!

cc1987 发表于 2012-6-7 16:50:41

x谢谢楼主 分享了

fengtianzhifeng 发表于 2012-6-27 09:03:47

mark
{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}

RGB电子 发表于 2012-7-9 21:03:31

初学,正为这问题苦恼

sweet007 发表于 2012-7-10 08:51:34

以前是用马老师书了状态机的方法,看看这个怎么样

choovin 发表于 2012-7-10 10:07:53

ddxx谢谢分享

beijinggood2008 发表于 2012-7-17 22:48:58

菜鸟学习中,先参考一下

236719016 发表于 2012-8-14 11:36:50

好东西,下了,谢谢!

tanguicaicai 发表于 2012-8-14 11:41:30

收下先~~~

zhanyanqiang 发表于 2012-8-29 15:00:19

楼猪,双击弄好了没有~~??

wuha 发表于 2012-8-29 15:10:49

嗯,这个按键程序好早就看到过了,不过我将它改进了,支持组合按键(没办法,按键太少),现在在项目中已经使用。

inovar 发表于 2012-9-10 16:19:57

wuha 发表于 2012-8-29 15:10 static/image/common/back.gif
嗯,这个按键程序好早就看到过了,不过我将它改进了,支持组合按键(没办法,按键太少),现在在项目中已经 ...

哥们,发下共享一下吧!

lc6688 发表于 2012-9-19 15:08:45

初学,正要用到,参考一下,谢谢了!

weidong 发表于 2012-9-25 17:16:20

哟西…。。。。。。。

LOVEBABY 发表于 2012-12-8 18:54:05

#include"STC12C5620AD.H"

sbitbell =P2^0;

extern        unsigned charkeyboard();

void delay()
   {
    unsigned char i;
        for(i=0;i<320;i++);          
          }
   
void main(void)
{        

    switch(keyboard())
         {
                  case 1: bell = 0 ;delay(); delay();        break;
                  case 2: bell = 0 ;delay(); delay();        delay();break;
                  case 3: bell = 0 ;delay(); delay();        delay();delay() ; break;
                  case 4: bell = 0 ;delay(); delay();        delay();delay();delay(); break;
                   default:break;
               }
}       
//}

//独立按键 P10-P13
extern        unsigned charkeyboard()
{
unsigned char key_number =0 ;               //        按键号
unsigned char key_temp = 0;                       //暂存按键值
static unsigned char key_code = 0; //按键值
static unsigned char key_count = 0;    //电平有效次数
static unsigned char key_flag = 0;   //按键有效标志位

key_temp = P1&0x0F;
if(key_temp != 0x0F)
   {
          key_count++;
          if(key_count == 10)
          {
               key_flag = 1;
       key_code = key_temp;
                }
       }
else   //松手判断
   {
    key_count = 0;
        if(key_flag==1)
           {
              key_flag = 0;
               switch(key_code)
                        {
                               case 0x0e:    key_number = 1;        break;
                               case 0x0D:    key_number = 2;         break;
                               case 0x0b:    key_number = 3;         break;
                               case 0x07:    key_number = 4; break;
                                }

           }
       }
   return(key_number);
}


帮忙看看这个程序有啥问题,感觉都没错,就是不能用

xiongxie007 发表于 2013-1-4 00:04:35

谢谢楼主!

moouse 发表于 2013-1-4 07:44:13

ding                                          

fwluck 发表于 2013-1-4 09:11:46

请教两个问题。
一,有没有按键检测不到的情况。
二,状态2到状态3是如何转换的。

yangzi8000 发表于 2013-1-30 15:55:57

make................

孤独_求败 发表于 2013-3-7 20:40:42

mark。。。。。

xgang1989 发表于 2013-3-8 00:41:21

mark mark!

jz701209李 发表于 2013-3-8 08:52:11

学习一下....

jsls135 发表于 2013-4-13 01:24:16

非常期待双击版。还有弱弱问一下,连发是什么概念啦。。。。{:sad:}

zenghl 发表于 2013-4-13 15:35:48

这个要支持!!{:lol:}

jimmyfan 发表于 2013-4-13 17:36:37

谢谢了,先收下

wushifeng 发表于 2013-4-20 17:31:44

cc1987 发表于 2012-6-7 16:50 static/image/common/back.gif
x谢谢楼主 分享了

请教一个问题:状态2到状态3是如何转换的,谢谢!

laowu7787123 发表于 2013-7-7 20:57:02

···LZ·我将按键扫描放入中断10WS一次松开后 连接加几下哦··是否中断扫描太快

laowu7787123 发表于 2013-7-7 23:35:48

·LZ·中断扫描中断不知道为何没有保存   ··能帮忙分析不··棘手啊

laowu7787123 发表于 2013-7-30 00:09:39

mark~顶!

laowu7787123 发表于 2013-7-30 00:09:54

mark~顶!

dexidz 发表于 2013-7-31 14:22:59

yao1 发表于 2012-6-5 11:51 static/image/common/back.gif
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 ...

同意,往往有时候最简单的按键倒可靠了。

dexidz 发表于 2013-7-31 14:28:39

jsls135 发表于 2013-4-13 01:24 static/image/common/back.gif
非常期待双击版。还有弱弱问一下,连发是什么概念啦。。。。

连发就是电子表里设置时间时按住数会自己快速变

dexidz 发表于 2013-7-31 14:34:29

LOVEBABY 发表于 2012-12-8 18:54 static/image/common/back.gif
#include"STC12C5620AD.H"

sbitbell =P2^0;


key_temp = P1&0x0F;

知道这句是什么意思吗?没细看,这条不对

key_temp = P1|0x0F;试试看

a794001114 发表于 2013-8-4 00:44:22

mark!!   

yanghuai1023 发表于 2013-8-4 09:17:35

怎么处理复合按键和不同IO口下的按键处理啊??{:shy:}

Eric321 发表于 2013-11-24 22:12:35

先收藏,留着用

ZJSXHWL000000 发表于 2013-11-25 06:34:59

正要用。参考下。谢谢!

tt98 发表于 2013-11-25 09:45:22

学习参考!{:titter:}

zl_123 发表于 2014-2-8 20:00:38

mark                     

robincui 发表于 2016-12-5 10:58:00

这个要mark一下
页: [1]
查看完整版本: 贴一个个人使用的按键程序,.C .H 文件,,使用状态机.