OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: warship

开源键扫例程--- 无须延时消抖等待,能稳定可靠地一体满足普通、短按(单击/双击)、长按、组合等应用需求的键盘扫描程序

    [复制链接]

0

主题

10

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-2-12
在线时间
6 小时
发表于 2019-4-2 18:56:58 | 显示全部楼层
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

32

主题

92

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4015
金钱
4015
注册时间
2015-12-21
在线时间
887 小时
发表于 2019-4-3 14:03:06 | 显示全部楼层
回复 支持 反对

使用道具 举报

233

主题

957

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1789
金钱
1789
注册时间
2011-10-9
在线时间
222 小时
发表于 2019-4-3 14:31:51 | 显示全部楼层
厉害了我的歌
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-10-24
在线时间
8 小时
发表于 2019-4-3 15:16:39 | 显示全部楼层
学习一下,看能有用于外部开关信号的检测
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2018-3-13
在线时间
26 小时
发表于 2019-4-3 22:43:36 | 显示全部楼层
学学!!!!!
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2018-10-13
在线时间
40 小时
发表于 2019-4-7 09:03:48 | 显示全部楼层
感谢
回复 支持 反对

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2015-3-22
在线时间
51 小时
发表于 2019-4-9 10:44:16 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2018-5-21
在线时间
29 小时
发表于 2019-4-9 10:44:53 | 显示全部楼层
获取解码密码等待下崽
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2018-9-9
在线时间
29 小时
发表于 2019-4-9 14:15:53 | 显示全部楼层
支持支持
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2016-10-30
在线时间
54 小时
发表于 2019-4-9 14:38:38 | 显示全部楼层
学习学习,很好
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-4-9
在线时间
0 小时
发表于 2019-4-9 15:26:12 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2019-3-14
在线时间
21 小时
发表于 2019-4-9 15:32:08 | 显示全部楼层
学习学习!
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2018-5-8
在线时间
49 小时
发表于 2019-4-9 21:54:16 | 显示全部楼层
本帖最后由 鵺楓 于 2019-4-9 21:55 编辑

。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2017-11-10
在线时间
35 小时
发表于 2019-4-10 13:14:52 | 显示全部楼层
学习学习,谢谢分享~
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-4-8
在线时间
6 小时
发表于 2019-4-10 14:07:24 | 显示全部楼层
解压密码
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-10
在线时间
9 小时
发表于 2019-4-10 14:17:58 | 显示全部楼层
优秀
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-10
在线时间
2 小时
发表于 2019-4-10 16:11:26 | 显示全部楼层
学习下
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-6-7
在线时间
8 小时
发表于 2019-4-11 09:37:34 | 显示全部楼层
好东西,学习一下
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2017-12-8
在线时间
80 小时
发表于 2019-4-11 14:46:06 | 显示全部楼层
谢谢分享,想学习一下
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2019-1-8
在线时间
13 小时
发表于 2019-4-11 15:22:59 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2019-4-11
在线时间
4 小时
发表于 2019-4-12 17:25:24 | 显示全部楼层
不错不错
回复 支持 反对

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-4-13 10:07:53 | 显示全部楼层
学习学习,看看跟我写的有什么不一样。
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2014-4-6
在线时间
60 小时
发表于 2019-4-13 10:43:59 | 显示全部楼层
好东西,研究下,谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-2-26
在线时间
5 小时
发表于 2019-4-13 14:07:52 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
324
金钱
324
注册时间
2016-9-8
在线时间
129 小时
发表于 2019-4-13 16:30:04 | 显示全部楼层
楼主厉害了,学习学习
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-4-13
在线时间
4 小时
发表于 2019-4-13 17:32:08 | 显示全部楼层
最近在做按键驱动,参考学习一下
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-7-7
在线时间
6 小时
发表于 2019-4-13 22:13:06 | 显示全部楼层
不错啊啊啊
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-3-21
在线时间
10 小时
发表于 2019-4-14 17:19:27 | 显示全部楼层
学习学习,谢谢大神
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-11-14
在线时间
9 小时
发表于 2019-4-15 22:41:36 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-4-16
在线时间
1 小时
发表于 2019-4-16 20:04:17 | 显示全部楼层
学习学习,谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-7-6
在线时间
22 小时
发表于 2019-4-18 17:02:48 | 显示全部楼层
我来学习了
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2019-4-18
在线时间
28 小时
发表于 2019-4-18 17:38:21 | 显示全部楼层
好东西!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!顶顶顶~
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2015-12-3
在线时间
36 小时
发表于 2019-4-18 18:18:48 | 显示全部楼层
找了很久
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-7-6
在线时间
6 小时
发表于 2019-4-18 18:21:03 | 显示全部楼层
支持支持
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2013-11-9
在线时间
45 小时
发表于 2019-4-18 21:40:42 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-10-11
在线时间
2 小时
发表于 2019-4-19 10:57:25 | 显示全部楼层
值得学习,对于按键来说,确实没有必要等待消抖演示,毕竟如果不去按按键是不可能被监测到的,如果监测到按下就可以认为按键被按下,状态机周期监测是个比较好的方法。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-4-19
在线时间
4 小时
发表于 2019-4-19 15:38:11 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2019-4-19
在线时间
27 小时
发表于 2019-4-19 15:40:32 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-4-19
在线时间
14 小时
发表于 2019-4-19 17:03:20 | 显示全部楼层
qqqq看一看
回复 支持 反对

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2019-4-20 09:52:44 | 显示全部楼层
我很早之前就已经写过这样的按键扫描了。
回复 支持 反对

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1739
金钱
1739
注册时间
2014-6-27
在线时间
943 小时
发表于 2019-4-20 10:02:36 | 显示全部楼层
warship 发表于 2018-8-18 14:42
已分享工程,在一楼,欢迎下载测试。

写的复杂了,这个方法我很早就已经写过了,发个简单的!


#define NONE_KEY 0
#define S1                         0x02
#define S2                         0x01











/*
  按键扫描函数,建议5MS扫描一次,一般10次祛抖50MS合适
*/
void scan_keypad(u8 *p)
{
        static u8 keyValue,tmp_keyValue,keyTrigger,keyKeep;
            static u16 keyDelayNum,keyDelayNumValue;
        keyValue=getKeyState();// // 得到按键的物理状态
           
                if(keyValue!=tmp_keyValue)
                {  
                        keyDelayNumValue=10;//设置去抖节拍数
                        tmp_keyValue=keyValue;
                        keyDelayNum=0;
                        keyTrigger=0;
                        keyKeep=0;
                        reutrn;
                }
                else
                {  
                        if(keyDelayNum<keyDelayNumValue)
                        {   
                                keyDelayNum++;
                                reutrn;
                        }
                        keyTrigger=keyValue&(keyValue^keyKeep);
                        keyKeep=keyValue;
                }
                if(keyValue)
                {      
                        if(fkeyLock==FALSE)//有必要,锁掉键盘
                        {
                                if(keyTrigger)
                                {
                                       
                                                 keyDelayNum = 0;
                                                            keyDelayNumValue = 400;//设置长按键节拍数

                                                            /*处理短按,得到键值,独立键值或组合键值
                                                                                                                       
                                                                switch(keyValue)
                                                                                {
                                                                                        *p = x;
                                                                                }
                                                                fkeyLock=TURE;有必要,锁住键盘,释放后才解锁,同样可以实现按键一次,释放之后才能再按键,一般不用
                                                           */
                                }
                                else
                                {

                                                     keyDelayNum = 0;
                                                            keyDelayNumValue =60;//设置连按键节拍数
                                       
                                               //处理长按键或者连按键,独立键值或组合键值,如果不需要,这里不添加代码
                                                                                /*switch(keyValue)
                                                                                {
                                                                                        *p = x;
                                                                                }
                                                                fkeyLock=TURE;有必要,锁住键盘,释放后才解锁,同样可以实现按键一次,释放之后才能再按键,一般不用

                                                        */               
                                            
                                }
                        }
               
                }
                else
                {   


                          //处理释放后要的键值,释放也已经祛抖,如同鼠标单击功能,双击,多击也在这里处理,不需要,直接清键值
                            
                       *p=NONE_KEY;
                       fkeyLock=FALSE;               
                }   
                       
        }
        
        
}
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2013-12-13
在线时间
34 小时
发表于 2019-4-20 11:53:34 | 显示全部楼层
好资料。。。。。谢谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-4-20
在线时间
1 小时
发表于 2019-4-20 13:54:54 | 显示全部楼层
下载测试测试
回复 支持 反对

使用道具 举报

1

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2014-11-6
在线时间
83 小时
发表于 2019-4-20 19:24:37 | 显示全部楼层
做项目正需要这个,感谢!
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-10-9
在线时间
5 小时
发表于 2019-4-20 22:36:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-4-21
在线时间
9 小时
发表于 2019-4-21 13:42:10 | 显示全部楼层
这个东西好呀

回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-21
在线时间
23 小时
发表于 2019-4-21 15:29:36 | 显示全部楼层
学习一波
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-1-20
在线时间
8 小时
发表于 2019-4-22 00:54:30 | 显示全部楼层
谢谢分享,正在做LCD菜单,需要到按键扫描
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2014-5-11
在线时间
39 小时
发表于 2019-4-22 11:49:55 | 显示全部楼层
这个例程牛B了!
回复 支持 反对

使用道具 举报

15

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
645
金钱
645
注册时间
2016-5-20
在线时间
170 小时
发表于 2019-4-22 13:39:25 | 显示全部楼层
mark  下载学习测试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 01:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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