|

楼主 |
发表于 2018-4-27 22:45:17
|
显示全部楼层
本帖最后由 caifaraday 于 2018-4-27 22:47 编辑
前辈,这是我的程序,我做了触笔释放,但还是不行,能帮我分析一下吗/* 触笔中断发生 */
if (XPT2046_PenInt())
{
/* 获得原始的ADC值,未滤波 */
usAdcX = XPT2046_ReadXY(CHX);
usAdcY = XPT2046_ReadXY(CHY);
if (TOUCH_PressValid(usAdcX, usAdcY))
{
/* 按压20ms之后才开始采集数据 */
if (s_count >= 20)
{
s_usXBuf[s_ucPos] = usAdcX;
s_usYBuf[s_ucPos] = usAdcY;
/* 采集20ms(20次)数据进行滤波 */
s_ucPos++;
if (s_ucPos >= 20)
{
s_ucPos = 0;
/* 对ADC采样的10个点进行软件滤波,得到一个准确触点位置 */
g_tTP.usAdcNowX = TOUCH_DataFilter(s_usXBuf, 20);
g_tTP.usAdcNowY = TOUCH_DataFilter(s_usYBuf, 20);
if (s_down == 0)
{
s_down = 1;
/* 触摸按下事件,将触点信息存入 GUI调取的触摸参数结构体中 */
State.x = ((usAdcX-XAdc_Min)*320)/(XAdc_Max-XAdc_Min);//TOUCH_TransX( g_tTP.usAdcNowX, g_tTP.usAdcNowY);
State.y = 240-((usAdcY-YAdc_Min)*240)/(YAdc_Max-YAdc_Min);//TOUCH_TransY( g_tTP.usAdcNowX, g_tTP.usAdcNowY);
State.Pressed = 1;
GUI_PID_StoreState(&State);
State.Pressed = 0;
GUI_PID_StoreState(&State);
/* 用于触笔抬起事件,保存按下和移动的最后采样值 */
s_usSaveAdcX = g_tTP.usAdcNowX;
s_usSaveAdcY = g_tTP.usAdcNowY;
}
else
{
if (TOUCH_MoveValid(s_usSaveAdcX, s_usSaveAdcY, g_tTP.usAdcNowX, g_tTP.usAdcNowY))//判断移动是否有效
{
/* 触摸移动事件 */
State.x = ((usAdcX-XAdc_Min)*320)/(XAdc_Max-XAdc_Min);
State.y = 240-((usAdcY-YAdc_Min)*240)/(YAdc_Max-YAdc_Min);
State.Pressed = 1;
GUI_PID_StoreState(&State);
/* 用于触笔抬起事件,保存按下和移动的最后采样值 */
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)
{
s_count--;
//s_down = 0;
if (s_count == 0)
{
/* 触摸释放事件 */
/* State.x和State.y的数值无需更新,State是全局变量,保存的就是最近一次的数值 */
State.Pressed = 0;
// State.Layer--;
GUI_PID_StoreState(&State);
//s_count = 0;
s_down = 0;
g_tTP.usAdcNowX = 0;
g_tTP.usAdcNowY = 0;
//STMPE811_ClearInt(); /* 清触笔中断标志 */
}
}
s_ucPos = 0;
}
}
|
|