检测屏幕是否校正,没有的话进行校正,将校正值放置到 FLASH 中
static void TOUCH_Adjust(void)
{
uint16_t px[2], py[2], xPot[4], yPot[4];
float xFactor, yFactor;
/* 读取第一个点 */
if(TOUCH_ReadAdjust(LCD_ADJX_MIN, LCD_ADJY_MIN, &xPot[0], &yPot[0]))
{
return;
}
TOUCH_AdjDelay500ms();
/* 读取第二个点 */
if(TOUCH_ReadAdjust(LCD_ADJX_MIN, LCD_ADJY_MAX, &xPot[1], &yPot[1]))
{
return;
}
TOUCH_AdjDelay500ms();
/* 读取第三个点 */
if(TOUCH_ReadAdjust(LCD_ADJX_MAX, LCD_ADJY_MIN, &xPot[2], &yPot[2]))
{
return;
}
TOUCH_AdjDelay500ms();
/* 读取第四个点 */
if(TOUCH_ReadAdjust(LCD_ADJX_MAX, LCD_ADJY_MAX, &xPot[3], &yPot[3]))
{
return;
}
TOUCH_AdjDelay500ms();
/* 处理读取到的四个点的数据,整合成对角的两个点 */
px[0] = (xPot[0] + xPot[1]) / 2;
py[0] = (yPot[0] + yPot[2]) / 2;
px[1] = (xPot[3] + xPot[2]) / 2;
py[1] = (yPot[3] + yPot[1]) / 2;
/* 求出比例因数 */
xFactor = (float)LCD_ADJ_X / (px[1] - px[0]);
yFactor = (float)LCD_ADJ_Y / (py[1] - py[0]);
/* 求出偏移量 */
TouchAdj.xOffset = (int16_t)LCD_ADJX_MAX - ((float)px[1] * xFactor);
TouchAdj.yOffset = (int16_t)LCD_ADJY_MAX - ((float)py[1] * yFactor);
/* 将比例因数进行数据处理,然后保存 */
TouchAdj.xFactor = xFactor ;
TouchAdj.yFactor = yFactor ;
TouchAdj.posState = TOUCH_ADJ_OK;
FLASH_WriteData(&TouchAdj.posState, TOUCH_ADJ_ADDR, sizeof(TouchAdj));
} |