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


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

    【题目要求】
        用一个按键实现长按与短按的功能已经是很多嵌入式产品的常用手法。使用定时器的间隔定时来进行按键按下的时间是通用的做法,然而对于不太熟悉定时器使用,又没有严格的延时长度的情况下,使用普通的延时函数实现长短按键的区分也是一个不错的选择。按键SW1短按的时候,切换D3灯的开关状态;按键SW1长按的时候,切换D4灯的开关状态。其中:

         按键SW1---------P1_2
          D3灯-------------P1_0(高电平点亮)
          D4灯-------------P1_1(高电平点亮)

     

    【实现思路】
      <1> 定义一个普通的延时函数Delay()和一个计算时间的变量count。
      <2> 在按键扫描函数中,当SW1按下的时候,不断调用延时函数Delay()并对调用的次数进行累计保存在count中。
      <3> 当SW1松开的时候,停止调用延时函数Delay(),对count变量进行判断,大于某个阈值属于长按,否则是短按。

    【实现代码】

    #include "ioCC2530.h"
    
    #define D3 P1_0
    #define D4 P1_1
    #define K1 P1_2
    #define TT 20
    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)       //确认有按键按下
        {
          count = 0;      //延时技术变量清0
          while(K1 == 0)  //按键按下状态
          {
            Delay(10000); 
            count++;      //计算按键按下的时间
          }
          if(count < TT)  //短按
          {
            D3 = ~D3;
          }
          else            //长按
          {
            D4 = ~D4;
          }
        }
      }
    }
    
    void main()
    {
      Init_Port();      //初始化端口
      D3 = 1;
      D4 = 1;
      Delay(50000);
      D3 = 0;
      D4 = 0;
      while(1)
      {
        Scan_Keys();    //扫描按键
      }
    }

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

  • 相关阅读:
    _MSC_VER
    git之撤销修改
    vi/vim如何添加或删除多行注释
    C++ 读取文件数据和输出数据到文件
    git上传本地单独修改的文件
    Git学习笔记
    C++中类的声明
    linux中ldconfig的使用介绍
    #define 和 typedef 中的##
    find、xargs、grep基本用法
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/9620116.html
Copyright © 2020-2023  润新知