alwen 发表于 2016-1-10 12:50:53

不错学习了

sidu320 发表于 2016-1-12 23:16:25

新手搞懂这个,并非那么容易,下载了没有用,会用才是王道。

oxcdd7 发表于 2016-1-16 00:28:49

能加上组合键的功能吗?

jeasey 发表于 2016-1-16 08:04:20

好思想!以后肯定能用到。谢谢分享

huangsiyu 发表于 2016-1-16 11:13:59

mark,以后慢慢看

chen849928055 发表于 2016-2-29 16:16:26

mcu_lover 发表于 2013-7-17 19:38
呵呵,不错。我已经用了好几年了。和你的方式一模一样,调用接口也一致,不同的是我把键值和按键状态封装在 ...

你也可以发上来看看,感觉你的写的也挺整齐的。

yiming988 发表于 2016-3-1 09:30:35

oxcdd7 发表于 2016-1-16 00:28
能加上组合键的功能吗?

你仔细看看,组合键、多组合键用这个模块都是支持的,从按键队列里类似滑窗的去识别就行,想想街机游戏的连招~

oaixuw 发表于 2016-3-1 12:56:40

高手,长见识了

Yvan 发表于 2016-3-4 11:43:16

通用的模块化设计!好东西啊,学习学习。

limaotaizi 发表于 2016-3-4 23:36:41

学习看看

Yvan 发表于 2016-3-8 23:54:18

按键处理那里的状态机部分确实是和农民讲习所讲的那个差不多。

1328616904 发表于 2016-3-9 16:42:32

好贴。。。。。。。

闷鱼 发表于 2016-3-18 20:48:52

宏定义的按键检测次数,长按,连续触发计数与实际的时间对应不上。

闷鱼 发表于 2016-3-18 22:13:27

举个例子:

#define KEY_UINT_COUNT                  10 // 间隔10ms执行一次key_task()
#define KEY_QUEUE_SIZE                         10
#define KEY_COUNT                                    3
#define KEY_LONG_TIME                         100
#define KEY_REPEAT_TIME                        20

使用STM32L151,内部时钟32MHz,Systick 定时中断 1ms。key_task()间隔10ms运行一次,key_app() 1ms运行一次在超级循环中。

在连续触发事件中翻转IO口,理论上来说,翻转间隔应该是10*3*20 = 600ms,加上代码本身运行的时间,也是600ms超过一点点,但是目前计算的IO翻转频率是1.04Hz,一个周期就是900.9ms,翻转一次IO口也就是连续触发单次响应时间是900.9/2 = 450ms左右。

目前还没查到原因。

yzn327 发表于 2016-3-19 12:46:26

这个吊。

yzn327 发表于 2016-3-19 12:47:47

我想知道傻孩子工作室现在是什么情况,经常能看到这个工作室的精华帖,我是新人

Yvan 发表于 2016-4-8 10:14:25

有谁能讲解一下状态流程图的原理吗?key_check, key_frontend, key_detetor

Yvan 发表于 2016-4-8 10:39:19

本帖最后由 Yvan 于 2016-4-8 10:44 编辑

yiming988 发表于 2016-3-1 09:30
你仔细看看,组合键、多组合键用这个模块都是支持的,从按键队列里类似滑窗的去识别就行,想想街机游戏的 ...

如果是key1按住不放,然后key2也按下,这种组合键就不行了吧?

uint8_t get_key_scan_value(void)
{
        if (IS_KEY1_DOWN()) {   //若key1按下
                return KEY_1;      //返回
        }
       
        if (IS_KEY2_DOWN()) {   //若key2按下
                return KEY_2;      //返回
        }
       
        return KEY_NULL;
}

因为key1按住不放之后,永远得不到key2的返回值了啊

我是一个大白菜 发表于 2016-4-8 18:15:23

谢谢学习了,mark,按键

xuanwozhe 发表于 2016-4-8 18:21:48

高大上,先mark一下

yiming988 发表于 2016-4-16 19:23:38

Yvan 发表于 2016-4-8 10:39
如果是key1按住不放,然后key2也按下,这种组合键就不行了吧?

uint8_t get_key_scan_value(void)


你没仔细看代码:
get_key_scan_value是按键模块的“输入”,不是按键模块的“输出”

Yvan 发表于 2016-4-16 20:58:53

qingaixww 发表于 2014-3-3 17:19
我觉得这样可以,最多只产生KEY_COUNT-1个计数误差,对于按键处理是没有问题的。谢谢你的回复! ...

确实是多了这个计时误差,当初看了半天没想明白作者为啥这么处理。原来是为了消除那个BUG。。。。。。。

