OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

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

查看: 6086|回复: 9

STM8 S003 按键识别 长按 短按 处理

[复制链接]

  离线 

4

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-10-7
在线时间
2 小时
发表于 2014-8-16 17:02:11 | 显示全部楼层 |阅读模式
正点原子公众号
[C] 纯文本查看 复制代码
 /**** KEY--PD5
****************************************************************************************/
#include \"key.h\"

extern   void Delay(u32 nCount);
extern   void Delays(unsigned int S);

u16 num=0;

void KEY_Init(void)
{
  // GPIO_Init(GPIOD,GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);
   GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_FL_NO_IT);
}
u16  Key_Scan(void)
{
       u16 key_press_num=0; 
      if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5))
       {
           Delay(0x3ff);/*  消抖 */
          if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5))
            {         
               while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5))
               { 
                    key_press_num++;  
                    Delay(0x3ff); //10x200=2000ms=2s 
                   //while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5));//这里用于识别是否按键还在按下执行相关动作,否则退出                                 
                  
                 }
               
           }
        }
      return   key_press_num;	//按键按下 key_press_num计数松手后返回
 }  
           
void Hand_key(void)
{  
   u16 a,key_press_num=0;
     
     key_press_num=Key_Scan();
      if(key_press_num>405) //大约2s                
         {
           key_press_num=0; //如果达到长按键标准 //则进入长按键动作
            while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5));//这里用于识别是否按键还在按下执行相关动作,否则退出                                 
             TIM2_SetCompare2(0);
             Delays(1);
             TIM2_SetCompare2(100);
             Delays(1);
             TIM2_SetCompare2(0);
             Delays(1);
             TIM2_SetCompare2(100);
             Delays(10);
             for(a=100;a>0;a--)
              {
               
               Delay(0xfff);
               TIM2_SetCompare2(a);	
               
               }
               TIM2_SetCompare2(0);       
         }                              
       else if(key_press_num>0&&key_press_num<400)
         {
            key_press_num=0; //如果达到短按键标准 //则进入短按键动作
             while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5));//这里用于识别是否按键还在按下执行相关动作,否则退出  
               num++;
              // TIM2_SetCompare2(90); 
              if(num==1)
              {
                      Delay(0xfff);
                      for(a=0;a<=99;a++)
                        {
                               Delay(0xfff);
                               Delay(0xfff);
                              TIM2_SetCompare2(a);		
                          }
                       TIM2_SetCompare2(100);
                 }
              if(num==2)
              {
                      Delay(0xfff);
                      for(a=100;a>70;a--)
                        {
                              Delay(0xfff);
                              Delay(0xfff);
                              TIM2_SetCompare2(a);		
                          }
                       TIM2_SetCompare2(70);
                 }
              if(num==3)
              {
                      num=0;
                      Delay(0xfff);
                      for(a=70;a>10;a--)
                        {
                              Delay(0xfff);
                              Delay(0xfff);
                              TIM2_SetCompare2(a);		
                          }
                       TIM2_SetCompare2(10);
                 }
               
         }      
    
}
产品使用有效。。
回复

使用道具 举报

  离线 

505

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

  离线 

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-8-28
在线时间
0 小时
发表于 2014-8-28 21:06:05 | 显示全部楼层
消抖延时空等,是一个很不好的处理方法


行业手持机,微型蓝牙打印机,微型条码打印机,58mm/80mm热敏打印模块,EPSON针式打印模块,串口磁条卡解码模块,ID、IC卡等RFID模块、读卡器,指纹识别模块
http://shop108236635.taobao.com/
诚接代理,开发定制
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-8-15
在线时间
0 小时
发表于 2016-8-15 15:42:15 | 显示全部楼层
学习学习!感谢
回复 支持 反对

使用道具 举报

  离线 

4

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2016-1-25
在线时间
74 小时
发表于 2017-7-28 17:42:19 | 显示全部楼层
正点原子公众号
看不明白,有看明白的能否讲一下算法思路
回复 支持 反对

使用道具 举报

  离线 

9

主题

197

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1778
金钱
1778
注册时间
2012-8-24
在线时间
192 小时
发表于 2017-8-2 16:49:52 | 显示全部楼层
最好讲一下你的按键各个状态检测方法和判断长按 短按 的原理?
回复 支持 反对

使用道具 举报

  离线 

0

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
723
金钱
723
注册时间
2017-5-27
在线时间
83 小时
发表于 2017-8-3 09:39:41 | 显示全部楼层
while 不建议使用,因为会影响其他handle的处理时间,为什么不在定时器中断里计数,主循环判断时间流逝程度,来做按键扫描呢
回复 支持 反对

使用道具 举报

  离线 

5

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2012-8-11
在线时间
7 小时
发表于 2017-8-4 09:58:43 | 显示全部楼层
谢谢楼主的分享
做人要出于情,做事要出于心!
回复 支持 反对

使用道具 举报

  离线 

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2014-7-8
在线时间
7 小时
发表于 2018-4-9 14:14:42 | 显示全部楼层
收藏了,谢谢!
回复 支持 反对

使用道具 举报

  离线 

10

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2016-4-22
在线时间
82 小时
发表于 2018-6-4 15:49:20 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

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

GMT+8, 2018-8-19 14:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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