OpenEdv-开源电子网

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

新型的按键扫描程序

[复制链接]

14

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2011-8-8
在线时间
15 小时
发表于 2011-8-13 21:04:52 | 显示全部楼层 |阅读模式
  分享一篇网上的新型的按键扫描程序 ~~~~~~~我已经在STM32上移植成功了,呵呵,这样的算法真的挺好的

新型的按键扫描程序.pdf

142.18 KB, 下载次数: 3396

上帝之所以创造指纹,是因为他想让人们知道:其实,每个人都有伤痕。?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-8-14 00:47:31 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2011-1-20
在线时间
7 小时
发表于 2011-8-15 15:45:49 | 显示全部楼层
能否和大家分享一下你的作品?
回复 支持 反对

使用道具 举报

14

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2011-8-8
在线时间
15 小时
 楼主| 发表于 2011-8-15 22:24:10 | 显示全部楼层
就把上面的稍微移植一下就行了,我想大家都可以搞定的,我的是这样的/**************************************
 函数名称:Keyread
 函数功能:按键识别函数
 入口函数: 无
 返回参数:Triger/Continue
 备    注:Triger/Continue为全局变量
           Triger表示按键触发(无键为0)
   Continue表示连续按下(松开为0)
***************************************/
void Keyread (void)
{
  unsigned char ReadData=~((GPIOB->IDR)>>8);
  Triger=ReadData&(ReadData^Continue);
  Continue=ReadData;
  delay_ms(10);
}
上帝之所以创造指纹,是因为他想让人们知道:其实,每个人都有伤痕。?
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2012-2-14 18:05:38 | 显示全部楼层
刚在另一贴提问,就找了,哈哈,拿下来学习
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2012-2-14 18:18:20 | 显示全部楼层
回复【4楼】小曾:
---------------------------------
请问可以读取多个IO口的值吗?比如PB1,PB4……
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-2-15 01:06:12 | 显示全部楼层
回复【6楼】寒寒:
---------------------------------
可以的.直接读取一个port都可以.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2012-2-15 08:31:15 | 显示全部楼层
这个有在AM论坛上看过,据说不错的。
回复 支持 反对

使用道具 举报

48

主题

376

帖子

0

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2011-3-18
在线时间
7 小时
发表于 2012-2-15 10:10:50 | 显示全部楼层
good
回复 支持 反对

使用道具 举报

20

主题

93

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
420
金钱
420
注册时间
2010-12-16
在线时间
20 小时
发表于 2012-2-15 10:55:25 | 显示全部楼层
不错呀!俺也用了
我就是我,等待爆发那一刻......
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2012-2-15 11:08:26 | 显示全部楼层
绝了
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2012-2-15 12:11:31 | 显示全部楼层
回复【4楼】小曾:
就把上面的稍微移植一下就行了,我想大家都可以搞定的,我的是这样的/**************************************
 函数名称:Keyread
 函数功能:按键识别函数
 入口函数: 无
 返回参数:Triger/Continue
 备    注:Triger/Continue为全局变量
           Triger表示按键触发(无键为0)
   Continue表示连续按下(松开为0)
***************************************/
void Keyread (void)
{
  unsigned char ReadData=~((GPIOB->IDR)>>8);
  Triger=ReadData&(ReadData^Continue);
  Continue=ReadData;
  delay_ms(10);
}
---------------------------------
你好,GPIOB->IDR是16位的数据, ReadData是8位数据
unsigned char ReadData=~((GPIOB->IDR)>>8);是高8位赋值吗?
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

14

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2011-10-14
在线时间
2 小时
发表于 2012-3-2 17:01:48 | 显示全部楼层
谢谢 试着移植一下
回复 支持 反对

使用道具 举报

14

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2011-10-14
在线时间
2 小时
发表于 2012-3-6 22:05:16 | 显示全部楼层
移植成功 呵呵
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-3-10 00:45:49 | 显示全部楼层
看看学习
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2010-12-14
在线时间
3 小时
发表于 2013-9-12 16:31:14 | 显示全部楼层
不错的处理方法,有创意
回复 支持 反对

使用道具 举报

7

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2013-4-10
在线时间
48 小时
发表于 2013-9-13 14:33:15 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-9-28
在线时间
0 小时
发表于 2013-9-29 22:06:33 | 显示全部楼层
//按键程序,使用标志位代替延时消抖        
if(KEY1==0)
    flag=1;
if(KEY1==1&flag==1)
{
    j+=1;
    flag=0;
}
回复 支持 反对

使用道具 举报

13

主题

314

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2012-7-20
在线时间
102 小时
发表于 2013-9-29 23:28:02 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

3

主题

34

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2013-9-9
在线时间
0 小时
发表于 2013-9-30 00:40:40 | 显示全部楼层
谢谢楼主的分享精神,这个方法在很久以前就看过!确实不错!
回复 支持 反对

使用道具 举报

5

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2014-2-13
在线时间
98 小时
发表于 2014-5-23 12:02:40 | 显示全部楼层
假如IO端口不是连续,比如用PB2-PB6、PG11-PG13,能用这个程序吗?
回复 支持 反对

使用道具 举报

27

主题

308

帖子

1

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2012-6-19
在线时间
19 小时
发表于 2014-5-23 12:40:58 | 显示全部楼层
cool!  不错
回复 支持 反对

使用道具 举报

1

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-12
在线时间
9 小时
发表于 2014-5-23 19:47:48 | 显示全部楼层
很不错,尤其是Trg和Cout的算法,充分发挥了数学。
赞!
功夫再高、也怕羊刀
回复 支持 反对

使用道具 举报

9

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2012-12-25
在线时间
0 小时
发表于 2014-5-24 20:45:33 | 显示全部楼层
回复【21楼】bjtmh:
---------------------------------
也是可以的,只需要通过一个简单的算法即可。
不忘初心,才能始终。
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13092
金钱
13092
注册时间
2012-11-26
在线时间
3810 小时
发表于 2014-5-24 20:48:26 | 显示全部楼层
还是延时去抖?

楼主可以去找下定时器扫描的办法去判定key有没有按下
学无止境
回复 支持 反对

使用道具 举报

5

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2014-2-13
在线时间
98 小时
发表于 2014-5-30 09:05:52 | 显示全部楼层
回复【24楼】Mars_wei:
---------------------------------
什么算法?请说说
回复 支持 反对

使用道具 举报

9

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1849
金钱
1849
注册时间
2019-3-8
在线时间
324 小时
发表于 2020-1-3 10:30:45 | 显示全部楼层
请问下这个方法在长按的时候,短按也会反应一次,这个怎么解决?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 12:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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