- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间: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
文档评论(0)