|

楼主 |
发表于 2019-4-15 16:46:41
|
显示全部楼层
- /*
- *********************************************************************************************************
- * 函 数 名: CalTwoPoint
- * 功能说明: 根据2点直线方程,计算Y值
- * 形 参: 2个点的坐标和x输入量
- * 返 回 值: x对应的y值
- *********************************************************************************************************
- */
- static int32_t CalTwoPoint(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x)
- {
- return y1 + ((int32_t)(y2 - y1) * (x - x1)) / (x2 - x1);
- }
- /*
- *********************************************************************************************************
- * 函 数 名: TOUCH_TransX
- * 功能说明: 将触摸ADC值转换为像素坐标
- * 形 参: 无
- * 返 回 值: X 坐标值,允许负值
- *********************************************************************************************************
- */
- static int16_t TOUCH_TransX(uint16_t _usAdcX, uint16_t _usAdcY)
- {
- if (g_tTPParam.CalibPointCount == 2)
- {
- uint16_t x;
- int32_t y;
- if (g_tTPParam.XYChange == 0)
- {
- x = _usAdcX;
- if (x == 0)
- {
- y = 0;
- }
- else
- {
- //y = CalTwoPoint(g_tTPParam.usAdcX1, TP_X1, g_tTPParam.usAdcX2, TP_X2, x);
- y = CalTwoPoint(g_tTPParam.usAdcX1, g_tTPParam.usLcdX1, g_tTPParam.usAdcX2, g_tTPParam.usLcdX2, x);
- }
- }
- else
- {
- x = _usAdcY;
- if (x == 0)
- {
- y = 0;
- }
- else
- {
- //y = CalTwoPoint(g_tTPParam.usAdcY1, TP_X1, g_tTPParam.usAdcY2, TP_X2, x);
- y = CalTwoPoint(g_tTPParam.usAdcY1, g_tTPParam.usLcdX1, g_tTPParam.usAdcY2, g_tTPParam.usLcdX2, x);
- }
- }
- return y;
- }
- else /* 4点校准 */
- {
- uint16_t x, x1, x2;
- int32_t y;
- if (g_tTPParam.XYChange == 0) /* X Y 坐标不交换 */
- {
- x = _usAdcX;
- /* 根据 Y ADC 实时计算直线方程的参考点x1, x2
- if _usAdcY = usAdcY1 then 取点 = (AdcX1, TP_X1, AdcX4, TP_X4, _usAdcY)
- if _usAdcY = usAdcY2 then 取点 = (AdcX3, TP_X3, AdcX2, TP_X2, _usAdcY)
- 其中 TP_X1 = TP_X3; TP_X4 = TP_X1 , 这是程序设定的校准位置的像素坐标, 是固定的。
- 我们仅需要动态计算对第1个和第3个参数。同样采用2点直线方程计算。
- */
- x1 = CalTwoPoint(g_tTPParam.usAdcY1, g_tTPParam.usAdcX1, g_tTPParam.usAdcY2, g_tTPParam.usAdcX3, _usAdcY);
- x2 = CalTwoPoint(g_tTPParam.usAdcY1, g_tTPParam.usAdcX4, g_tTPParam.usAdcY2, g_tTPParam.usAdcX2, _usAdcY);
- }
- else /* X Y 坐标交换 */
- {
- x = _usAdcY;
- /* 根据 X ADC 实时计算直线方程的参考点x1, x2
- if _usAdcX = usAdcX1 then 取点 = (AdcY1, TP_X1, AdcY4, TP_X4, _usAdcX)
- if _usAdcX = usAdcX2 then 取点 = (AdcY3, TP_X3, AdcY2, TP_X2, _usAdcX)
- 其中 TP_X1 = TP_X3; TP_X4 = TP_X1 , 这是程序设定的校准位置的像素坐标, 是固定的。
- 我们仅需要动态计算对第1个和第3个参数。同样采用2点直线方程计算。
- */
- x1 = CalTwoPoint(g_tTPParam.usAdcX1, g_tTPParam.usAdcY1, g_tTPParam.usAdcX2, g_tTPParam.usAdcY3, _usAdcX);
- x2 = CalTwoPoint(g_tTPParam.usAdcX1, g_tTPParam.usAdcY4, g_tTPParam.usAdcX2, g_tTPParam.usAdcY2, _usAdcX);
- }
- if (x == 0)
- {
- y = 0;
- }
- else
- {
- /* 根据2点直线方程,计算坐标 */
- //y = CalTwoPoint(x1, TP_X1, x2, TP_X2, x);
- y = CalTwoPoint(x1, g_tTPParam.usLcdX1, x2, g_tTPParam.usLcdX2, x);
- }
- return y;
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: TOUCH_TransY
- * 功能说明: 将触摸ADC值转换为像素坐标
- * 形 参: 无
- * 返 回 值: Y 坐标值,允许负值
- *********************************************************************************************************
- */
- static int16_t TOUCH_TransY(uint16_t _usAdcX, uint16_t _usAdcY)
- {
- if (g_tTPParam.CalibPointCount == 2) /* 2点校准 */
- {
- int32_t x;
- int32_t y;
- if (g_tTPParam.XYChange == 0)
- {
- x = _usAdcY;
- if (x == 0)
- {
- y = 0;
- }
- else
- {
- //y = CalTwoPoint(g_tTPParam.usAdcY1, TP_Y1, g_tTPParam.usAdcY2, TP_Y2, x);
- y = CalTwoPoint(g_tTPParam.usAdcY1, g_tTPParam.usLcdY1, g_tTPParam.usAdcY2, g_tTPParam.usLcdY2, x);
- }
- }
- else
- {
- x = _usAdcX;
- if (x == 0)
- {
- y = 0;
- }
- else
- {
- //y = CalTwoPoint(g_tTPParam.usAdcX1, TP_Y1, g_tTPParam.usAdcX2, TP_Y2, x);
- y = CalTwoPoint(g_tTPParam.usAdcX1, g_tTPParam.usAdcY1, g_tTPParam.usAdcX2, g_tTPParam.usLcdY2, x);
- }
- }
- return y;
- }
- else /* 4点校准 */
- {
- int32_t x, x1, x2;
- int32_t y;
- if (g_tTPParam.XYChange == 0) /* X Y 坐标不交换 */
- {
- x = _usAdcY;
- /* 根据 X ADC 实时计算直线方程的参考点x1, x2
- if _usAdcX = usAdcX1 then 取点 = (AdcY1, TP_Y1, AdcY3, TP_Y3, _usAdcX)
- if _usAdcX = usAdcX2 then 取点 = (AdcY4, TP_Y4, AdcY2, TP_Y2, _usAdcX)
- 其中 TP_Y1 = TP_Y4; TP_Y3 = TP_Y2 , 这是程序设定的校准位置的像素坐标, 是固定的。
- 我们仅需要动态计算对第1个和第3个参数。同样采用2点直线方程计算。
- */
- x1 = CalTwoPoint(g_tTPParam.usAdcX1, g_tTPParam.usAdcY1, g_tTPParam.usAdcX2, g_tTPParam.usAdcY4, _usAdcX);
- x2 = CalTwoPoint(g_tTPParam.usAdcX1, g_tTPParam.usAdcY3, g_tTPParam.usAdcX2, g_tTPParam.usAdcY2, _usAdcX);
- }
- else /* X Y 坐标交换 */
- {
- x = _usAdcX;
- /* 根据 X ADC 实时计算直线方程的参考点x1, x2
- if _usAdcY = usAdcY1 then 取点 = (AdcX1, TP_Y1, AdcX3, TP_Y3, _usAdcY)
- if _usAdcY = usAdcY2 then 取点 = (AdcX4, TP_Y4, AdcX2, TP_Y2, _usAdcY)
- 其中 TP_Y1 = TP_Y3; TP_Y4 = TP_Y2 , 这是程序设定的校准位置的像素坐标, 是固定的。
- 我们仅需要动态计算对第1个和第3个参数。同样采用2点直线方程计算。
- */
- x1 = CalTwoPoint(g_tTPParam.usAdcY1, g_tTPParam.usAdcX1, g_tTPParam.usAdcY2, g_tTPParam.usAdcX4, _usAdcY);
- x2 = CalTwoPoint(g_tTPParam.usAdcY1, g_tTPParam.usAdcX3, g_tTPParam.usAdcY2, g_tTPParam.usAdcX2, _usAdcY);
- }
- if (x == 0)
- {
- y = 0;
- }
- else
- {
- /* 根据2点直线方程,计算坐标 */
- //y = CalTwoPoint(x1, TP_Y1, x2, TP_Y2, x);
- y = CalTwoPoint(x1, g_tTPParam.usLcdY1, x2, g_tTPParam.usLcdY2, x);
- }
- return y;
- }
- }
复制代码
|
|