⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switch_wait_timeoutl.c

📁 keil C51 Safter-Switch事例
💻 C
字号:
/*------------------------------------------------------------------*-

   Switch_Wait_TimeoutL.C (v1.00)

  ------------------------------------------------------------------

   Simple library for processing a switch input.

   (Made more reliable by means of a ~10-second timeout.)


   COPYRIGHT
   ---------

   This code is associated with the book:

   EMBEDDED C by Michael J. Pont 
   [Pearson Education, 2002: ISBN: 0-201-79523-X].

   This code is copyright (c) 2001 by Michael J. Pont.
 
   See book for copyright details and other information.

-*------------------------------------------------------------------*/

#include "Main.H"
#include "Port.H"

#include "Switch_wait_TimeoutL.H"
#include "Delay_T0.h"
#include "TimeoutL.H"

/*------------------------------------------------------------------*-

  SWITCH_Init()

  Initialization function for the switch library.

-*------------------------------------------------------------------*/
void SWITCH_Init(void)
   {
   Switch_pin = 1; // Use this pin for input
   }

/*------------------------------------------------------------------*-
  
  SWITCH_Get_Input()

  Reads and debounces a mechanical switch as follows:

  1. If switch is not pressed, return SWITCH_NOT_PRESSED.

  2. If switch is pressed, wait for DEBOUNCE_PERIOD (in ms).
     a. If switch is not pressed, return SWITCH_NOT_PRESSED. 
     b. If switch is pressed, wait (with timeout) for
        switch to be released.  If it times out,
        then return SWITCH_NOT_PRESSED: otherwise, return
        SWITCH_PRESSED.

  See Switch_Wait.H for details of return values.
  
-*------------------------------------------------------------------*/
bit SWITCH_Get_Input(const tByte DEBOUNCE_PERIOD)
   {
   bit Return_value = SWITCH_NOT_PRESSED;
   tLong Timeout_loop = LOOP_TIMEOUT_INIT_10000ms;

   if (Switch_pin == 0)
      {
      // Switch is pressed
      
      // Debounce - just wait...
      DELAY_T0_Wait(DEBOUNCE_PERIOD);

      // Check switch again
      if (Switch_pin == 0)
         {
         // Wait until the switch is released.
         // (WITH TIMEOUT LOOP - 10 seconds)
         while ((Switch_pin == 0) && (++Timeout_loop != 0));

		 // Check for timeout
         if (Timeout_loop == 0)
            {
            Return_value = SWITCH_NOT_PRESSED;
            }
         if(Switch_pin == 1)
            {
            Return_value = SWITCH_PRESSED;
            }
         }
      }
   
   // Now (finally) return switch value
   return Return_value;
   }

/*------------------------------------------------------------------*-
  ---- END OF FILE -------------------------------------------------
-*------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -