OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
楼主: warship

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

  [复制链接]

  离线 

0

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2011-6-4
在线时间
5 小时
发表于 2018-9-10 16:31:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

  离线 

55

主题

508

帖子

0

精华

高级会员

Rank: 4

积分
916
金钱
916
注册时间
2014-11-18
在线时间
154 小时
发表于 2018-9-10 18:06:23 | 显示全部楼层
warship 发表于 2018-9-10 15:32
哈哈过奖了,真的觉得程序有用的话,记得在我的github上点个赞哦,谢谢

可以加个联系方式吗?

我的QQ867051287
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-10 19:13:26 | 显示全部楼层
aiyeba 发表于 2018-9-10 18:06
可以加个联系方式吗?

我的QQ867051287

基本不用QQ了,论坛倒是常来,有事可以站短或直接跟帖哦
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2016-4-23
在线时间
25 小时
发表于 2018-9-10 22:33:52 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

  离线 

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2011-1-18
在线时间
41 小时
发表于 2018-9-11 09:58:34 | 显示全部楼层
看看,学习学习!!!!!!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

  离线 

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
499
金钱
499
注册时间
2016-1-28
在线时间
84 小时
发表于 2018-9-12 20:08:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

  离线 

0

主题

189

帖子

0

精华

高级会员

Rank: 4

积分
748
金钱
748
注册时间
2017-5-27
在线时间
86 小时
发表于 2018-9-12 20:49:16 | 显示全部楼层
看看,了解了解
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-9-13
在线时间
0 小时
发表于 2018-9-13 13:19:47 | 显示全部楼层
我正在调按键代码,过来借鉴一下
回复 支持 反对

使用道具 举报

  离线 

5

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2017-3-1
在线时间
63 小时
发表于 2018-9-13 13:29:54 | 显示全部楼层
看起来好溜的样子。。。。。。。。。。。
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-13 21:51:56 | 显示全部楼层
NewGuard 发表于 2018-9-13 13:29
看起来好溜的样子。。。。。。。。。。。

哈哈,谁用谁知道。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

31

主题

186

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
365
金钱
365
注册时间
2016-4-12
在线时间
141 小时
发表于 2018-9-14 11:47:02 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

  离线 

10

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2018-5-8
在线时间
24 小时
发表于 2018-9-14 14:37:40 | 显示全部楼层
soft reset
回复 支持 反对

使用道具 举报

  离线 

7

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2011-11-12
在线时间
29 小时
发表于 2018-9-14 19:06:02 | 显示全部楼层
感谢楼主分享,学习下
回复 支持 反对

使用道具 举报

  离线 

7

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2011-11-12
在线时间
29 小时
发表于 2018-9-14 20:22:13 | 显示全部楼层
warship 发表于 2018-9-5 21:00
不好意思,
我不是版主,
如果觉得好用的话,

为了给你点个赞,专门注册了个账号。
我也了解下那个网站,学习学习。
感谢楼主分享
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-14 21:55:16 | 显示全部楼层
BowenQQ 发表于 2018-9-14 20:22
为了给你点个赞,专门注册了个账号。
我也了解下那个网站,学习学习。
感谢楼主分享

啥也别说了,
感动的眼泪哗哗的。
不过注册那个网站不会让你后悔的,
据说世界上最优秀的开源代码都在它上面。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

7

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2011-11-12
在线时间
29 小时
发表于 2018-9-14 22:10:16 | 显示全部楼层
本帖最后由 BowenQQ 于 2018-9-14 22:13 编辑

warship 发表于 2018-9-14 21:55
啥也别说了,
感动的眼泪哗哗的。
不过注册那个网站不会让你后悔的,


楼主 请教个问题,我最近也在弄4*4矩阵键盘,我出来的键值不对呀,郁闷中

[C] 纯文本查看 复制代码
void Key_Config(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;   
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
   
         /********4行输出*********/
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOF, &GPIO_InitStructure);
         
         /********4列输入*********/
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOF, &GPIO_InitStructure);        
}

int KeyScan(void)
{
   uchar KeyVal;
        
   GPIO_Write(GPIOF, (GPIOF->ODR & 0xFFC3 | 0x003C));                 //0xf0ff | 0x0f00
          
         if((GPIOF->IDR & 0x03C0)==0x0000)           //0xf000                                                         
                  return -1;
         else
         {        
            delay_ms(5);    //延时5ms去抖动
            if((GPIOF->IDR & 0x03C0)==0x0000)                //0xf000
            return -1;
         }
         
         GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0004));        //0xf0ff | 0x0100 
         switch(GPIOF->IDR & 0x03C0)        //0xf000
         {
             case 0x0040: KeyVal=0; break;                //0x1000
                        case 0x0080: KeyVal=1;        break;        //0x2000
                        case 0x0100: KeyVal=2;        break;        //0x4000
                        case 0x0200: KeyVal=3;        break;        //0x8000
   }
         while((GPIOF->IDR & 0x03C0)        > 0);     //0xf000
         
         GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0008));        //0xf0ff | 0x0200
                switch(GPIOF->IDR & 0x03C0)                 //0xf000       
                {
                        case 0x0040: KeyVal=4;        break;
                        case 0x0080: KeyVal=5;        break;
                        case 0x0100: KeyVal=6;        break;
                        case 0x0200: KeyVal=7;        break;
                }
    while((GPIOF->IDR & 0x03C0)        > 0);                //0xf000
                
          GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0010));        //0xf0ff | 0x0400
                switch(GPIOF->IDR & 0x03C0)                //0xf000                
                {
                        case 0x0040: KeyVal=8;        break;
                        case 0x0080: KeyVal=9;        break;
                        case 0x0100: KeyVal=10;        break;
                        case 0x0200: KeyVal=11;        break;
                }
    while((GPIOF->IDR & 0x03C0)        > 0);                //0xf000
                
          GPIO_Write(GPIOF,(GPIOF->ODR & 0xFFC3 | 0x0020));        //0xf0ff | 0x0800
                switch(GPIOF->IDR & 0x03C0)                 //0xf000       
                {
                        case 0x0040: KeyVal=12;        break;
                        case 0x0080: KeyVal=13;        break;
                        case 0x0100: KeyVal=14;        break;
                        case 0x0200: KeyVal=15;        break;
                }
                while((GPIOF->IDR & 0x03C0)        > 0);                //0xf000    
          
                return KeyVal;
[indent]}
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-14 22:14:13 | 显示全部楼层
BowenQQ 发表于 2018-9-14 22:10
warship 发表于 2018-9-14 21:55啥也别说了,
感动的眼泪哗哗的。
不过注册那个网站不会让你后悔的,

看我的20KEY例子
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

7

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2011-11-12
在线时间
29 小时
发表于 2018-9-14 22:26:53 | 显示全部楼层

20KEY的例子是153楼吗?代码好像不全,添加进去有几个变量未定义
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-14 22:30:06 | 显示全部楼层
BowenQQ 发表于 2018-9-14 22:26
20KEY的例子是153楼吗?代码好像不全,添加进去有几个变量未定义

https://github.com/ShuifaHe/STM32/blob/master/20Keys_Example.c这里也有,
研究一下,仿这个写,
如果有不对,再贴过来我帮你看。
不要再用你上面的键扫了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

7

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2011-11-12
在线时间
29 小时
发表于 2018-9-14 22:31:57 | 显示全部楼层
warship 发表于 2018-9-14 22:30
https://github.com/ShuifaHe/STM32/blob/master/20Keys_Example.c这里也有,
研究一下,仿这个写,
如 ...

好的,感谢指点,我参考下
回复 支持 反对

使用道具 举报

  离线 

2

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2018-9-2
在线时间
38 小时
发表于 2018-9-14 22:38:25 | 显示全部楼层
cool,谢谢分享。 学习了
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-5-7
在线时间
6 小时
发表于 2018-9-15 08:17:15 | 显示全部楼层
多谢分享  小白学习一下
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-6-26
在线时间
4 小时
发表于 2018-9-15 09:31:39 | 显示全部楼层
ALIENTEK战舰STM32开发板
回复 支持 反对

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-9-14
在线时间
2 小时
发表于 2018-9-15 09:36:43 | 显示全部楼层
学习一下   
回复 支持 反对

使用道具 举报

  离线 

0

主题

4

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-8-27
在线时间
17 小时
发表于 2018-9-16 00:01:14 | 显示全部楼层
谢谢分享              
回复 支持 反对

使用道具 举报

  离线 

1

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
407
金钱
407
注册时间
2014-4-14
在线时间
61 小时
发表于 2018-9-17 15:06:56 | 显示全部楼层
单个按键?
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-9-17
在线时间
0 小时
发表于 2018-9-17 16:01:20 | 显示全部楼层
厉害,考虑的真全面
回复 支持 反对

使用道具 举报

  离线 

0

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-1-28
在线时间
9 小时
发表于 2018-9-18 14:02:10 | 显示全部楼层
回复后可获取解压密码,谢谢支持。
回复 支持 反对

使用道具 举报

  离线 

16

主题

153

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2014-12-4
在线时间
190 小时
发表于 2018-9-19 12:17:28 | 显示全部楼层
下载看看
回复 支持 反对

