搜索
bottom↓
楼主: stanley.zhao

[转]新型的按键扫描程序

  [复制链接]

出0入0汤圆

发表于 2012-8-25 10:23:32 | 显示全部楼层
so cool ! 好好学习一下

出0入0汤圆

发表于 2013-1-18 00:02:43 | 显示全部楼层
Etual 发表于 2010-3-29 00:13
为什么我的文章会在这里出现的? .... 世界真小 ....

真有一个福利包啊!!!我居然找到了,谢谢
去你的博客看了下,为何找不到“新型按键程序”这篇博文呢?

出0入0汤圆

发表于 2013-1-18 09:38:31 | 显示全部楼层
chenguanghua 发表于 2013-1-18 00:02
真有一个福利包啊!!!我居然找到了,谢谢
去你的博客看了下,为何找不到“新型按键程序”这篇博文呢? ...

博客迁徙多次了,有些丢失了,这文章是07年写的了,这个方法是在任天堂的GBA官方开发包里面的demo程序看到的。
当时没有留意,后来分析一下,感觉确实很实用,于是就写了这篇文章。
不过反正网上都随便转载,那就随便实用吧,我只是稍微的感叹一下而已。

出0入0汤圆

发表于 2013-1-18 10:54:22 | 显示全部楼层
GOOD!!!!!!!!!

出0入0汤圆

发表于 2013-1-18 11:45:57 | 显示全部楼层
赞一个,收藏了!

出0入0汤圆

发表于 2013-1-18 14:01:18 | 显示全部楼层
写得挺好的

出0入0汤圆

发表于 2013-1-19 14:23:54 | 显示全部楼层
太好的进级学习资料,多谢分享。打算仔细学习后用在51编程中

出0入0汤圆

发表于 2013-1-20 10:28:16 | 显示全部楼层
牛 人啊啊啊

出0入0汤圆

发表于 2013-1-20 11:04:16 | 显示全部楼层
好算法,赞一个

出0入0汤圆

发表于 2013-1-20 12:04:57 | 显示全部楼层
有点意思,啥时候用用

出0入0汤圆

发表于 2013-1-20 15:58:39 | 显示全部楼层
好方法,学习了!

出0入0汤圆

发表于 2013-2-2 09:57:17 | 显示全部楼层
mark~~~!!!!

出0入0汤圆

发表于 2013-2-2 14:01:42 | 显示全部楼层
感谢楼主,学习好材料!

出0入0汤圆

发表于 2013-2-4 10:37:17 | 显示全部楼层
本帖最后由 chxaitz 于 2013-2-4 10:45 编辑

很好的思路,然后经过各种大神改进,真的可以让按键扫描程序精简不少。我认为,作为按键,还是应该基于事件理论,放在中断中处理,然后在主函数中查询比较好。
void interrupt_key()
{
    keyDown = 0xXX;
    keyUp = 0xXX;
}

void mian()
{
    Init()
    while(1)
    {
        if( keyDown)
        {
            switch(..)
            {
                case ..
                    keyDown_Func(){}
             }
            keyDown = 0x00;
         }
        if( keyUp)
        {
            switch(..)
            {
                case ..
                    keyUp_Func(){}
             }
            keyUp = 0x00;
         }

        other_Func();
        ..
    }
}

出0入0汤圆

发表于 2013-2-18 16:39:47 | 显示全部楼层
讲的很好 不过我是菜鸟 看不大明白  收了慢慢看 谢谢LZ

出0入0汤圆

发表于 2013-2-18 16:45:58 | 显示全部楼层
mark。。。。。。

出0入0汤圆

发表于 2013-3-1 00:02:59 | 显示全部楼层
mark

出0入0汤圆

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

出0入0汤圆

发表于 2013-3-8 08:04:56 | 显示全部楼层
虽然还不太懂,记下来慢慢研究···············

出0入0汤圆

发表于 2013-3-25 13:22:19 | 显示全部楼层
按键学习

出0入0汤圆

发表于 2013-4-4 16:11:57 | 显示全部楼层
MARK!茅塞顿开啊

出0入0汤圆

发表于 2013-5-20 22:59:38 | 显示全部楼层
好文共享

出0入0汤圆

发表于 2013-5-24 08:24:43 | 显示全部楼层
好东西    收藏了

出0入0汤圆

发表于 2013-5-30 15:59:08 | 显示全部楼层
堪称史上一绝啊/

出0入8汤圆

发表于 2013-5-30 16:13:10 | 显示全部楼层
这个必须收藏!

出0入12汤圆

