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】

  • 相关阅读:
    Ural 2040 Palindromes and Super Abilities 2
    BZOJ3676: [Apio2014]回文串
    HDU3068 最长回文
    [USACO06DEC] Milk Patterns
    hdu 6200 mustedge mustedge mustedge(dfs序+树状数组+并查集)
    hdu 4511 小明系列故事——女友的考验(AC自动机+dp)
    hdu 5129 Yong Zheng's Death(AC自动机fail树的应用)
    poj 1991 Turning in Homework(贪心+区间dp)
    hdu 4776 Ants(trie+优先队列)
    hdu 4775 Infinite Go(并查集模拟)
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/9620116.html
Copyright © 2011-2022 走看看