zoukankan      html  css  js  c++  java
  • 【CC2530强化实训02】普通延时函数实现按键的长按与短按

    【CC2530强化实训02】普通延时函数实现按键的长按与短按

    【题目要求】
          用一个按键实现单击与双击的功能已经是很多嵌入式产品的常用手法。使用定时器的间隔定时来计算按键按下的时间是通用的做法,然而,使用普通的延时函数实现按键单击与双击的区分也是一个快速的处理手段。按键SW1单击的时候,切换D3灯的开关状态;按键SW1双击的时候,切换D4灯的开关状态。其中:
          按键SW1-------P1_2
          D3灯-----------P1_0(高电平点亮)
          D4灯-----------P1_1(高电平点亮)

    【实现思路】
      <1> 定义一个普通的延时函数Delay()、一个计算时间的变量count和一个延时阈值TT。
      <2> 当SW1第1次按下的时候,等待按键松开,只要count小于TT时,调用Delay()进行延时,累计count变量。
      <3> 在count小于TT时,发现SW1按键再次按下,则为双击按键。
      <4> 如果在count大于等于TT的延时过程中都没有第二次按键按下,则为单击按键。


    【实现代码】

    #include "ioCC2530.h"
    
    #define D3 P1_0
    #define D4 P1_1
    #define K1 P1_2
    #define TT 2000
    unsigned int count = 0;
    
    void Delay(unsigned int t)
    {
      while(t--);
    }
    
    void Init_Port()
    {
      P1SEL &= ~0x03;   //将P1_0和P1_1设置为通用I/O端口
      P1DIR |= 0x03;    //将P1_0和P1_1设置为输出模式  
      P1SEL &= ~0x04;   //将P1_2设置为通用I/O端口 
      P1DIR &= ~0x04;   //将P1_2设置为输入模式
    }
    
    void Scan_Keys()
    {
      if(K1 == 0)
      {
        Delay(100);       //按键去抖动处理
        if(K1 == 0)       //确认有按键按下
        {
          while(K1 == 0);
          while(count < TT)
          {
            Delay(100);
            count++;
            
            if(K1 == 0)         //双击处理
            {
              Delay(100);
              if(K1 == 0)
              {
                while(K1 == 0);
                D4 = ~D4;
                count = 0;
                break;
              }
            }
          }
          
          if(count >= TT)       //单击处理
          {
            D3 = ~D3;
            count = 0;
          }
        }
      }
    }
    
    void main()
    {
      Init_Port();      //初始化端口
      D3 = 1;
      D4 = 1;
      Delay(50000);
      D3 = 0;
      D4 = 0;
      while(1)
      {
        Scan_Keys();    //扫描按键
      }
    }

    广东职业技术学院  欧浩源 <小蜜蜂老师>  ohy3686@qq.com】

  • 相关阅读:
    js正则表达式,判断字符串是否以数字组结尾,并取出结尾的数字
    js中的正则表达式入门
    jQuery获取元素对象本身的html
    正则表达式,求判断字符串是否以数字组结尾,并取出结尾的数字 正则表达式
    行为树的设计与实现
    BMFONT 字体制作
    VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
    XCODE修改IOS应用的名称
    Xcode 生成 ipa包
    Xcode 打包 ipa 包
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/9733720.html
Copyright © 2011-2022 走看看