发表于 2013-5-30 23:55:12 | 显示全部楼层
记号备用40楼

出0入0汤圆

发表于 2013-6-20 14:01:06 | 显示全部楼层
我的按键更纠结

#define SW1                P24       
#define SW2                P40       
#define SW3                P33       
#define SW4                P25       
#define SW5                P26       
#define SW6                P04       
#define SW7                P41       
#define SW8                P02       



uint8_t Key_Get_Status(void)
{
        uint8_t KeyStatus = 0;

        SW1 = 1;
        SW2 = 1;
        SW3 = 1;
        SW4 = 1;
        SW5 = 1;
        SW6 = 1;
        SW7 = 1;
        SW8 = 1;

        if(SW1 == 0)
        {
                KeyStatus |= (1<<0);
        }

        if(SW2 == 0)
        {
                KeyStatus |= (1<<1);
        }

        if(SW3 == 0)
        {
                KeyStatus |= (1<<2);
        }

        if(SW4 == 0)
        {
                KeyStatus |= (1<<3);
        }

        if(SW5 == 0)
        {
                KeyStatus |= (1<<4);
        }

        if(SW6 == 0)
        {
                KeyStatus |= (1<<5);
        }

        if(SW7 == 0)
        {
                KeyStatus |= (1<<6);
        }

        if(SW8 == 0)
        {
                KeyStatus |= (1<<7);
        }

        return KeyStatus;
}

出0入0汤圆

发表于 2013-6-20 23:16:24 | 显示全部楼层
经典之作,让人叫绝,,,,

出0入0汤圆

发表于 2013-6-21 09:09:50 | 显示全部楼层
好贴,标记

出0入0汤圆

发表于 2013-6-22 21:45:16 | 显示全部楼层
好帖!!!!!!

出0入0汤圆

发表于 2013-6-27 17:19:19 | 显示全部楼层
好方法  !!!!!!

出0入0汤圆

发表于 2013-7-1 12:10:06 | 显示全部楼层
Cont(continue)代表的是连续按下。

按键扫描时间与防抖时间不一样,我只关心Cont值

出0入0汤圆

发表于 2013-7-12 16:58:32 | 显示全部楼层
snoopyzz 发表于 2010-3-30 13:46
以下是我写的按键判断核心部分
//
// key.h

    Key_CurValue ^= Key.RecValue; // 异或:获取和上一次有效按键的不同键值
    Key_CurValue &= Key.PreValue; // 与:只获取新增按键值
    Key.RecValue  = Key.PreValue; // 保存这次有效键值
这三行好像没啥用?

出0入4汤圆

发表于 2013-7-16 15:52:23 | 显示全部楼层
Etual 发表于 2010-3-31 22:51
呃,想起来了,还有一篇精粹的东西,也需要用来配合按键检测的
http://blog.chinaunix.net/u1/52089/showar ...

你好,打不开你的链接呀

出0入4汤圆

发表于 2013-7-16 16:04:35 | 显示全部楼层
xue2003265029 发表于 2011-11-26 10:57
MARK,下面是我对程序的心得和总结了
http://blog.csdn.net/xuechaojie/article/details/6761772 ...

总结的不错,好东西。这个帖子很多回复都很好,愿更多的人能够看到此帖,细细品味。

出0入0汤圆

发表于 2013-7-24 22:07:26 | 显示全部楼层
太吊了!

出0入0汤圆

发表于 2013-9-22 17:05:19 | 显示全部楼层
出现了好多能人,得好好阅读感觉我理解的很表面。这个程序大家说的最致命的缺陷就是“短按键无去抖”

出0入8汤圆

发表于 2013-9-27 22:01:40 | 显示全部楼层
mark!!!!!

出0入0汤圆

发表于 2013-9-28 00:44:16 | 显示全部楼层
我有更好的。。。。

出0入0汤圆

发表于 2013-10-9 02:41:51 | 显示全部楼层
学习了~~好帖

出0入0汤圆

发表于 2013-10-9 06:28:23 | 显示全部楼层
                                         cool

出0入0汤圆

发表于 2013-10-9 09:39:23 | 显示全部楼层
这个按键确实很方便。

出0入0汤圆

发表于 2013-10-13 10:12:31 | 显示全部楼层
我自己也想了一种,和这类似,用的是if else结构

出0入0汤圆

发表于 2013-10-13 19:00:49 | 显示全部楼层
这和我当年用汇编语言写的按键程序一个思路,当开关出现负跳变时,确定开关按下。

出0入0汤圆

