搜索
bottom↓
楼主: zhuhanliang

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

  [复制链接]
(124708788)

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入17汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

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

出0入0汤圆

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

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

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

出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]
(50753012)

出0入0汤圆

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

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

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

出0入0汤圆

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

出0入0汤圆

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

出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.....................
(42558076)

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出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
(37792091)

出0入4汤圆

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

出0入0汤圆

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

出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;
}
(30986242)

出0入0汤圆

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

出0入0汤圆

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

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

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

出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
(27144488)

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出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); 是自己加的松手检测功能,希望对需要的朋友有用!
(1159743)

出0入0汤圆

发表于 2020-9-9 15:47:45 | 显示全部楼层
这个思路挺好的,一个长按,一个触发,通过这两个判断加上主函数扫描这个方法替换延时消抖,我觉得很不错,顶顶!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-9-23 01:56

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

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