?? buttons.c
字號:
/* ATmega103 buttons.c file
Author : Robert Stuart
Company : PDL Industries Ltd
Date of Creation : 22 July 1999
Tested : 12 August 1999
Function :
*/
/* include */
#include "button.h"
/* function is called from "runtime.c" every interrupt */
void ReadButtons( void )
{
BufferButton();
DetermineButtonState();
}
void BufferButton( void )
{
switch ( BUTTON ) /* determine which button has been hit */
{
case SET_BUTTON : PushedButton = SET_MAP; break;
case UP_BUTTON : PushedButton = UP_MAP; break;
case DOWN_BUTTON : PushedButton = DOWN_MAP; break;
default : PushedButton = NONE_MAP;
}
if ( PushedButton == NONE_MAP )
{
Buffer = 0; /* resets the delay counter and button in reset mode */
Button = BUTTON_NONE;
ButtonStatus = 0;
SETBIT( ButtonStatus, BUTTON_RESET );
}
else
DebounceButton(); /* check which button was hit */
}
void DebounceButton( void )
{
if ( LastButton == PushedButton ) /* same button hit as last interrupt */
Buffer++; /* increment delay counter */
else
Buffer = 0; /* different button has been hit */
LastButton = PushedButton; /* set "last_button" for next interrupt */
}
void DetermineButtonState( void )
{
if ( Buffer > _50MS ) /* button debouce timeout */
{
Button = LastButton; /* set button state to which button has been hit */
Buffer = MINIMUM( Buffer, UNSIGNED_INT_LIMIT );
/* prevent "button_buffer" from overflowing */
if ( CHECKBIT( ButtonStatus, BUTTON_RESET ) )
{ /* button has just been hit */
SETBIT( ButtonStatus, BUTTON_SINGLE );
CLEARBIT( ButtonStatus, BUTTON_RESET );
}
else
{
CLEARBIT( ButtonStatus, BUTTON_SINGLE );
if ( Buffer > _1SEC ) /* delay for 1s before hold is true */
SETBIT( ButtonStatus, BUTTON_HOLD );
}
}
else /* button is in debouce mode */
CLEARBIT( ButtonStatus, BUTTON_HOLD | BUTTON_SINGLE );
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -