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
虽然没有,完全看懂,但应该是可以用了,很好,很强大
使用的时候如果有什么疑问,欢迎在这里留言。