搜索
bottom↓
楼主: zhuhanliang

新型的按键扫描程序,仅三行程序

  [复制链接]

出0入0汤圆

发表于 2016-10-10 16:37:00 | 显示全部楼层
看过一次又一次,有所收获

出0入0汤圆

发表于 2016-10-18 17:13:51 | 显示全部楼层
收藏了!!!

出0入0汤圆

发表于 2016-10-28 13:00:06 | 显示全部楼层
                 

出0入0汤圆

发表于 2016-11-5 11:09:31 | 显示全部楼层
确实不错,楼主写的很仔细,
mark

出0入0汤圆

发表于 2016-11-25 09:26:14 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2016-11-27 20:31:28 | 显示全部楼层
我们将读按键的程序放在了主循环,也就是说,每20ms我们会执行一次KeyRead()函数来得到新的Trg 和 Cont 值

出0入0汤圆

发表于 2016-11-30 14:03:17 | 显示全部楼层
学习,谢谢

出0入0汤圆

发表于 2016-12-15 16:18:56 | 显示全部楼层
谢谢分享,学习一下

出0入0汤圆

发表于 2017-1-1 19:31:39 | 显示全部楼层
谢谢分享!!!!!

出0入0汤圆

发表于 2017-1-2 16:50:48 | 显示全部楼层
感谢原创,感谢楼主,感谢论坛。

出0入0汤圆

发表于 2017-1-3 10:18:12 | 显示全部楼层
不错...............

出0入85汤圆

发表于 2017-1-3 22:17:50 | 显示全部楼层
顶一个,慢慢认真学习学习!

出0入0汤圆

发表于 2017-1-28 19:28:29 | 显示全部楼层
用到了再细读,太长了。

出0入0汤圆

发表于 2017-1-28 20:26:44 | 显示全部楼层
多谢分享

出0入0汤圆

发表于 2017-1-31 13:22:06 | 显示全部楼层
mark 按键程序--区分点按和开关型按键类型

出0入0汤圆

发表于 2017-2-4 09:10:45 | 显示全部楼层
标记一下,谢谢分享

出0入0汤圆

发表于 2017-2-17 08:27:57 | 显示全部楼层
关注中。。。

出0入0汤圆

发表于 2017-4-5 14:54:32 | 显示全部楼层
高手 学些了 ! 谢谢!

出0入0汤圆

发表于 2017-4-20 09:55:26 | 显示全部楼层
试了下,太好用了

出0入0汤圆

发表于 2017-6-7 11:24:43 | 显示全部楼层
看一次Mark一次

出0入0汤圆

发表于 2017-6-19 11:04:30 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2017-6-19 12:12:12 | 显示全部楼层
学习,谢谢!!!

出0入0汤圆

发表于 2017-6-20 07:28:36 来自手机 | 显示全部楼层
楼主无私呀

出0入0汤圆

发表于 2017-6-20 14:43:59 | 显示全部楼层
Cool!!!

出0入0汤圆

发表于 2017-7-19 14:19:33 | 显示全部楼层
本帖最后由 lyflyaway 于 2017-7-19 14:24 编辑

这个是1个IO对应1个按键的,实际产品可能是矩形、梯形键盘,这时就不是那么简单了。

出0入0汤圆

发表于 2017-7-28 23:51:31 | 显示全部楼层
很神奇啊?

出0入0汤圆

发表于 2017-8-23 22:58:18 | 显示全部楼层
lyflyaway 发表于 2017-7-19 14:19
这个是1个IO对应1个按键的,实际产品可能是矩形、梯形键盘,这时就不是那么简单了。 ...

对,看了半天就是1个IO对应一个按钮,可读性不高,反而容易出错,一步一个印的好。

出0入0汤圆

发表于 2017-8-24 10:26:15 | 显示全部楼层
思路不错,但是按键去抖怎么处理

出0入0汤圆

发表于 2017-9-12 22:54:45 | 显示全部楼层
很好的思路,学习了