Yvan 发表于 2016-4-16 20:59:49

yiming988 发表于 2016-4-16 19:23
你没仔细看代码:
get_key_scan_value是按键模块的“输入”,不是按键模块的“输出” ...

这个。。。。我还没想明白,能再解析一下么?我再看看。

lyl520719 发表于 2016-4-17 04:46:06

状态机真是个好东西。

yiming988 发表于 2016-4-18 17:32:33

Yvan 发表于 2016-4-16 20:59
这个。。。。我还没想明白,能再解析一下么?我再看看。

用户从按键事件队列里拿检测结果,前一个key1_down事件后接着key2_down事件不就是两个键组合了?单键的话是一个key_down后面会有key_up,之后才有其他键的key_down

所以 这个模块可以无数键组合……   

所以 你要的组合按键“大招识别”功能是有的……

bigwei 发表于 2016-5-8 20:14:05

下载 学习了!

yangbo18416 发表于 2016-5-19 10:29:29

学习了,用模块化的方式处理按键!!!!

bigwei 发表于 2016-5-19 14:46:41

程序中队列部分能通过数组实现么,如果能实现的话相比于队列有什么优缺点呢,小白请教楼主,谢谢~

海底的仙人掌1 发表于 2016-5-22 19:38:16

不错的帖子,学习下

yao2013lin 发表于 2016-8-12 22:31:42

enovo2468 发表于 2014-5-2 21:46
test 2F.rar 找不到..\..\device.h
Fatal Error: cannot open source file "..\..\device.h" H:\test 2F\te ...

我也碰到这样的王缇不知道怎么改用的是iararm 7.2

beihai326 发表于 2016-8-19 10:48:37

mark!!!!!!

Gorgon_Meducer 发表于 2016-8-21 16:28:59

bigwei 发表于 2016-5-19 14:46
程序中队列部分能通过数组实现么,如果能实现的话相比于队列有什么优缺点呢,小白请教楼主,谢谢~ ...

这里的环形队列就是用数组实现的啊。队列是流处理,数组其实是块处理

huike 发表于 2016-8-22 01:00:01

本帖最后由 huike 于 2016-8-22 01:09 编辑

看楼主位的说明很简单,但是可能自己水平不够没有在KEIL上弄成功。
KEY的通用代码,在里面交织了太多东西了。难以入手。
OOPO.H在KEY.RAR包里没有,KEY和KEYQUEUE里面有两个APP_CFG.H,这两个不一样,有什么区别吗

hefen-cai 发表于 2016-9-7 22:07:37

下载回去慢慢理解

linquan315 发表于 2016-10-28 13:00:01

很强大,写的好!

mceachran 发表于 2016-11-6 13:20:27

最近在做一个显控的小项目,学习一下按键模块的使用,这个资料太棒了。。

yao2013lin 发表于 2016-11-23 17:56:49

已经移植成功,受益匪浅

yao2013lin 发表于 2016-11-23 17:58:38

下面是我改的一个例程已经验证过了 使用的iar 7.4编译的。

yao2013lin 发表于 2016-11-24 15:28:57

y574924080 发表于 2014-4-9 12:33
我这边验证过这个,确实没有问题

另外有个想确认一下,你的开关全局中断的函数能保证原子性么? ...

我把代码移植到带有操作freertos的操作系统上 ,运行到这个函数KEY_DEQUEUE的SAFE_ATOM_CODE处时系统会崩溃,我看了代码 现在我怀疑是关了中断没有开中断引起的

soga238 发表于 2016-12-10 21:21:53

yao2013lin 发表于 2016-11-24 15:28
我把代码移植到带有操作freertos的操作系统上 ,运行到这个函数KEY_DEQUEUE的SAFE_ATOM_CODE处时系统会 ...

我移植ucos上,也是因为这个函数不执行了,直接换成ucos的开关中断, 就好了。程序里的bug楼主也没改,可能事件过于久远了吧

Gorgon_Meducer 发表于 2016-12-27 17:32:01

soga238 发表于 2016-12-10 21:21
我移植ucos上,也是因为这个函数不执行了,直接换成ucos的开关中断, 就好了。程序里的bug楼主也没改,可 ...

SAFE_ATOM_CODE的宏一般就是要根据具体平台重新定义的。
你提到程序里的BUG,能说一下是哪个么?我看看抽空修改下。毕竟这个帖子对大家来说有一定的示范效应,有错误就应该修正掉。

另外,做个广告,近期将发布另外一个模块。并以此模块为基础(平台),开展一系列有趣的小设计。

