Touch LCD 绘图
来源:互联网 发布:女朋友下面的味道知乎 编辑:程序博客网 时间:2024/06/05 00:18
本文在此范例的基础上编写了触摸屏画图板程序——在显示屏上画出触摸笔的流走痕迹。
本文采用噪声滤波算法,编写了相应的噪声滤波程序,滤除干扰采样点,针对坐标点采样时产生的噪声。全部触摸屏画图板程序的处理流程如图3所示。
3.1 程序初始化
可运行本文供给的程序看画线的效果来选取具体的参数,初始化触摸屏把持器为主动转换模式。其中存放器 ADCDLY的值需要根据具体的实验选取。触摸屏中断处理程序Adc_or_TsAuto是判定触摸屏是否被按下了。触摸屏被按下,给全局变量 Flag_Touch赋值为Touch_Down,否则赋值为Touch_Up。
选择计时器4为时钟,定义10ms中断1次,供给触摸屏采样时间基准,即10ms触摸屏采样1次,初始化脉宽调制计时器(PWM TIMER)。计数器中断处理程序Timer4Intr 中判定Flag_Touch被赋值为Touch_Down,则给全局变量gTouchStartSample置位,以把持触摸屏采样。
吸收中断响应,同时计时器开端计时,之后扫除触摸屏中断和计时器中断屏蔽位。
3.2 触摸屏采样程序
触摸屏接口开端对坐标X和Y的模仿量进行采样,根据实验选取合适的的采集次数,假如gTouchStartSample为TRUE。本文中应用9次采集,分辨记进到ptx[TouchSample]和pty [TouchSample]数组中, TouchSample为采集次数。
将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>0?dlXDiff0:-dlXDiff0;
dlXDiff1=dlXDiff1>0?dlXDiff1:-dlXDiff1;
dlXDiff2=dlXDiff2>0?dlXDiff2:-dlXDiff2;
假如这3个尽对差值都超过门限值,判定这次采样点为野点,抛弃采样点,程序返回等候下次采样,判定上述盘算的色对差值是否都超过差值门限。其中的差值门限需要根据实验测试得到,本文取值为2。
找出其中尽对差值最小的2组数据,
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_Coordinate Conversion完成触摸屏采样值转换成显示坐标。本触摸屏采样坐标及显示坐标如图4、图5所示。其中 TOUCH_MAX_X和TOUCH_MIN_X是触摸屏X坐标采样值的最大和最小值;Y坐标同理。可以运行本文程序,同时应用触摸笔在触摸屏的4个角取得最大最小采样值。这里应用的是320×240的TFT屏,所以TOUCH_X值为320。下面是X坐标的转换程序:
Touch_CoordinateConversio(int*px){
TmpX=(tmx>=TOUCH_MAX_X)?(TOUCH_MAX_X):*px;
TmpX-=TOUCH_MIN_X;
TmpX=(TmpX)?TmpX:0;
*px=(TmpX*TOUCH_X)/(TOUCH_MAX_X-TOUCH_MIN_X);
}
3.3 坐标滤波程序
坐标滤波程序Touch_Pen_filtering,
*触摸笔在触摸屏上的地位不变;
*触摸笔在触摸屏上持续滑过;
*触摸笔在触摸屏上有大幅度的跳跃。
采样间隔为 10ms,假设三次持续采样时刻为T1、T2、T3(T3> T2>T1)。由于采样间隔远小于人的反响时间,所以在前两种把持模式下,假如采样点有效,将T1和T3时刻的采样值作均匀。其均匀值和T2时刻的采样值比较一般不会大于某个门限,否则判定此次采样点为野点。而对于第三种模式下,采样点数据会有很大的跳变。跳变过程中的数据是不稳固的,固然记进了数据,但被判定成无效的采样点,所以需要在程序中定义一个静态数组x[2]记载相邻的两次采样数据。只有当前后数据持续稳固一段时间,才认为这时的采样点有效。程序中应用的间隔门限FILTER_LIMIT是需要经过实验来选取的。这里只给出X坐标的滤波过程。
//*pxcount是记载持续有效采样点次数的静态变量,标记当前数据持续稳固时间,一旦创造大于//FILTER_LIMIT,count的值又要从0开端计数,为T3时刻的采样值。
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]>TmpX)?(x[1]-TmpX):(TmpX-x[1]);
点击查看大图
//假如差值大于门限值,阐明T3的采样值无效,判为野点返回值为FALSE。为了避免过大的跳跃,认为触摸笔坐标沿变,应用T2时刻采样值来代替本次采样点,同时静态变量x[]中的数据不变,count重新开端记载持续有效采样点次数
if((dx>FIL TER_LIMIT)){
*px=x[1];
retVal=FLASE;
count=0;
}
//否则采样点有效返回值为TRUE,
else{
x[0]=x[1];
x[1]=*px;
retVal=TRUE;
}
}
else{
//持续有效采样次数小于2,
x[0]=x[1];
x[1]=*px;
retVal=FLASE;
}
return retVal;
}
3.4 后续处理
假如被判定采样值有效,则将其滤波值送给把持系统进行后续处理,否则程序返回,等候下一次采样,经过上述的筛选和滤波。在2410 test程序中,可以联合LCD的画点函数,将有效的采样点在LCD上画出,以此检验参数设置是否公平。
结语
开发了触摸屏画图板程序,本文以三星公司ARM9内核芯片S3C2410和4线电阻式触摸屏为硬件基础。基于此硬件结构。通过软件滤波,进步了系统性能,得到了很好的处理效果,有很强的实用性。用此算法实现的 Windows CE触摸屏驱动,在汉王手写输进软件的测试下得到了很高的辨认率。软件应用C语言实现,可以方便地移植到任何把持系统上。
- Touch LCD 绘图
- 3.2inch 320x240 Touch LCD
- 通过framebuffer在LCD上绘图
- TFT-LCD with Touch Panel Data Sheet Note
- 4.3inch 480x272 Touch LCD (B) 模块
- LCD
- lcd
- lcd
- lcd
- LCD
- lcd
- LCD
- LCD
- LCD
- lcd
- LCD
- LCD
- LCD
- SQL Map XML 映射文件
- AfxGetReourceHandle错误
- 回调函数
- SQL Map XML 映射文件
- 嵌入式系统 Boot Loader 技术内幕
- Touch LCD 绘图
- 透过汇编另眼看世界之类成员函数指针
- "Dallas" CTP3 发布通告
- HDU 1254 推箱子
- jar
- Java开源 J2EE框架(二)
- Java开源 J2EE框架(一)
- 【USACO Contest】Holiday 2010 Bonus Competition, Problem 1: Cow Politics (cowpol)
- VC++ 错误及解决方案录