触摸屏实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机及嵌入式系统原理及应用实验

姓名:张银成、石天涯

班级:2011320105

学号:11、24

触摸屏实验

一、实验目的:

1. 掌握TFT屏的工作原理。

2. 学会使用STM32的FSMC接口驱动TFT屏。

3. 学会使用触摸屏控制器检测触点坐标。

4. 掌握触摸屏的触摸功能。

二、实验内容:

CHD1807-STM32开发板驱动配套的3.2寸液晶、触摸屏,使用FSMC接口控制该屏幕自带的液晶控制器ILI9341,使用SPI接口与触摸屏控制器TSC2046通讯。驱动成功后可在屏幕上使用基本的触摸绘图功能。

1. 验证触摸屏校正功能;

2. 验证触摸绘图功能;

三、实验原理:

1. TFT屏概述

LCD,即液晶显示器,因为其功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互,目前仍是各种电子显示设备的主流。TFT(ThinFilmTransistor)是指薄膜晶体管,每个液晶像素点都是由集成在像素点后面的薄膜晶体管来驱动,从而可以做到高速度、高亮度、高对比度显示屏幕信息,是目前最好的LCD彩色显示屏之一。

2. 数据点的像素格式

图像数据的像素点由红(R)、绿(G)、蓝(B)三原色组成,三原色根据其深浅程度被分为0~255个级别,它们按不同比例的混合可以得出各种色彩。如R:255,G255,B255混合后为白色。

根据描述像素点数据的长度,主要分为8、16、24及32位。根据描述像素点数据的长度,主要分为8、16、24及32位。16位描述的为216=65536色,称为真彩色,也称为64K色。16位的像素点格式见图1。D0-D4为蓝色,D5-D10为绿色,D11-D15为红色,使得刚好使用完整的16位。

图 1. 16位像素点格式

RGB比例为5:6:5是一个十分通用的颜色标准,在GRAM相应的地址中填入该颜色的编码,即可控制LCD输出该颜色的像素点。如黑色的编码为0x0000,白色的编码为0xffff,红色为0xf800。

3. STM32驱动TFT屏

因为STM32内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有这些驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32芯片通过驱动芯片来控制液晶屏和触摸屏。以实验中的3.2寸液晶屏(240*320)为例,它使用ILI9341芯片控制液晶屏,通过TSC2046芯片控制触摸屏。ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟,但这样效率较低,它提供了一种特别的控制方法——使用FSMC接口。

4. 触摸屏感应原理

TSC2046是专用在四线电阻屏的触摸屏控制器,电阻触摸屏的基本原理为分压,它由一层或两层阻性材料组成,在检测坐标时,在阻性材料的一端接参考电压Vref,另一端接地,形成一个沿坐标方向的均匀电场。当触摸屏受到挤压时,阻性材料与下层电极接触,阻性材料被分为两部分,因而在触摸点的电压,反映了触摸点与阻性材料的Vref端的距离,而且为线性关系,而该触点的电压可由ADC测得。更改电场方向,以同样的方法,可测得另一方向的坐标。

图2 触摸屏电阻计算方法

四、程序代码

1. 主程序

int main(void)

{

SysTick_Init(); /*systick 初始化*/

LCD_Init(); /*LCD初始化*/

Touch_init(); /*触摸初始化*/

while(Touchl_Calibrate() !=0); /*等待触摸屏校准完毕*/ Init_Palette(); /*画板初始化*/

while (1)

{

if(touch_flag == 1) /*如果触笔按下了*/ {

if(Get_touch_point(&display, Read_2046_2(), &touch_para ) !=DISABLE)

/*获取点的坐标*/

{

Palette_draw_point(display.x,display.y); /*画点*/

}

}

}

}

2. 画板初始化

void Init_Palette(void)

{

Set_direction(0); //设置为横屏

LCD_Rectangle(0,0,320,240,WHITE); /*清白屏*/

LCD_Line(39,0,39,29);

LCD_Line(0,29,39,29);

LCD_Str_6x12_O(7, 10,"CLR", 0);

LCD_Rectangle(0,30,40,30,GREEN);

LCD_Rectangle(0,60,40,30,BLUE);

LCD_Rectangle(0,90,40,30,BRED);

LCD_Rectangle(0,120,40,30,GRED);

LCD_Rectangle(0,150,40,30,GBLUE);

LCD_Rectangle(0,180,40,30,BLACK);

LCD_Rectangle(0,210,40,30,RED);

delay_ms(500);

}

3. 获取位置

char Get_touch_place(u16 *x, u16 *y)

{

if(touch_flag == 1) /*如果触笔有按下*/ {

if(Get_touch_point(&display, Read_2046(), &touch_para ) !=DISABLE)

{

*x = display.x ;

*y = display.y ;

return 0;

}

}

return 1;

}

五、实验结果:

1. 触摸屏校正:

图3.触摸屏校正

2. 画板界面:

图4.画板界面

相关文档
最新文档