发表于 2013-10-13 21:40:13 | 显示全部楼层
wa o o oo o oo o o~

出0入8汤圆

发表于 2013-11-22 23:08:58 | 显示全部楼层
顶起,确实非常妙,跟位交换运算一样,简单使用,真是只有想不到的没有说没有好办法的

出0入0汤圆

发表于 2013-11-24 12:39:34 | 显示全部楼层
好东西,值得学习

出0入0汤圆

发表于 2013-11-24 14:43:24 | 显示全部楼层

出0入0汤圆

发表于 2013-12-19 08:42:05 | 显示全部楼层
标一下,强大的程序

出0入0汤圆

发表于 2013-12-19 14:40:41 | 显示全部楼层
MARK!!!!!谢谢楼主

出0入0汤圆

发表于 2014-1-18 12:30:08 | 显示全部楼层
标记一下,下来学习

出0入0汤圆

发表于 2014-1-21 10:00:37 | 显示全部楼层
使用此程序进行仿真,发现在多次单独按下按键的情况下  会执行长按的程序,不知各位能否帮忙解答一下  谢谢

出0入0汤圆

发表于 2014-2-9 10:20:15 | 显示全部楼层
程序很妙,mark一下,谢谢分享了。

出0入0汤圆

发表于 2014-2-10 08:46:19 | 显示全部楼层
这个对新手来说很有用!

出0入0汤圆

发表于 2014-4-28 16:22:14 | 显示全部楼层
如此好的帖子,希望有更多人看到!

出0入0汤圆

发表于 2014-5-1 18:56:41 | 显示全部楼层
学习了

出0入0汤圆

发表于 2014-6-17 17:35:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-10-17 15:56:29 | 显示全部楼层
写得很好,学习了

出0入0汤圆

发表于 2014-11-14 12:34:57 | 显示全部楼层
不错,马克一下

出0入0汤圆

发表于 2015-3-31 13:10:59 | 显示全部楼层
好思路!mark,又看了各位的回复!涨知识了!

出0入0汤圆

发表于 2015-4-3 04:22:35 | 显示全部楼层
整过一个状态机按键,感觉一般,关键是资源占用了得,特别是对小内存芯片

出0入0汤圆

发表于 2015-8-6 16:16:56 | 显示全部楼层
组合按键好弄吗

出0入0汤圆

发表于 2015-8-17 08:57:55 | 显示全部楼层
多谢分享!!!

出0入0汤圆

发表于 2015-8-17 21:58:41 | 显示全部楼层
按键程序,学习到了

出0入0汤圆

发表于 2015-8-21 20:43:15 | 显示全部楼层
不知楼主发现没有,应用2上的短按长按是有冲突的,比如我只想实行长按的功能,但其结果还是先走了短按,再走了长按,也就是现象是先+1,然后在开始连加的。我想要的结果是在一个按键上,既有短按又有长按,当想用短按的时候,不执行长按。同理,在执行长按的时候,不执行短按。

出0入0汤圆

发表于 2015-11-22 11:53:49 | 显示全部楼层
Cool!                             

出0入0汤圆

发表于 2015-12-29 14:35:34 | 显示全部楼层
很不错的帖子 ~~顶~

出0入0汤圆

发表于 2016-1-14 10:37:54 | 显示全部楼层
mark留着备用,说不定什么时候就用上了

出0入0汤圆

发表于 2016-1-14 11:04:38 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2016-1-14 11:13:37 | 显示全部楼层
感谢楼主解释得这么清楚

出0入0汤圆

发表于 2016-1-14 12:30:18 | 显示全部楼层
mark!楼主继续

出0入0汤圆

发表于 2016-4-27 10:38:07 | 显示全部楼层
很好,简单有效

出0入0汤圆

发表于 2016-5-5 13:31:28 | 显示全部楼层
厲害~~看似簡單的按鍵,其實有很多細節處理上挺麻煩的,之前也為了按鍵長按短按的判斷折騰了許久~~

出0入0汤圆

发表于 2016-7-18 13:41:24 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2016-7-18 15:58:40 | 显示全部楼层
顶起来,太到位了

出0入0汤圆

发表于 2016-7-22 16:54:12 | 显示全部楼层
牛人啊,必须顶

出0入0汤圆

发表于 2017-6-20 11:15:50 | 显示全部楼层
很好的东西,不错,学习了

出0入0汤圆

发表于 2017-11-30 17:01:23 | 显示全部楼层
mark……

出0入0汤圆

发表于 2018-6-14 10:45:21 | 显示全部楼层
温习了一遍

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-20 08:42

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

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