出0入0汤圆

发表于 2017-12-13 20:07:04 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2018-2-1 16:23:46 | 显示全部楼层
虽然是很老的帖子,但是还是说一句实用性很强!

出0入0汤圆

发表于 2018-3-11 20:58:55 | 显示全部楼层
标记一下,学习时用

出0入0汤圆

发表于 2018-3-12 17:45:01 | 显示全部楼层
先标记一下,以后学习!

出0入0汤圆

发表于 2018-3-29 19:02:26 | 显示全部楼层
见过这么用的;

出0入0汤圆

发表于 2018-4-23 10:12:02 | 显示全部楼层
思路不错,值得学习!另外,你的整个延时20ms时间太长了吧,应该是开定时器,比如1ms,溢出后计数加1,判断20次按键状态再确认比较靠谱。。。

出0入0汤圆

发表于 2018-4-23 10:17:14 | 显示全部楼层
收藏下,以后可能用到。

出0入0汤圆

发表于 2018-5-3 11:24:00 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2018-5-3 22:20:16 | 显示全部楼层
高手                              

出0入0汤圆

发表于 2018-5-23 17:39:58 | 显示全部楼层
MARK...
标记一下。

出0入0汤圆

发表于 2018-7-7 22:15:05 | 显示全部楼层
不错,简单的几句话就实现了复杂的功能,自己想要实现的功能,拜读别人的代码发现无比精简的时候,就感觉发现新国内一样。

出0入0汤圆

发表于 2018-7-9 19:28:38 | 显示全部楼层
不错  学习了

出0入17汤圆

发表于 2018-7-10 09:21:13 | 显示全部楼层
再次重温,厉害了~~~~~~~

出0入0汤圆

发表于 2018-7-12 10:57:26 | 显示全部楼层
先顶起来   慢慢看

出0入0汤圆

发表于 2018-9-7 15:33:50 | 显示全部楼层
我也用类似的思路处理按键,但代码没有这么简洁,值得学习!!!

出0入0汤圆

发表于 2018-9-7 16:13:29 | 显示全部楼层
本帖最后由 RAMILE 于 2018-9-7 16:16 编辑

LZ这句代码用了快10年,真的要谢谢LZ

另一个超级实用的算法是millwood 的旋转编码器检测算法

这两种算法核心都是奈奎斯特采样和历史对照,模板比较,在很多地方都可以使用的,比如同时计数30路脉冲

出0入0汤圆

发表于 2018-9-7 16:57:43 | 显示全部楼层
最简洁的状态机。。。

出0入0汤圆

发表于 2018-9-26 14:40:55 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2018-10-22 15:38:11 | 显示全部楼层
值得学习一下

出0入0汤圆

发表于 2019-1-17 07:38:08 | 显示全部楼层
这个算法很不错。学习了。所以数学的博大精深,没有做不到,只有想不到。

出0入0汤圆

发表于 2019-1-22 14:15:59 | 显示全部楼层
精华所在,很受益。

出0入0汤圆

发表于 2019-1-29 23:00:47 | 显示全部楼层
正在学习

出0入0汤圆

发表于 2019-1-30 01:06:07 来自手机 | 显示全部楼层
RAMILE 发表于 2018-9-7 16:13
LZ这句代码用了快10年,真的要谢谢LZ

另一个超级实用的算法是millwood 的旋转编码器检测算法

能否给下“millwood 的旋转编码器检测算法”的链接哈

出0入0汤圆

发表于 2019-1-30 01:08:27 来自手机 | 显示全部楼层
RAMILE 发表于 2018-9-7 16:13
LZ这句代码用了快10年,真的要谢谢LZ

另一个超级实用的算法是millwood 的旋转编码器检测算法

能否给下“millwood 的旋转编码器检测算法”的链接哈

出0入0汤圆

发表于 2019-1-30 10:49:09 | 显示全部楼层
xypple 发表于 2019-1-30 01:08
能否给下“millwood 的旋转编码器检测算法”的链接哈