Gorgon_Meducer 发表于 2016-12-27 17:33:42

huike 发表于 2016-8-22 01:00
看楼主位的说明很简单,但是可能自己水平不够没有在KEIL上弄成功。
KEY的通用代码,在里面交织了太多东西了 ...

app_cfg.h在模块中是类似基础设施的东西,只用来从模块外部传递配置信息到模块内部,本身通常并不包含有用的信息。

xiaochu312 发表于 2017-2-10 16:34:44

本帖最后由 xiaochu312 于 2017-2-10 17:22 编辑

新手呀,看不懂{:cry:}有在STM32上移植ok 的吗?

stm32_bldc 发表于 2017-2-14 17:36:43

呵呵,终于找到这个神帖子了,开心,mark

Gorgon_Meducer 发表于 2017-2-23 14:21:51

xiaochu312 发表于 2017-2-10 16:34
新手呀,看不懂有在STM32上移植ok 的吗?

硬件无关的软件模块

黑夜之狼 发表于 2017-3-13 23:13:10

马上收藏,好的帖子!

shouqiang_zhang 发表于 2017-3-24 06:20:54

收下,用到的时候参考下.

suxiaobo 发表于 2017-3-24 07:50:07

谢谢分享。收藏了。

52avr 发表于 2017-4-5 11:09:55

按键模块程序,收藏学习,谢谢!

Phonse 发表于 2017-4-5 11:18:21

从原理讲到代码。。赞。。

li.wen 发表于 2017-4-5 13:26:08

非常好,使用方便!

ggggidtf520 发表于 2017-4-6 09:16:33

加油了,,,,

laosun9911 发表于 2017-5-28 09:01:55

平时用C不多,收藏下,有空拜读学习!

ithinkgod987 发表于 2017-6-11 17:45:57

果然不错,项目正好用到。呵呵。

hhd 发表于 2017-6-16 00:26:31

精华帖,收藏!

didadida 发表于 2017-8-15 11:31:41

顶四哥,顶老师。另外,最后一个状态图,长按计时的两个输出状态应该是“没有超时”和“超时”吧,就像连按计时那样~

simplorer 发表于 2017-9-18 21:49:21

mark,通用按键模块,简单易用。

mdcao 发表于 2018-4-10 08:15:17

学习学习数据流图

wahaha 发表于 2018-6-12 11:25:53

标记一下,好好拜读~~

simplorer 发表于 2018-6-12 14:07:15

按键代码,mark

pjdu 发表于 2018-7-31 17:41:20

先MARK一下,下次再来看

iyctj4 发表于 2018-9-20 17:55:55

it's easy to understand.

BS_good200xy 发表于 2018-9-24 21:31:16

正想好好研究一下多功能按键的实现。

pingqifa 发表于 2018-9-25 08:34:08

mark一下

a673261839 发表于 2018-11-1 10:06:10


学习,谢谢!!!

QL攻城狮 发表于 2018-11-5 09:17:44

先慢慢看,很厉害

a673261839 发表于 2018-11-5 14:02:24

学习!!!感谢分享!!!

zhenhuajiang 发表于 2018-11-5 21:21:24

楼主辛苦 谢谢分享

wowangru 发表于 2018-11-13 21:20:29

看起挺复杂的

aeri365 发表于 2018-12-11 08:32:00

感觉按键处理这块还是挺复杂的。

nn5499 发表于 2019-3-26 12:01:38

学习,标记一下等会回来学习。

diego2003 发表于 2019-5-5 14:52:22

MARK    高手!!!!!!!!

wowangru 发表于 2019-5-5 16:25:34

相当不错

xuwuhan 发表于 2019-7-10 14:50:57

坛里都是大神,好好学习

qinglong 发表于 2019-7-15 07:04:33

好资料,谢谢楼主分享

limaotaizi 发表于 2019-7-15 09:59:14

扫描按键

horary 发表于 2020-5-21 14:14:17

顶一下,学习学习!

bms513 发表于 2020-6-19 17:22:06

学习一下 很经典的通用模块

bms513 发表于 2020-6-28 17:26:16

经典就是经典啊再次学习

evgstar 发表于 2020-6-28 20:38:15

非常不错,学习一下!

Gorgon_Meducer 发表于 2020-7-1 20:06:41

xyz2008 发表于 2013-11-22 10:39
虽然没有,完全看懂,但应该是可以用了,很好,很强大

使用的时候如果有什么疑问,欢迎在这里留言。
页: 1 2 3 4 5 [6]
查看完整版本: [分享][交流]发一个通用按键模块,简单易用 [2014-3-24 Update]