触摸屏校准代码解析:关键部分与功能说明
触摸屏校准代码解析:关键部分与功能说明
以下代码片段实现了一种常见的触摸屏校准功能,通过用户点击四个点,计算触摸屏的校准参数,从而使触摸屏的坐标与实际屏幕坐标对应。
1. 校准点参数:
//校准点参数:(0,1)与(2,3),(0,2)与(1,3),(1,2)与(0,3),这三组点的距离
const u8 TP_ADJDIS_TBL[3][4]={{0,1,2,3},{0,2,1,3},{1,2,0,3}};//校准距离计算表
TP_ADJDIS_TBL 数组定义了三组校准点的索引,用于计算用户点击的四点之间的距离。这三组点分别为:(0,1)与(2,3),(0,2)与(1,3),(1,2)与(0,3)。
2. 触摸屏校准函数:
//触摸屏校准代码
//得到四个校准参数
void TP_Adjust(void)
{
// ... 代码部分 ...
}
TP_Adjust() 函数是整个校准过程的核心函数,它通过用户点击的四个点计算触摸屏的校准参数。
3. 坐标缓存值:
u16 pos_temp[4][2];//坐标缓存值
pos_temp 数组用于保存用户点击的四个点的坐标值,每个元素包含两个值,分别表示点的横坐标和纵坐标。
4. 计算距离:
// ... 代码部分 ...
tem1=abs(pos_temp[TP_ADJDIS_TBL[cnt][0]][0]-pos_temp[TP_ADJDIS_TBL[cnt][1]][0]);//x1-x2/x1-x3/x2-x3
tem2=abs(pos_temp[TP_ADJDIS_TBL[cnt][0]][1]-pos_temp[TP_ADJDIS_TBL[cnt][1]][1]);//y1-y2/y1-y3/y2-y3
tem1*=tem1; tem2*=tem2;
d1=sqrt(tem1+tem2);//得到两点之间的距离
// ... 代码部分 ...
代码片段展示了如何计算两点之间的距离。通过 TP_ADJDIS_TBL 数组获取对应点的索引,然后利用 abs() 函数计算横纵坐标差值,并使用 sqrt() 函数计算两点之间的距离。
5. 校准结果:
if(fac<0.95||fac>1.05||d1==0||d2==0)//不合格
{
// ... 代码部分 ...
goto READJ; //不合格,重新校准
}
// ... 代码部分 ...
//正确了
// ... 代码部分 ...
代码片段展示了如何判断校准结果是否合格。通过计算三组点的距离比值,如果比值不在 0.95 到 1.05 之间,或者距离为零,则认为校准不合格,需要重新校准。如果合格,则根据点击的四个点计算校准参数。
6. 校准参数保存:
TP_Save_Adjdata();
TP_Save_Adjdata() 函数用于保存计算得到的校准参数,以便下次使用时直接读取。
7. 校准参数读取:
TP_Get_Adjdata();
TP_Get_Adjdata() 函数用于读取保存的校准参数。
总结:
这段代码通过用户点击四个点,计算触摸屏的校准参数,并将校准参数保存,以便下次使用时直接读取,实现触摸屏的校准功能。代码中包含了重要的校准点参数、校准函数、坐标缓存值、距离计算、校准结果判断、校准参数保存和读取等关键部分,帮助您理解触摸屏校准的原理和实现方法。
注意:
代码中使用了 goto 语句,这种跳转语句在大型程序中使用会降低代码可读性,建议使用其他控制流语句进行替代。
建议:
为了提高代码的可读性,建议将代码进行结构化调整,例如将计算距离和判断校准结果的功能封装成独立的函数。
原文地址: https://www.cveoy.top/t/topic/ne6o 著作权归作者所有。请勿转载和采集!