基于ALIENTKE MiniSTM32开发板的触摸屏实验

2014-06-11 08:24王晓
电脑迷 2014年5期
关键词:开发板手写触摸屏

王晓

摘 要 ALIENTKE MiniSTM32开发板本身并没有触摸屏控制器,但是它支持触摸屏,可以通过外接带触摸屏的LCD模块(比如ALIENTEK TFTLCD模块),来实现触摸屏控制。利用软件模拟来实现对TFTLCD模块的触摸屏控制,最终实现手写功能。

关键词 ALIENTKE MiniSTM32开发板 TFTLCD模块 触摸屏控制 手写功能

中图分类号:TP33 文献标识码:A

1触摸屏TFTLCD简介

TFT-LCD即薄膜晶体管液晶显示器,其英文全称为Thin Film Transistor-Liquid Crystal Display。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。

1.1电阻式触摸屏显示原理

电阻式触摸屏是利用压力感应进行控制的,主要部分是一块与显示器表面非常配合的电阻薄膜屏,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层,它的内表面也涂有一层涂层、在他们之间有许多细小的透明隔离点把两层导电层隔开绝缘。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在X和Y两个方向上产生信号,然后送触摸屏控制器。当控制器侦测到这一接触并计算出(X,Y)的位置,再根据获得的位置模拟鼠标的方式运作,这就是电阻式触摸屏的最基本的原理。

1.2电阻式触摸屏控制器XPT2046简介

ALIENTEK TFTLCD模块自带的触摸屏控制芯片为XPT2046。XPT2046是一款4导线制触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带2.5V参考电压可以作为辅助输入、温度测量和电池监测模式之用,电池监测的电压范围可以从0V到6V。XPT2046片内集成有一个温度传感器。

2硬件设计

实验功能简介:开机的时候先通过24C02的数据判断触摸屏是否已经校准过,如果没有校准,则执行校准程序,校准过后再进入手写程序。如果已经校准了,就直接进入手写程序,此时可以通過按动屏幕来实现手写输入。屏幕上会有一个清空的操作区域(RST),点击这个地方就会将输入全部清除,恢复白板状态。程序会设置一个强制校准,就是通过按KEY0来实现,只要按下KEY0就会进入强制校准程序。

3软件设计

该实验最核心的程序模块应该属于触摸屏校准代码了。触摸屏的校准通过void Touch_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这四个参数。我们保存好这四个参数,在以后的使用中,我们把所有得到的物理坐标都按照这个关系式来计算,得到的就是准确的屏幕坐标,从而达到触摸屏校准的目的。

void Touch_Adjust(void)

{

u16 pos_temp[4][2];

u8 cnt=0;

u16 d1,d2;

u32 tem1,tem2;

float fac;

while(1)

{

if(Pen_Point.Key_Sta==Key_Down)

{

if(Read_TP_Once())

{

pos_temp[cnt][0]=Pen_Point.X;

pos_temp[cnt][1]=Pen_Point.Y;

cnt++;

}

switch(cnt)

{

case 1:

LCD_Clear(WHITE);

Drow_Touch_Point(220,20);

break;

case 2:

LCD_Clear(WHITE);

Drow_Touch_Point(20,300);

break;

case 3:

LCD_Clear(WHITE);

Drow_Touch_Point(220,300);

break;

case 4: tem1=abs(pos_temp[0][0]-pos_temp[1][0]);

tem2=abs(pos_temp[0][1]-pos_temp[1][1]);

tem1*=tem1;

tem2*=tem2;

d1=sqrt(tem1+tem2);

tem1=abs(pos_temp[2][0]-pos_temp[3][0]);

tem2=abs(pos_temp[2][1]-pos_temp[3][1]);

tem1*=tem1;

tem2*=tem2;

d2=sqrt(tem1+tem2);

fac=(float)d1/d2;

tem1=abs(pos_temp[0][0]-pos_temp[2][0]);

tem2=abs(pos_temp[0][1]-pos_temp[2][1]);

tem1*=tem1;

tem2*=tem2;

d1=sqrt(tem1+tem2);

tem1=abs(pos_temp[1][0]-pos_temp[3][0]);

tem2=abs(pos_temp[1][1]-pos_temp[3][1]);

tem1*=tem1;

tem2*=tem2;

d2=sqrt(tem1+tem2);

fac=(float)d1/d2;

if(fac<0.95||fac>1.05)

{

cnt=0;

LCD_Clear(WHITE);

Drow_Touch_Point(20,20);

continue; (下轉第31页)(上接第2页)

}

tem1=abs(pos_temp[1][0]-pos_temp[2][0]);

tem2=abs(pos_temp[1][1]-pos_temp[2][1]);

tem1*=tem1;

tem2*=tem2;

d1=sqrt(tem1+tem2);

tem1=abs(pos_temp[0][0]-pos_temp[3][0]);

tem2=abs(pos_temp[0][1]-pos_temp[3][1]);

tem1*=tem1;

tem2*=tem2;

d2=sqrt(tem1+tem2);

274

fac=(float)d1/d2;

Pen_Point.xfac=(float)200/(pos_temp[1][0]-pos_temp[0][0]);

Pen_Point.xoff=(240-Pen_Point.xfac*(pos_temp[1][0]+

pos_temp[0][0]))/2;

Pen_Point.yfac=(float)280/(pos_temp[2][1]-pos_temp[0][1]);

Pen_Point.yoff=(320-Pen_Point.yfac*(pos_temp[2][1]+

pos_temp[0][1]))/2;

POINT_COLOR=BLUE;

LCD_Clear(WHITE);

LCD_ShowString(35,110,"Touch Screen Adjust OK!");

delay_ms(1000);

LCD_Clear(WHITE);

return;

}

}

}

}

4下载与测试

在代码编译成功之后,我们通过下载代码到ALIENTEK MiniSTM32开发板上,可以看到LCD显示如图1所示。

如果已经校准过了,则在等待2秒之后进入手写界面,同时DS0开始闪烁,界面如图2所示。

5结论与展望

我们借助ALIENTKE MiniSTM32开发板,编写与设计程序,实现了TFTLCD触摸屏控制,可以在触摸屏上用笔或者手指输入信息,非常方便,而且界面友好。

参考文献

[1] 章毓晋.图象处理和分析.北京:清华大学出版社,1999.

[2] 郎锐.数字图像处理学.北京:希望电子出版社,2002.

[3] 杨淑莹.图像模式识别――VC++技术实现.北京:清华大学出版社,2005.

猜你喜欢
开发板手写触摸屏
我手写我心
抓住身边事吾手写吾心
PLC和触摸屏在卫生间控制系统的应用
基于集成学习的MINIST手写数字识别
皮肤“长”出触摸屏
Microchip最新推出两款PIC32 Curiosity开发板
浅析单片机开发板的设计与制作
深度学习在手写汉字识别中的应用综述
Mouser为您呈上开发关键之STMicroelectronics Nucleo开发板
Arduino和Atmel发布Arduino Zero开发板