搜索
bottom↓
回复: 78

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

  [复制链接]

出0入0汤圆

发表于 2009-8-7 00:17:35 | 显示全部楼层 |阅读模式
个人经常在程序中使用,,,
移植比较方便,,把接口函数一改,,,直接拿来使用,,
有按下,长按,连_发,抬起,,四种按键返回值...

不多说,见代码.

点击此处下载 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;        
        
    }

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-8-7 00:18:53 | 显示全部楼层
考虑做上 双击 的按键,,,到时候再贴上来大家参考...

出0入0汤圆

发表于 2009-8-7 06:03:18 | 显示全部楼层
谢谢!收下了!

出0入0汤圆

发表于 2009-8-7 07:51:06 | 显示全部楼层
留名

出0入0汤圆

发表于 2009-8-7 08:22:00 | 显示全部楼层
thanks!

出0入0汤圆

发表于 2009-8-7 08:30:18 | 显示全部楼层
正要用。参考下。谢谢!

出0入0汤圆

发表于 2009-8-7 08:58:29 | 显示全部楼层
有复合按键处理吗?

出0入0汤圆

发表于 2009-8-7 09:13:23 | 显示全部楼层
thank you!

出0入0汤圆

发表于 2009-8-7 09:18:25 | 显示全部楼层
看看
MARK

出0入0汤圆

发表于 2009-8-7 09:33:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-7 09:45:08 | 显示全部楼层
mark,ding

出0入0汤圆

发表于 2009-8-7 09:53:12 | 显示全部楼层
正要用到,参考一下,谢谢了

出0入0汤圆

发表于 2009-8-7 10:22:22 | 显示全部楼层
按键防抖效果如何?

出0入0汤圆

发表于 2009-8-7 10:28:42 | 显示全部楼层
顶~~~~

出0入0汤圆

发表于 2009-8-7 13:32:50 | 显示全部楼层
飘过!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2009-8-7 17:42:45 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-8-7 18:35:11 | 显示全部楼层
做个记号!!

出0入0汤圆

发表于 2009-8-7 20:27:07 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2009-9-12 15:13:59 | 显示全部楼层
学习ing!!

出0入0汤圆

发表于 2009-9-12 20:28:09 | 显示全部楼层
正好要用

出0入0汤圆

发表于 2009-9-18 18:16:46 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-9-18 18:46:23 | 显示全部楼层
学习中

出0入0汤圆

发表于 2009-9-18 21:19:09 | 显示全部楼层
楼主的防抖效果咋样啊?

出0入0汤圆

发表于 2009-10-26 06:33:21 | 显示全部楼层
TKS

出0入0汤圆

发表于 2009-10-26 08:45:36 | 显示全部楼层
mark下!

出0入0汤圆

发表于 2009-10-28 10:16:35 | 显示全部楼层
谢谢。。。。下载试试。。。

出0入0汤圆

发表于 2010-4-3 11:46:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-26 16:26:19 | 显示全部楼层
感谢LZ的分享,已经用上了

出0入0汤圆

发表于 2011-7-6 08:35:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-6 09:33:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-6 17:45:27 | 显示全部楼层
收下@谢谢

出0入0汤圆

发表于 2012-6-5 09:30:41 | 显示全部楼层
为什么老考虑 按键消抖! 简单的单键程序 100ms周期扫描一次 一点问题都没有

出0入0汤圆

发表于 2012-6-5 09:38:30 | 显示全部楼层
snwuzhisheng 发表于 2012-6-5 09:30
为什么老考虑 按键消抖! 简单的单键程序 100ms周期扫描一次 一点问题都没有

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

出0入0汤圆

发表于 2012-6-5 10:04:24 | 显示全部楼层
yao1 发表于 2012-6-5 09:38
你没做过产品吧? 真正的消抖必须得用状态机啊 你以为别人不想简单点啊

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

出0入0汤圆

发表于 2012-6-5 11:51:12 | 显示全部楼层
snwuzhisheng 发表于 2012-6-5 10:04
没像其他人 专门开辟了个 case状态来做消抖 就是100ms扫描一次 当两个周期内都按键了就判断为短 ...

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

出0入4汤圆

发表于 2012-6-5 12:37:04 | 显示全部楼层
苦苦追寻啊~~~

出0入0汤圆

发表于 2012-6-5 14:40:18 | 显示全部楼层
yao1 发表于 2012-6-5 11:51
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 ...

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

出0入0汤圆

发表于 2012-6-5 20:56:24 | 显示全部楼层
mark下!   

出0入0汤圆

发表于 2012-6-7 16:24:40 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2012-6-7 16:50:41 | 显示全部楼层
x谢谢楼主 分享了

出0入0汤圆

发表于 2012-6-27 09:03:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-7-9 21:03:31 | 显示全部楼层
初学,正为这问题苦恼

出0入0汤圆

发表于 2012-7-10 08:51:34 | 显示全部楼层
以前是用马老师书了状态机的方法,看看这个怎么样

出0入0汤圆

发表于 2012-7-10 10:07:53 | 显示全部楼层
ddxx谢谢分享

出0入0汤圆

