- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
单片机及嵌入式系统原理及应用试验
姓名:张银成、石天涯
班级:35
学号: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.主程序
intmain(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.画板初始化
voidInit_Palette(void)
{
Set_direction(0); //设置為横屏
LCD_Rectangle(0,0,320,240,WHITE); /*清白屏*/
LCD_Line(39,0,39,29);
LCD_Line(0,29,3
文档评论(0)