S3C2410上触摸屏的应用实例

2007-12-25 10:27:55

摘要:给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中。

关键词:触摸屏 S3C2410 滤波

引言

随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。

1 触摸屏原理
S3C2410 接4线电阻式触摸屏的电路原理如图1所示。整个触摸屏由模向电阻比和纵向电阻线组成,由nYPON、YMON、nXPON、XMON四个控制信 控制4个 MOS管(S1、S2、S3、S4)的通断。S3C2410有8个模拟输入通道。其中,通道7作为触摸屏接口的X坐标输入(图1的AIN[7]),通道5 作为触摸屏接口的Y坐标输入(图1的AIN[5])。电路如图2所示。在接入S3C2410触摸屏接口前,它们都通过一个阻容式低通滤器滤除坐标信 噪声。这里的滤波十分重要,如果传递给S3C2410模拟输入接口的信 中干扰过大,不利于后续的软件处理。在采样过程中,软件只用给特殊寄存器置位, S3C2410的触摸屏控制器就会自动控制触摸屏接口打开或关闭各MOS管,按顺序完成X坐标点采集和Y坐标点采集。

2 S3C2410触摸屏控制器

S3C2410触摸屏控制器有2种处理模式:

①X/Y位置分别转换模式。触摸屏控制器包括两个控制阶段,X坐标转换阶段和Y坐标转换阶段。

②X/Y位置自动转换模式。触摸屏控制器将自动转换X和Y坐标。

3 S3C2410触摸屏编程

3.1 程序初始化

初始化脉宽调制计时器(PWM TIMER),选择计时器4为时钟,定义10ms中断1次,提供触摸屏采样时间基准,即10ms触摸屏采样1次。计数器中断处理程序Timer4Intr 中判断Flag_Touch被赋值为Touch_Down,则给全局变量gTouchStartSample置位,以控制触摸屏采样。

之后清除触摸屏中断和计时器中断屏蔽位,接受中断响应,同时计时器开始计时。

3.2 触摸屏采样程序

为了减少运算量,将ptx[]和pty[]分别分三组取平均值,存储在px[3]和py[3]中。这里以处理X坐标为例:

px[0]=(ptx[0]+ptx[1]+ptx[2])/3;

px[1]=(ptx[3]+ptx[4]+ptx[5])/3;

px[2]=(ptx[6]+ptx[7]+ptx[8])/3;

计算以上三组数据的差值:

dlXDiff0=px[0]-px[1];

dlXDiff1=px[1]-px[2];

dlXDiff2=px[2]-px[0];

然后对上述差值取绝对值,所得结果简称绝对差值:

dlXDiff0=dlXDiff0<0lXDiff0:-dlXDiff0;

dlXDiff1=dlXDiff1<0lXDiff1:-dlXDiff1;

dlXDiff2=dlXDiff2<0lXDiff2:-dlXDiff2;

找出其中绝对差值最小的2组数据,再将它们作平均,同时赋值给tmx:

if(dlXDiff0>dlXDiff1){

if(dlXDiff2>dlXDiff0){

tmx=((px[0]+px[2]<<1);

}

else{

tmx=((px[0]+px[1])<<1);

}

}

else if(dlXDiff2>dlXDiff1){

tmx=((px[0]+px[2])<<1);

}

else{

tmx=((px[1]+px[2])<<1);

}

Touch_CoordinateConversio(int*px){

TmpX=(tmx<=TOUCH_MAX_X)TOUCH_MAX_X):*px;

TmpX-=TOUCH_MIN_X;

TmpX=(TmpX)mpX:0;

*px=(TmpX*TOUCH_X)/(TOUCH_MAX_X-TOUCH_MIN_X);

}

3.3 坐标滤波程序

坐标滤波程序Touch_Pen_filtering,考虑人机界面中对触摸屏的操作有3种:

*触摸笔在触摸屏上的位置不变;

*触摸笔在触摸屏上连续滑过;

*触摸笔在触摸屏上有大幅度的跳跃。

假设三次连续采样时刻为T1、T2、T3(T3< T2

//*px为T3时刻的采样值,count是记录连续有效采样点次数的静态变量,标志当前数据持续稳定时间,一旦发现大于//FILTER_LIMIT,count的值又要从0开始计数。

Int Touch_Pen_filtering(int *px){

BOOL retVal;

Static int count=0;

count++;

//如果连续有效采样点次数大于2次,开始进行滤波算法

if(count<2){

count=2;

//将T3时刻采样值和T1时刻采样值作平均

TmpX=(x[0]+*px)/2;

//计算平均值和T2时刻采样值的差值

dx=(x[1]

if((dx

*px=x[1];

retVal=FLASE;

count=0;

}

//否则采样点有效返回值为TRUE,将T3的采样点记入到x[1]中,T2的采样点移到x[0]中

else{

x[0]=x[1];

x[1]=*px;

retVal=TRUE;

}

}

else{

//连续有效采样次数小于2,将T3的采样值记入到x[1],T2的采样值移动到x[0],并不进行滤波处理

x[0]=x[1];

x[1]=*px;

retVal=FLASE;

}

return retVal;

}

3.4 后续处理

经过上述的筛选和滤波,如果被判定采样值有效,则将其滤波值送给操作系统进行后续处理,否则程序返回,等待下一次采样。在2410 test程序中,可以结合LCD的画点函数,将有效的采样点在LCD上画出,以此检验参数设置是否合理。

结语

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览33924 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2008年1月19日
下一篇 2008年1月19日

相关推荐