使用道具 举报

  在线 

8

主题

466

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1368
金钱
1368
注册时间
2015-8-25
在线时间
261 小时
发表于 2018-9-19 13:16:58 | 显示全部楼层

谢谢分享 mark
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-9-28
在线时间
2 小时
发表于 2018-9-19 14:12:10 | 显示全部楼层
谢谢!
回复 支持 反对

使用道具 举报

  离线 

0

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-1-16
在线时间
9 小时
发表于 2018-9-19 14:15:25 | 显示全部楼层
优秀
回复 支持 反对

使用道具 举报

  离线 

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-10-19
在线时间
55 小时
发表于 2018-9-19 14:54:35 | 显示全部楼层
:
回复 支持 反对

使用道具 举报

  离线 

8

主题

19

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-4-24
在线时间
14 小时
发表于 2018-9-19 16:15:19 | 显示全部楼层
  大佬  看看  膜拜
回复 支持 反对

使用道具 举报

  离线 

4

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
320
金钱
320
注册时间
2016-6-15
在线时间
166 小时
发表于 2018-9-19 21:54:53 来自手机 | 显示全部楼层
看看        
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-9-19
在线时间
0 小时
发表于 2018-9-19 23:09:34 | 显示全部楼层
下载下来研究研究
回复 支持 反对

使用道具 举报

  离线 

2

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2014-9-26
在线时间
23 小时
发表于 2018-9-20 09:02:28 | 显示全部楼层
马克一下,学习一下代码的逻辑
潜伏LED流水灯百八十年
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2018-9-20
在线时间
7 小时
发表于 2018-9-20 11:09:13 | 显示全部楼层
warship 发表于 2018-8-15 22:36
u16 KeyStable; //全局变量:存有稳定(消除抖动后)的当前键态
u16 KeyTime=0;  //存放按键持续时间长度

...


本帖最后由 warship 于 2018-8-18 21:02 编辑


u16 KeyStable; //全局变量:存有稳定(消除抖动后)的当前键态
u16 KeyTime=0;  //存放按键持续时间长度

//这是网友转发的三行读键程序(实为两行)
u16 Trg=0;
u16 Cont=0;
void KeyRead(void)
{
        Trg=KeyStable & (KeyStable ^ Cont);
        Cont=KeyStable;
}
这几句确实是经典,写得非常好,
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-20 11:27:30 | 显示全部楼层
YGYGYG 发表于 2018-9-20 09:02
马克一下,学习一下代码的逻辑

如觉得好的话请点一下赞。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-20 11:28:47 | 显示全部楼层
sky68 发表于 2018-9-20 11:09
本帖最后由 warship 于 2018-8-18 21:02 编辑

可以到我的站点https://github.com/ShuifaHe/STM32.git去下载最新的源代码,如果觉得好的话请点一下赞。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-4-6
在线时间
51 小时
发表于 2018-9-20 11:48:01 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-11-25
在线时间
4 小时
发表于 2018-9-20 12:01:24 | 显示全部楼层
好东西
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-20 12:59:40 | 显示全部楼层

可以到我的站点https://github.com/ShuifaHe/STM32.git去下载最新的源代码,如果觉得好的话,可以在里面点一个赞。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-20 13:00:09 | 显示全部楼层
刘春 发表于 2018-9-19 16:15
大佬  看看  膜拜

如果觉得好的话可以点赞哦。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-8-20
在线时间
4 小时
发表于 2018-9-20 13:06:12 | 显示全部楼层
点赞!!!
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2017-9-17
在线时间
1 小时
发表于 2018-9-20 15:20:22 | 显示全部楼层
这个要看看,好东西啊。。。。。
回复 支持 反对

使用道具 举报

  离线 

24

主题

1248

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2112
金钱
2112
注册时间
2018-5-11
在线时间
397 小时
 楼主| 发表于 2018-9-20 16:03:53 | 显示全部楼层

是到这里https://github.com/ShuifaHe/STM32.git去点赞哦。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

  离线 

10

主题

42

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2014-11-30
在线时间
2 小时
发表于 2018-9-20 16:32:24 | 显示全部楼层
啥东西这么神秘
还有谁?
回复 支持 反对

使用道具 举报

  离线 

1

主题

10

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2011-1-5
在线时间
1 小时
发表于 2018-9-20 17:05:25 | 显示全部楼层
谢谢分享,学习一下
回复 支持 反对

使用道具 举报

  离线 

21

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2014-2-18
在线时间
122 小时
发表于 2018-9-20 18:35:24 | 显示全部楼层
???????????????
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-24 13:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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