发表于 2012-7-17 22:48:58 | 显示全部楼层
  菜鸟学习中,先参考一下

出0入0汤圆

发表于 2012-8-14 11:36:50 | 显示全部楼层
好东西,下了,谢谢!

出0入0汤圆

发表于 2012-8-14 11:41:30 | 显示全部楼层
收下先~~~

出0入4汤圆

发表于 2012-8-29 15:00:19 | 显示全部楼层
楼猪,双击弄好了没有~~??

出0入0汤圆

发表于 2012-8-29 15:10:49 | 显示全部楼层
嗯,这个按键程序好早就看到过了,不过我将它改进了,支持组合按键(没办法,按键太少),现在在项目中已经使用。

出0入0汤圆

发表于 2012-9-10 16:19:57 | 显示全部楼层
wuha 发表于 2012-8-29 15:10
嗯,这个按键程序好早就看到过了,不过我将它改进了,支持组合按键(没办法,按键太少),现在在项目中已经 ...

哥们,发下共享一下吧!

出0入0汤圆

发表于 2012-9-19 15:08:45 | 显示全部楼层
初学,正要用到,参考一下,谢谢了!

出0入0汤圆

发表于 2012-9-25 17:16:20 来自手机 | 显示全部楼层
哟西…。。。。。。。

出0入0汤圆

发表于 2012-12-8 18:54:05 | 显示全部楼层
#include"STC12C5620AD.H"

sbit  bell =P2^0;

extern          unsigned char  keyboard();

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 char  keyboard()
{
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);
}


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

出0入0汤圆

发表于 2013-1-4 00:04:35 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2013-1-4 07:44:13 | 显示全部楼层
ding                                          

出0入0汤圆

发表于 2013-1-4 09:11:46 | 显示全部楼层
请教两个问题。
一,有没有按键检测不到的情况。
二,状态2到状态3是如何转换的。

出0入0汤圆

发表于 2013-1-30 15:55:57 | 显示全部楼层
make  ................

出0入0汤圆

发表于 2013-3-7 20:40:42 | 显示全部楼层
mark。。。。。

出0入0汤圆

发表于 2013-3-8 00:41:21 来自手机 | 显示全部楼层
mark mark!

出0入0汤圆

发表于 2013-3-8 08:52:11 来自手机 | 显示全部楼层
学习一下....

出0入0汤圆

发表于 2013-4-13 01:24:16 | 显示全部楼层
非常期待双击版。还有弱弱问一下,连发是什么概念啦。。。。

出0入0汤圆

发表于 2013-4-13 15:35:48 | 显示全部楼层
这个要支持!!

出0入0汤圆

发表于 2013-4-13 17:36:37 | 显示全部楼层
谢谢了,先收下

出0入0汤圆

发表于 2013-4-20 17:31:44 | 显示全部楼层
cc1987 发表于 2012-6-7 16:50
x谢谢楼主 分享了

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

出0入0汤圆

发表于 2013-7-7 20:57:02 | 显示全部楼层
···LZ·我将按键扫描放入中断10WS一次  松开后 连接加几下哦··是否中断扫描太快

出0入0汤圆

发表于 2013-7-7 23:35:48 | 显示全部楼层
·LZ·中断扫描  中断不知道为何没有保存   ··能帮忙分析不··棘手啊

出0入0汤圆

发表于 2013-7-30 00:09:39 | 显示全部楼层
mark~顶!

出0入0汤圆

发表于 2013-7-30 00:09:54 | 显示全部楼层
mark~顶!

出0入0汤圆

发表于 2013-7-31 14:22:59 | 显示全部楼层
yao1 发表于 2012-6-5 11:51
不可靠 你以后做产品 产品有好多功能的时候就明白了 会经常检测不到按键按下 你除了按键外还做其他事情的 ...

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

出0入0汤圆

发表于 2013-7-31 14:28:39 | 显示全部楼层
jsls135 发表于 2013-4-13 01:24
非常期待双击版。还有弱弱问一下,连发是什么概念啦。。。。

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

出0入0汤圆

发表于 2013-7-31 14:34:29 | 显示全部楼层
LOVEBABY 发表于 2012-12-8 18:54
#include"STC12C5620AD.H"

sbit  bell =P2^0;

key_temp = P1&0x0F;

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

key_temp = P1|0x0F;试试看

出0入0汤圆

发表于 2013-8-4 00:44:22 | 显示全部楼层
mark!!   

出0入0汤圆

发表于 2013-8-4 09:17:35 | 显示全部楼层
怎么处理复合按键和不同IO口下的按键处理啊??

出0入0汤圆

发表于 2013-11-24 22:12:35 | 显示全部楼层
先收藏,留着用

出0入0汤圆

发表于 2013-11-25 06:34:59 | 显示全部楼层
正要用。参考下。谢谢!

出0入0汤圆

发表于 2013-11-25 09:45:22 | 显示全部楼层
学习参考!

出0入0汤圆

发表于 2014-2-8 20:00:38 | 显示全部楼层
mark                     

出0入0汤圆

发表于 2016-12-5 10:58:00 | 显示全部楼层
这个要mark一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 18:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表