触摸屏控制芯片ADS7843中文资料Word格式文档下载.docx
- 文档编号:15687353
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:11
- 大小:377.87KB
触摸屏控制芯片ADS7843中文资料Word格式文档下载.docx
《触摸屏控制芯片ADS7843中文资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《触摸屏控制芯片ADS7843中文资料Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
ADS7843的控制字如表4所列,其中S为数据传输起始标志位,该位必为"
1"
。
A2~A0进行通道选择(见表2和3)。
MODE用来选择A/D转换的精度,"
选择8位,"
0"
选择12位。
SER/选择参考电压的输入模式(见表2和3)。
PD1、PD0选择省电模式:
"
00"
省电模式允许,在两次A/D转换之间掉电,且中断允许;
01"
同"
,只是不允许中断;
10"
保留;
11"
禁止省电模式。
为了完成一次电极电压切换和A/D转换,需要先通过串口往ADS7843发送控制字,转换完成后再通过串口读出电压转换值。
标准的一次转换需要24个时钟周期,如图7所示。
由于串口支持双向同时进行传送,并且在一次读数与下一次发控制字之间可以重叠,所以转换速率可以提高到每次16个时钟周期,如图8所示。
如果条件允许,CPU可以产生15个CLK的话(比如FPGAs和ASICs),转换速率还可以提高到每次15个时钟周期,如图9所示。
触摸屏的校准通过voidTouch_Adjust(void)函数实现。
在这里,给大家介绍一下我们这里所使用的触摸屏校正原理:
我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。
而触摸屏则是一种绝对坐标系统,要选哪就直接点哪,与相对定位系统有着本质的区别。
绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。
不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:
漂移。
对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。
所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。
通常应用程序中使用的LCD坐标是以像素为单位的。
比如说:
左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(220,300)。
这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、偏移量都与LCD坐标不同,所以,可以在程序中使用一个函数(我们采用Convert_Pos函数)中把物理坐标首先转换为像素坐标,然后再赋给POS结构,达到坐标转换的目的。
校正思路:
在了解了校正原理之后,我们可以得出下面的一个从物理坐标到像素坐标的转换关系式:
LCDx=xfac*Px+xoff;
LCDy=yfac*Py+yoff;
其中(LCDx,LCDy)是在LCD上的像素坐标,(Px,Py)是从触摸屏读到的物理坐标。
xfac,yfac分别是X轴方向和Y轴方向的比例因子,而xoff和yoff则是这两个方向的偏移量。
这样我们只要事先在屏幕上面显示4个点(这四个点的坐标是已知的),分别按这四个点就可以从触摸屏读到4个物理坐标,这样就可以通过待定系数法求出xfac、yfac、xoff、yoff这四个参数。
我们保存好这四个参数,在以后的使用中,我们把所有得到的物理坐标都按照这个关系式来计算,得到的就是准确的屏幕坐标。
达到了触摸屏校准的目的。
以下是自己的校准程序(在正点原子上做了一些改变,没有用到中断):
//触摸屏校准代码
//得到四个校准参数
voidTouch_Adjust(void)
{
u16pos_temp[4][2];
//坐标缓存值
u8
cnt=0;
u16d1,d2;
u32tem1,tem2;
floatfac;
cnt=0;
TextColor=Blue;
BackColor=White;
//TextColor=0x0000,BackColor=0xFFFF;
LCD_Clear(White);
//清屏
//
POINT_COLOR=RED;
//红色
LCD_Clear(WHITE);
//清屏
Drow_Touch_Point(20,20);
//画点1
delay_ms(1000);
Pen_Point.Key_Sta=Key_Up;
//消除触发信号
Pen_Point.xfac=0;
//xfac用来标记是否校准过,所以校准之前必须清掉!
以免错误
while
(1)
{
if(Read_ADS2(&
x,&
y))//按键按下了
//if(Read_TP_Once())//得到单次按键值
pos_temp[cnt][0]=x;
pos_temp[cnt][1]=y;
cnt++;
delay_ms(100);
}
switch(cnt)
case1:
Drow_Touch_Point(20,300);
//画点2
break;
case2:
Drow_Touch_Point(220,20);
//画点3
case3:
Drow_Touch_Point(220,300);
//画点4
case4:
//全部四个点已经得到
//对边相等
tem1=abs(pos_temp[0][0]-pos_temp[1][0]);
//x1-x2
tem2=abs(pos_temp[0][1]-pos_temp[1][1]);
//y1-y2
tem1*=tem1;
tem2*=tem2;
d1=sqrt(tem1+tem2);
//得到1,2的距离
tem1=abs(pos_temp[2][0]-pos_temp[3][0]);
//x3-x4
tem2=abs(pos_temp[2][1]-pos_temp[3][1]);
//y3-y4
d2=sqrt(tem1+tem2);
//得到3,4的距离
fac=(float)d1/d2;
if(fac<
0.95||fac>
1.05||d1==0||d2==0)//不合格
continue;
}
tem1=abs(pos_temp[0][0]-pos_temp[2][0]);
//x1-x3
tem2=abs(pos_temp[0][1]-pos_temp[2][1]);
//y1-y3
//得到1,3的距离
tem1=abs(pos_temp[1][0]-pos_temp[3][0]);
//x2-x4
tem2=abs(pos_temp[1][1]-pos_temp[3][1]);
//y2-y4
//得到2,4的距离
1.05)//不合格
}//正确了
//对角线相等
tem1=abs(pos_temp[1][0]-pos_temp[2][0]);
tem2=abs(pos_temp[1][1]-pos_temp[2][1]);
//得到1,4的距离
tem1=abs(pos_temp[0][0]-pos_temp[3][0]);
tem2=abs(pos_temp[0][1]-pos_temp[3][1]);
//得到2,3的距离
//计算结果
x1=pos_temp[0][0];
x2=pos_temp[1][0];
x3=pos_temp[2][0];
x4=pos_temp[3][0];
y1=pos_temp[0][1];
y2=pos_temp[1][1];
y3=pos_temp[2][1];
y4=pos_temp[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 触摸屏 控制 芯片 ADS7843 中文 资料