📄 d_button.r
字号:
//
// Date init 14.12.2004
//
// Revision date $Date:: 16-05-06 9:58 $
//
// Filename $Workfile:: d_button.r $
//
// Version $Revision:: 14 $
//
// Archive $Archive:: /LMS2006/Sys01/Main/Firmware/Source/d_button.r $
//
// Platform C
//
#ifdef SAM7S256
static UBYTE PrellCnt[NOS_OF_AVR_BTNS];
static UWORD OldVal;
static UBYTE OldState;
static UBYTE RisingTime;
#define PRELL_TIME (60/TimeTick)
#define RISING_THRESHOLD (10/TimeTick)
#define BUTTONInit {\
UBYTE Tmp;\
for (Tmp = 0; Tmp < NOS_OF_AVR_BTNS; Tmp++)\
{\
PrellCnt[Tmp] = 0;\
}\
IoFromAvr.Buttons = 0;\
OldVal = 0;\
OldState = 0;\
RisingTime = 0;\
}
#if defined (PROTOTYPE_PCB_3) || (PROTOTYPE_PCB_4)
/* Buttons read here are free of prell or jitter */
/* And because it's an AD value returned from the AVR */
/* then a peak detector is needed */
#define BUTTONRead(pB) {\
UBYTE Tmp, BtnPtr;\
UWORD TmpBtn;\
*pB = OldState;\
BtnPtr = 0x01;\
if (OldVal < IoFromAvr.Buttons)\
{\
OldVal = IoFromAvr.Buttons;\
RisingTime = 0;\
}\
else\
{\
if (OldVal > (IoFromAvr.Buttons + 20))\
{\
OldVal = IoFromAvr.Buttons;\
RisingTime = 0;\
}\
else\
{\
if (RisingTime > RISING_THRESHOLD)\
{\
TmpBtn = IoFromAvr.Buttons;\
if (0x40 > TmpBtn)\
{\
TmpBtn = 0x00;\
}\
else if (0x100 > TmpBtn)\
{\
TmpBtn = 0x04;\
}\
else if (0x1FF > TmpBtn)\
{\
TmpBtn = 0x02;\
}\
else if (0x5FF > TmpBtn)\
{\
TmpBtn = 0x01;\
}\
else\
{\
TmpBtn = 0x08;\
}\
for (Tmp = 0; Tmp < NOS_OF_AVR_BTNS; Tmp++)\
{\
if ((TmpBtn) & BtnPtr)\
{\
*pB |= BtnPtr;\
PrellCnt[Tmp] = PRELL_TIME;\
}\
else\
{\
/* btn not pressed */\
if (0 != PrellCnt[Tmp])\
{\
PrellCnt[Tmp]--;\
}\
else\
{\
*pB &= ~BtnPtr;\
}\
}\
BtnPtr <<= 1;\
}\
OldState = *pB;\
}\
else\
{\
RisingTime++;\
}\
}\
}\
}
#else
// Buttons read here are free of prell or jitter
#define BUTTONRead(pB) {\
UBYTE Tmp, BtnPtr;\
UWORD TmpBtn;\
*pB = OldState;\
BtnPtr = 0x01;\
if ((OldVal) < IoFromAvr.Buttons)\
{\
OldVal = IoFromAvr.Buttons;\
}\
else\
{\
if ((OldVal) > IoFromAvr.Buttons)\
{\
OldVal = IoFromAvr.Buttons;\
}\
else\
{\
TmpBtn = IoFromAvr.Buttons;\
if (100 > TmpBtn)\
{\
TmpBtn = 0x00;\
}\
else if (170 > TmpBtn)\
{\
TmpBtn = 0x01;\
}\
else if (255 > TmpBtn)\
{\
TmpBtn = 0x02;\
}\
else if (1000 > TmpBtn)\
{\
TmpBtn = 0x04;\
}\
else if (1024 > TmpBtn)\
{\
TmpBtn = 0x08;\
}\
for (Tmp = 0; Tmp < NOS_OF_AVR_BTNS; Tmp++)\
{\
if ((TmpBtn) & BtnPtr)\
{\
*pB |= BtnPtr;\
PrellCnt[Tmp] = PRELL_TIME;\
}\
else\
{\
/* btn not pressed */\
if (0 != PrellCnt[Tmp])\
{\
PrellCnt[Tmp]--;\
}\
else\
{\
*pB &= ~BtnPtr;\
}\
}\
BtnPtr <<= 1;\
}\
OldState = *pB;\
}\
}\
}
#endif
#define BUTTONExit
#endif
#ifdef PCWIN
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -