📄 switch_wait_timeoutl.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 + -