|
void TOUCH_Scan(void)
{
uint16_t usAdcX;
uint16_t usAdcY;
static uint16_t s_usXBuf[SAMPLE_COUNT];
static uint16_t s_usYBuf[SAMPLE_COUNT];
static uint8_t s_ucPos = 0;
static uint8_t s_count = 0;
static uint8_t s_down = 0;
static uint16_t s_usSaveAdcX, s_usSaveAdcY; /* 用于触笔抬起事件,保存按下和移动的最后采样值 */
if (g_tTP.Enable == 0)
{
return;
}
/* 获得原始的ADC值,未滤波 */
if (g_ChipID == IC_8875)
{
/* 如果主程序正在访问RA8875,则丢弃本次触摸采集,避免影响显示 */
if (RA8875_IsBusy())
{
return;
}
usAdcX = RA8875_TouchReadX();
usAdcY = RA8875_TouchReadY();
}
else
{
usAdcX = TSC2046_ReadAdc(ADC_CH_X);
usAdcY = TSC2046_ReadAdc(ADC_CH_Y);
}
if (TOUCH_PressValid(usAdcX, usAdcY))
{
/* 按压30ms之后才开始采集数据 */
if (s_count >= 30)
{
s_usXBuf[s_ucPos] = usAdcX;
s_usYBuf[s_ucPos] = usAdcY;
/* 采集10ms数据进行滤波 */
if (++s_ucPos >= SAMPLE_COUNT)
{
s_ucPos = 0;
/* 对ADC采样值进行软件滤波 */
g_tTP.usAdcNowX = TOUCH_DataFilter(s_usXBuf, SAMPLE_COUNT);
g_tTP.usAdcNowY = TOUCH_DataFilter(s_usYBuf, SAMPLE_COUNT);
if (s_down == 0)
{
s_down = 1;
/* 触摸按下事件 */
TOUCH_PutKey(TOUCH_DOWN, g_tTP.usAdcNowX, g_tTP.usAdcNowY);
s_usSaveAdcX = g_tTP.usAdcNowX;
s_usSaveAdcY = g_tTP.usAdcNowY;
}
else
{
if (TOUCH_MoveValid(s_usSaveAdcX, s_usSaveAdcY, g_tTP.usAdcNowX, g_tTP.usAdcNowY))
{
/* 触摸移动事件 */
TOUCH_PutKey(TOUCH_MOVE, g_tTP.usAdcNowX, g_tTP.usAdcNowY);
s_usSaveAdcX = g_tTP.usAdcNowX;
s_usSaveAdcY = g_tTP.usAdcNowY;
}
else
{
g_tTP.usAdcNowX = 0; /* for debug stop */
}
}
}
}
else
{
s_count++;
}
}
else
{
if (s_count > 0)
{
if (--s_count == 0)
{
/* 触摸释放事件 */
//TOUCH_PutKey(TOUCH_RELEASE, g_tTP.usAdcNowX, g_tTP.usAdcNowY);
TOUCH_PutKey(TOUCH_RELEASE, s_usSaveAdcX, s_usSaveAdcY);
g_tTP.usAdcNowX = 0;
g_tTP.usAdcNowY = 0;
s_count = 0;
s_down = 0;
}
}
s_ucPos = 0;
}
} |
|