我也找不到链接
lut[16]={0,0,1,-1,0....}
static state<<PORT_bitA<<PORT_bitB;
state &= 0x0f;
return lut[state]

出0入0汤圆

发表于 2019-2-13 15:53:16 | 显示全部楼层
i7gly 发表于 2012-10-9 22:09
很好的算法,收藏;

发现其实只是捕捉上升沿,我加多一句,就可以捕捉下降沿了

这么改就行了。同时捕捉上升沿和下降沿:
Trg = ReadData & (ReadData ^ Cont);      // 2        //改前
Trg =                   (ReadData ^ Cont);      // 2        //改后

出0入0汤圆

发表于 2019-2-13 16:35:13 | 显示全部楼层
mark 按键程序

出0入0汤圆

发表于 2019-4-17 13:55:38 | 显示全部楼层
按键扫描  MARK........

出0入0汤圆

发表于 2019-4-17 18:34:25 | 显示全部楼层
millwood0 发表于 2010-11-12 22:29
you have a good concept but the code isn't modular enough.

here is what I would recommend:

Excellent.....................

出0入0汤圆

发表于 2019-5-19 12:15:32 | 显示全部楼层
这个核心就是:防抖哦。

出0入0汤圆

发表于 2019-7-8 15:59:01 | 显示全部楼层
牛逼,mark

出0入0汤圆

发表于 2019-7-12 14:23:05 | 显示全部楼层
很奇妙,很经典,C就是牛B啊。

出0入0汤圆

发表于 2019-7-12 23:20:06 来自手机 | 显示全部楼层
九年了,进来膜拜下论坛第一高楼!!!

出0入0汤圆

发表于 2019-7-13 09:27:44 | 显示全部楼层
我把这个算法包装成了一个软件包,使用事件驱动,支持单击、双击、长按等操作,支持 RTOS 和非 OS 下使用,欢迎到我的 github 仓库试用 https://github.com/murphyzhao/FlexibleButton,README 和博客里有使用方法 可以看我的博客 https://blog.csdn.net/u012349679/article/details/84993596

出0入4汤圆

发表于 2019-7-13 16:08:37 来自手机 | 显示全部楼层
这个强大,仅三行代码,讲解很详细,收藏备用,谢谢分享

出0入0汤圆

发表于 2019-7-18 12:36:55 | 显示全部楼层
思路都一样,写法千差万别。mark按键扫描程序。

出0入4汤圆

发表于 2019-9-17 13:53:08 | 显示全部楼层
我在楼主方法上,做的矩阵键扫描,去抖程序,请各位指教.
#include "KeyBoard.h"
#include "DataType.h"
#include "MR_macro.h"
#include "Delay.h"
#include "UART_AVR_HW.h"

uint TrgDown;//Down跳变
uint TrgUp;//Up跳变
uint Prev;//前次值(持续值)

#define TIMES 1 //采样数设定

void KeyBoard_init(void)
{
        DDRC = 0xf0;//PC0-PC3输入上拉,PC4-PC7输出高电位
        PORTC = 0xff;
}


uint ReadKey(void)//读矩阵键盘值(4*4键)
{
        uchar i;
        uint temp=0;
        for (i = 0; i < 4; i++)//4行扫描
        {
                PORTC |= 0xf0;//所有行置高电平
                PORTC &= ~(1 << (i + 4));//PC4-PC7依次输出低电平
                delay_nus(10);
                temp |= (((uint)(PINC & 0x0f)) << (4 * i));//依次读每行的4列,并依次打包到temp中,共16键位
        }
        return ~temp;//返回所有键位状态,按下为高,未按为低
}

void KeyScan(void)
{
        static uchar ii;//去抖次数计数
        static uint Curr = 0, Last;//当前及上次键值暂存

        if (ii == 0) Last = Curr;//存上次键值
        Curr = ReadKey();//取当前键值
        if (Curr^Last) { ii = 0; return; }//前后两次键值不一致,返回重新去抖判断
        else //前后两次键值相同
        {
                if ((++ii) < TIMES) return;//去抖次数累加未到设定值,返回再次去抖判断
        }
        ii = 0;//设定的去抖次数内,键值稳定,则累加清零,并更新状态参数
        TrgDown = Curr & (Curr^Prev);
        TrgUp = Prev & (Curr^Prev);
        Prev = Curr;
}

出0入0汤圆

发表于 2019-9-30 10:39:26 | 显示全部楼层
真的有那么神奇?

出0入0汤圆

发表于 2019-10-12 10:24:35 | 显示全部楼层
icoozy 发表于 2019-9-30 10:39
真的有那么神奇?

就是那么神奇,可以看看我使用事件机制封装后的,不用了解原理,就能上手使用。

https://www.amobbs.com/thread-5717909-1-1.html

出0入0汤圆

发表于 2019-10-12 10:25:36 | 显示全部楼层
BS_good200xy 发表于 2019-9-17 13:53
我在楼主方法上,做的矩阵键扫描,去抖程序,请各位指教.
#include "KeyBoard.h"
#include "DataType.h"

层主可以尝试下我的封装  https://www.amobbs.com/thread-5717909-1-1.html

出0入0汤圆

发表于 2019-11-13 21:48:40 | 显示全部楼层
再看了一下。精简啊啊啊。

出0入0汤圆

发表于 2020-4-25 17:07:22 | 显示全部楼层
终于抽时间细看了一遍
表述逻辑非常清晰
谢谢楼主分享

出0入0汤圆

发表于 2020-5-20 19:17:18 | 显示全部楼层
顶一下,学习学习!

出0入0汤圆

发表于 2020-5-21 21:44:42 | 显示全部楼层
有点东西,值得收藏

出0入0汤圆

发表于 2020-5-24 01:18:14 | 显示全部楼层
        ReadData = _pa^0xff;
        Trg = ReadData & (ReadData ^ Cont);
        Rls = Cont & (ReadData ^ Cont);
        Cont = ReadData;
其中:Rls = Cont & (ReadData ^ Cont); 是自己加的松手检测功能,希望对需要的朋友有用!

出0入0汤圆

发表于 2020-9-9 15:47:45 | 显示全部楼层
这个思路挺好的,一个长按,一个触发,通过这两个判断加上主函数扫描这个方法替换延时消抖,我觉得很不错,顶顶!

出0入0汤圆

发表于 2020-9-28 14:31:53 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-10-6 15:10:57 | 显示全部楼层
涨知识了,论坛能收藏帖子吗,想收藏起来想看的时候翻出来看

出0入0汤圆

发表于 2020-10-12 12:37:24 | 显示全部楼层
强啊,学习了

出0入0汤圆

发表于 2020-10-12 15:52:45 来自手机 | 显示全部楼层
核心思想是不错,可惜楼主代码写的不够一目了然,浪费了很多口水解释

出0入0汤圆

发表于 2020-10-12 16:16:23 来自手机 | 显示全部楼层
wuhuijiang 发表于 2019-5-19 12:15
这个核心就是:防抖哦。

这哪里防抖?

出0入0汤圆

发表于 2020-11-5 22:41:10 | 显示全部楼层
mark 一下

出0入0汤圆

发表于 2020-11-21 10:31:13 | 显示全部楼层
厉害了我的哥

出0入0汤圆

发表于 2021-8-26 11:47:29 | 显示全部楼层
             MARK                           

出0入0汤圆

发表于 2021-8-27 20:56:14 | 显示全部楼层
这方法不错,谢谢楼主

出0入0汤圆

发表于 2021-9-1 12:51:22 | 显示全部楼层
学习学习 感谢楼主分享

出0入0汤圆

发表于 2021-9-8 13:29:11 | 显示全部楼层

学习了!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-29 15:31

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

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