zoukankan      html  css  js  c++  java
  • 【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】

  • 相关阅读:
    running Android Studio on Windows 7 fails, no Android SDK found
    Dalvik虚拟机简要介绍和学习计划
    免费HTTP上传文件控件WebUploadFile.ocx发布,让实现Word在线编辑器变得容易
    ASP.NET生成缩略图的代码
    C++ MFC 关于SelectObject,请解释下,谢谢
    Visual C++中MFC消息的分类
    深入思考全局静态存储区、堆区和栈区
    coredump简介与coredump原因总结
    c++函数中的 指针参数跟地址参数区别
    解决SWFUpload在Chrome、Firefox等浏览器下的问题
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/9620116.html
Copyright © 2011-2022 走看看