便携式指纹考勤系统—触摸屏硬件开发与应用_第1页
便携式指纹考勤系统—触摸屏硬件开发与应用_第2页
便携式指纹考勤系统—触摸屏硬件开发与应用_第3页
便携式指纹考勤系统—触摸屏硬件开发与应用_第4页
便携式指纹考勤系统—触摸屏硬件开发与应用_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、石家庄邮电职业技术学院毕业设计便携式指纹考勤系统触摸屏硬件开发与应用 2014 届 电信工程 系专业 通信技术(光纤通信方向) 班级 电1103-5班 学号 31107004102 姓名 多宝军 指导教师 孙群中 张 灿 完成日期 2013年12月20日 石家庄邮电职业技术学院毕业设计任务书姓 名多宝军学 号31107004102专 业通信技术(光纤通信方向)班 级电1103-5班毕业设计题目便携式指纹考勤系统触摸屏硬件开发与应用指导教师姓名孙群中张 灿职 称讲 师工程师工作单位石家庄邮电职业技术学院石家庄惠远邮电设计咨询有限公司一、毕业设计内容利用触摸屏的设置进行触摸屏的显示和触摸应用。二、

2、基本要求(1)运用所学专业基础理论和知识,理论联系实际,分析和解决研究问题。(2)论证逻辑严密,概念准确,数据可靠,主题鲜明,文句通顺,结论正确,符合写作规范。(3)论文在规定时间内完成任务。三、重点研究问题触摸屏设置代码四、主要设计步骤(1)触摸屏的初始化(2)触摸屏驱动设置(3)触摸屏的图片读取主要参考文献、资料:1 任爱锋,基于FPGA的嵌入式系统设计,西安:西安电子工业大学出版社,20042 柴晓光,民用指纹识别技术,北京:人民邮电出版社,20043 隋宗强,EMS液晶显示触摸屏设计,青岛:山东省青岛大学出版社,20124 杨玉琴,触摸屏技术研究及市场进展,河北省全国磁性记录材料信息站

3、,2012(1)计划进度:2013年10月8日-2013年10月22日,确定毕业设计题目、下达毕业设计任务书2013年10月23日-2013年11月24日,完成毕业设计论文初稿2013年11月25日-2013年12月3日,进行毕业论文中期检查2013年12月4日-2013年12月20日,修改毕业论文初稿,提交最终稿2013年12月21日-2013年12月25日,准备毕业答辩指导教师签字: 年 月 日石家庄邮电职业技术学院毕业设计评定书姓 名多宝军学 号31107004102专 业通信技术(光纤通信方向)班 级电1103-5班毕业设计题目便携式指纹考勤系统 触摸屏硬件开发与应用指导教师评语:指导

4、教师建议成绩(60)指导教师签字: 年 月 日答辩小组建议成绩(40)组长签字: 年 月 日答辩委员会最后审定成绩主任签字: 年 月 日备注摘 要通过完成创新实践项目便携式指纹识别考勤仪,主要介绍了触摸屏的触摸屏硬件开发与应用。触摸屏作为一种新颖输入技术,具有人机交互性佳,操作方便,使用灵活,效率高及输入速度快等特点。本文以考勤仪触摸屏的设置流程为基本,介绍了触摸屏的基本原理和硬件初始化、程序驱动、显示功能驱动、触摸功能驱动、触摸屏坐标校正、图片与文字显示、图片转换、图片显示等。包含各个部分的介绍及原理、部分应用函数及图片格式软件Image2Lcdv 2.8的应用。目 录1 绪论12 触摸屏简

5、介12.1 触摸屏的主要类型12.2 电阻触摸屏原理23 触摸屏初始化33.1 GPIO33.1.1 GPIO简介33.1.2 GPIO设置的初始化43.2 FSMC53.2.1 FMSC简介53.2.2 FMSC初始化配置53.3 SPI63.3.1 SPI简介63.3.2 SPI初始化73.4 RCC时钟83.4.1 系统时钟简介83.4.2 RCC初始化94 程序驱动104.1 显示功能驱动104.2 触摸功能驱动105 触摸屏坐标校正126 图片与文字显示146.1 图片转换146.2 图片显示(利用驱动函数)167 总结16参考文献171 绪论随着社会信息化的快速发展,触摸屏(Tou

6、ch Screen)的应用日趋普及。到目前为止,在我国触摸屏产品已逐渐形成了产业。触摸屏输入是一种新颖输入技术,它靠触摸显示器的屏幕来输入数据的。操作方式简单,使用者无需再通过鼠标和键盘,仅用手指触摸屏幕上的图形、表格或提示标志,便可从屏幕上得到其所需的各种信息。因此,触摸屏的功能的强大与否将会直接影响使用者的操作意愿。触摸屏输入完全摒弃了键盘的繁琐输入,使得人机交互只需手指轻轻一触即可。我们可用触摸屏输入来代替诸如键盘、光笔、操纵杆、滚球、鼠标及数字转换器等数据输入设备,或取代分立开关与薄膜开关之类的面板操作装置。它的优点在于操作简更直观、图像清晰、坚固耐用及节省空间。并且,它适用范围广泛,

7、可配用于一切电子显示器,也可与显示器制成一体,具有人机交互性佳,操作方便,使用灵活,效率高及输入速度快等特点。因此,触摸屏输入装置将会成为未来各种电子信息产品的主流技术之一。触摸屏输入以其人机交互简便性,已广泛应用于工业过程控制、公共信息咨询(如银行、电信局、税务局、邮政、电力、公用电话机与公共问询系统)、金融证券交易市场、商业自动化、翻译机、办公室自动化(OA)、家用电器及军事指挥控制系统等众多领域。在消费领域内,触摸屏输入日趋增多地应用于家用电器、多媒体教学、销售终端机(POS)、房地产预售、餐馆预约、游戏机、飞机与车船预订和城市导游机等,可以说触摸屏的应用真是无处不在。它能有如此广泛应用

8、的最重要的因素就是使用方便和经久耐用。在商业应用中,金融业务部门已普遍使用此种触摸屏输入,如医疗器械、银行自动出纳机。高档的先进电子测量仪器仪表、医疗信息管理系统及办公室自动化系统亦使用触摸屏输入。2 触摸屏简介2.1 触摸屏的主要类型从技术原理来区别触摸屏,可分为五个基本种类:矢量压力传感技术触摸屏、电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏。其中矢量压力传感技术触摸屏已退出历史舞台;红外线技术触摸屏价格低廉,但其外框易碎,容易产生光干扰,曲面情况下失真;电容技术触摸屏设计构思合理,但其图像失真问题很难得到根本解决;电阻技术触摸屏的定位准确,但其价格颇高,且怕刮易损

9、;表面声波触摸屏解决了以往触摸屏的各种缺陷,清晰不容易被损坏,适于各种场合,缺点是屏幕表面如果有水滴和尘土会使触摸屏变的迟钝,甚至不工作。按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为四种,它们分别为电阻式、电容感应式、红外线式以及表面声波式。每一类触摸屏都有其各自的优缺点,要了解哪种触摸屏适用于哪种场合,关键就在于要懂得每一类触摸屏技术的工作原理和特点。因为本项目使用的是电阻屏,所以我们以下着重介绍电阻屏。2.2 电阻触摸屏原理为了操作上的方便,人们用触摸屏来代替鼠标或键盘。工作时,我们必须首先用手指或其它物体触摸安装在显示器前端的触摸屏,然后系统根据手指触摸的图标或菜单位置来定位选

10、择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行。电阻触摸屏利用压力感应进行控制。电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两

11、层导电层隔开绝缘。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在X和Y两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出(X,Y)的位置,再根据模拟鼠标的方式运作。其实简单的说,电阻屏分两层,中间以隔离物进行分离。当两层互相碰撞,电流便会产生影响,芯片因以计算力量与电流之间的数据,评定屏幕那一个位置受压,作出反应。由于电阻式屏幕需要上下两层碰撞后才能作出反应。因此,当两点同时受压,屏幕的压力变得不平衡,导致触控出现误差。所以这样的原理导致了电阻屏很难实现多点触控,即使是通过技术手段实现了多点触控灵敏度方面也不是很容易调整,经常会出现A点灵敏,B点迟钝的现

12、象常会发生。图2-1 电阻屏的工作原理图3 触摸屏初始化对触摸屏进行初始化,主要进行GPIO、FSMC、SPI与系统时钟RCC的初始化。在 main函数中调用的 LCD_Init()函数,它对液晶控制器ILI9341用到的GPIO、FSMC接口进行了初始化,并且向该控制器写入了命令参数,配置好了CD液晶屏的基本功能。其函数定义位于 lcd_botton.c文件,如图2-2所示。 图3-1 调用LCD_Init()函数3.1 GPIO3.1.1 GPIO简介GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部

13、设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。GPIO是STM32最常用

14、的设备之一。STM32可以提供最多达80个双向IO口(视型号而定),他们分别分布在A-E五个端口中。每个端口有16个IO,每个IO口都可以承受最大为5V压降。通过GPIO的配置寄存器,我们可以把GPIO口配置成我们想要的工作模式,一共有如下8种模式:(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mo

15、de_AF_PP 复用推挽输出3.1.2 GPIO设置的初始化在STM32F10X开发库V3.5.0版本中设置GPIO时,首先将stm32f10x_gpio.c加入到工程中,同时在stm32f10x_conf.h中删除相应的注释。使能时钟,GPIO在APB2桥段上,所以通过函数RCC_APB2PeriphClockCmd()进行使能。例如:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);使能GPIOA时钟对时钟未使能的GPIO进行配置是无效的。时钟使能后,通过函数GPIO_Init()进行初始化,首先函数需要设置参数缺省值,需要进行设置。

16、在stm32f10x_gpio.h中可以找到这样的结构体:Typedef structUint16_t GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;GPIO_IintTypeDef;函数GPIO_Init()再根据用户所设置的参数进行寄存器初始化。所以在调用GPIO_Init()之前,先定义一个GPIO_InitTypeDef结构的变量填写参数。将GPIO进行初始化:GPIO_InitTypeDef GPIO_InitStructure;定义一个GPIO_InitTypeDef结构体变量 GPIO_InitS

17、tructure.GPIO_Pin = GPIO_Pin_13; /背光控制 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /通用推挽输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /输出模式最大速度50MHzGPIO_Init(GPIOD, &GPIO_InitStructure); /最后调用GPIO_Init()进行初始化GPIO_SetBits(GPIOD, GPIO_Pin_13); /打开背光GPIO_InitStructure.GPIO_Pin = GPIO_P

18、in_1; /TFT 复位脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /通用推挽输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/输出模式最大速度50MHzGPIO_Init(GPIOE, &GPIO_InitStructure); 3.2 FSMC3.2.1 FMSC简介FSMC(flexible static memory controller),译为静态存储控制器。可用于STM32芯片控制 NOR FLASH、PSRAM、和NAND FLASH存储芯片。3.2.2 F

19、MSC初始化配置我们用 LCD_Init()函数调用 LCD_FSMC_Config()设置FSMC的模式,我们的目的是使用它的 NOR FLASH模式模拟出 8080接口,在 LCD接口中我们使用的是FSMC地址线 A16作为8080的D/CX命令选择信号的。LCD_FSMC_Config()具体代码如下: 图3-2 LCD_FSMC_Config()具体代码3.3 SPI3.3.1 SPI简介SPI(Serial Peripheral Interface-串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄

20、存器SPCR,状态寄存器SPSR,数据寄存器SPDR。3.3.2 SPI初始化 串行外设接口(SPI)。初始化步骤:(1)连接SPI外设时钟。/* SPI1 时钟使能 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); /* SPI1 SCK(PA5)、MISO(PA6)、MOSI(PA7) 设置 */(2)连接被复用的GPIO的外设时钟。GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GP

21、IO_Speed_50MHz;/口线速度50MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用模式GPIO_Init(GPIOA, &GPIO_InitStructure);/* SPI1 触摸芯片的片选控制设置 PB7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/口线速度50MHz (3)设置被复用的GPIO为推挽输出,并设置时钟。GPIO_InitStructure.GPIO_Mode

22、 = GPIO_Mode_Out_PP;/推挽输出模式GPIO_Init(GPIOB, &GPIO_InitStructure);(4)通过配置SPIx->CR1来设置SPI 的工作模式。最后使能SPI。/* SPI1总线 配置 */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /主模式SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /8位

23、SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /时钟极性/空闲状态时,SCK保持低电平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /时钟相位 /数据采样从第一个时钟边沿开始SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /软件产生NSSSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; /波特率控制 SYSCLK/64SPI_InitStructure.SPI_FirstBit = SPI_

24、FirstBit_MSB; /数据高位在前SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC多项式寄存器初始值为7 SPI_Init(SPI1, &SPI_InitStructure); /* SPI1 使能 */ SPI_Cmd(SPI1,ENABLE); (5)收发数据。收发数据可以使用同一个函数,因为SPI是同步输入输出的,在发送数据的时候已经在接受数据。unsigned char SPI_WriteByte(unsigned char data) unsigned char Data = 0; /等待发送缓冲区空while(SPI_I2S

25、_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)=RESET); / 发送一个字节 SPI_I2S_SendData(SPI1,data); /等待是否接收到一个字节 while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)=RESET); / 获得该字节Data = SPI_I2S_ReceiveData(SPI1); / 返回收到的字节 return Data; 3.4 RCC时钟3.4.1 系统时钟简介RCC系统时钟控制器在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。其中:HSI是高速内部时

26、钟,RC振荡器,频率为8MHz。HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz16MHz。LSI是低速内部时钟,RC振荡器,频率为40kHz。LSE是低速外部时钟,接频率为32.768kHz的石英晶体。PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为216倍,但是其输出频率最大不得超过72MHz。在这里,我们选择HSE(高速外部时钟)8MHz经过PLL 9倍倍频得到72MHz的SYSCLK系统时钟)。(SYSCLK = PLLCLK = HSE×9)3.4.2 RCC初始化程序开发使用的开发库为STM32F1

27、0X开发库v3.5.0,大大简化了时钟编程代码,在程序中设置时钟只需两步:(1)system_stm32f10x.c 中 #define SYSCLK_FREQ_72MHz 72000000 ,打开工程里的system_stm32f10x.c文件。图3-3 打开system_stm32f10x.c文件在文件开头找到宏定义,将#define SYSCLK_FREQ_72MHz 72000000前面的注释符删除。其代码为:Define SYSCLK_FREQ_72MHz 72000000(2)调用SystemInit()。ST 官方推荐的外接晶振是 8M,所以库函数的设置都是假

28、定硬件已经接了 8M 晶振来运算的。以上东西就是默认晶振 8M 的时候,推荐的 CPU 频率选择。在这里选择了:#define SYSCLK_FREQ_72MHz 72000000,也就是103系列能跑到的最大值72M。如图3-4。图3-4 选择最大晶振这就是定义 72M 的时候,设置时钟的函数。这个函数被 SetSysClock ()函数调用,而SetSysClock ()函数则是被 SystemInit()函数调用。4 程序驱动4.1 显示功能驱动触摸屏初始化:void LCD_test(void);清屏:void TFT_CLEAR(u8 x,u16 y,u8 len,u16 wid);

29、其中x,y为起始坐标,len为长度,wid为宽度。显示字符:void TFT_ShowChar(u8 x,u16 y,u8 num); 其中x,y为起始坐标,num为输出字符。显示字符串:void TFT_ShowString(u8 x,u16 y,const u8 *p); 其中x,y为起始坐标,p为字符串指针。显示图片:void LCD_DrawPicture(u16 StartX,u16 StartY,u8 Dir,u8 *pic);StartX,Y为起始坐标,Dir为图片横/纵标识,0为横向显示,1为纵向,pic为图片指针。4.2 触摸功能驱动void tp_Config(void)为

30、触摸驱动,其中包含GPIO、SPI和时钟的配置。void tp_Config(void) GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /* SPI1 时钟使能 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); /* SPI1 SCK(PA5)、MISO(PA6)、MOSI(PA7) 设置 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_In

31、itStructure.GPIO_Speed = GPIO_Speed_50MHz;/口线速度50MHZGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用模式GPIO_Init(GPIOA, &GPIO_InitStructure);/* SPI1 触摸芯片的片选控制设置 PB7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /口线速度50MHZ GPIO_InitStructure.GPIO_M

32、ode = GPIO_Mode_Out_PP;/推挽输出模式GPIO_Init(GPIOB, &GPIO_InitStructure); /* 由于SPI1总线上挂接了4个外设,所以在使用触摸屏时,需要禁止其余3个SPI1 外设, 才能正常工作 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; /SPI1 SST25VF016B片选 GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; /SPI1 VS1003片选 GPIO_Ini

33、t(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; /SPI1 网络模块片选GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOC, GPIO_Pin_4);/SPI CS1GPIO_SetBits(GPIOB, GPIO_Pin_12);/SPI CS4GPIO_SetBits(GPIOA, GPIO_Pin_4);/SPI NSS /* SPI1总线 配置 */ SPI_InitStructure.SPI_Direction

34、= SPI_Direction_2Lines_FullDuplex; /全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /主模式SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /8位SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; /时钟极性 空闲状态时,SCK保持低电平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;/时钟相位 数据采样从第一个时钟边沿开始SPI_InitStructure.SPI_NSS = SP

35、I_NSS_Soft;/软件产生NSSSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; /波特率控制 SYSCLK/64SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /数据高位在前SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC多项式寄存器初始值为7 SPI_Init(SPI1, &SPI_InitStructure);/* SPI1 使能 */ SPI_Cmd(SPI1,ENABLE); void Re

36、ad_XPT2046(void)为读XPT2046,产生触摸坐标。5 触摸屏坐标校正在 main函数初始化完成 LCD之后,调用了 Touchl_Calibrate()函数进行触摸屏校正。具体函数见附录A。本函数的主要作用是在指定的几个液晶屏坐标(逻辑坐标)显示”十”字交叉点,我们使用触笔点击触摸屏交叉点,读取由XPT2046测得的触点电压(物理坐标)。采集 4个不同位置的触点电压(物理坐标),然后根据触摸校准算法把逻辑坐标与物理坐标转换公式的系数 A、B、C、D、E、F计算出来。 若使用此函数校准成功后,我们再点击触摸屏时,可把测量出的触点电压(物理坐标)代入已知系数的转换公式,计算出对应的

37、液晶屏坐标(逻辑坐标)。 转换公式的系数为代码 6672行中的aa1、bb1、cc1、aa2、bb2、cc3这几个全局变量,如果把这几个数据保存在SD卡中,上电后向这几个变量赋值,就不需要每次上电都进行一次触屏校准了。 在代码中的 1830行,与触摸屏的触点电压获取有关,分析如下: (1)第 2025行,调用LCD_Rectangle()、LCD_Str6x12_O()、LCDNum_6x12_O()、DrawCross()由液晶屏显示背景、提示信息及校准用的“十”字。这些函数都与液晶的画点函数原理类似,关于字符显示的在下一个章节进行说明。 (2)第 28行,调用 Read_2046()函数获

38、取触点的电压,该函数通过向XPT2046控制器发送控制命令:若触笔点击触摸屏时采集触点的电压,采集 10个电压取平均值,结果返回给变量 Ptr;若没有触点,则Ptr的值为 0,由do-while循环等待至采集到数据为止。Ptr中保存的电压数据在后面被用于校准算法计算。Read_2046()函数定义如下: 1. /* 2. * 函数名:Read_2046 3. * 描述 :得到滤波之后的 X Y 4. * 输入 : 无 5. * 输出 :Coordinate 结构体地址 6. * 举例 :无 7. * 注意 :速度相对比较慢 8. */ 9. Coordinate *Read_2046(void

39、) 10. 11. static Coordinate screen; 12. int m0,m1,m2,TP_X1,TP_Y1,temp3; 13. uint8_t count=0; 14. 15. /* 坐标 X 和 Y 进行 9 次采样*/ 16. int buffer29=0,0; 17. do 18. 19. Touch_GetAdXY(TP_X,TP_Y); 20. buffer0count=TP_X0; 21. buffer1count=TP_Y0; 22. count+; 23. 24. /*用户点击触摸屏时即 TP_INT_IN 信号为低 并且 count<9*/ 25

40、. while(!INT_IN_2046&& count<9); 26. 在Read_2046()函数中,调用了Touch_GetAdXY(),它用于获取一次触点(x,y)电压。实际上,驱动XPT2046最底层的是命令 WR_CMD(CHX)和WR_CMD(CHY),发送了这两个命令后,XPT2046开始采集相应的触点电压,通过SPI传送触点电压数据到 STM32。命令语句中的 CHX宏展开为 0xd0,CHY为0x90,它们是根据 XPT2046的命令格式设定的。驱动 XPT2046的命令控制字格式。如表5-1所示。表5-1 驱动 XPT2046的命令控制字格式位7(M

41、SB)位6位5位4位3位2位1位0(LSB)SA2A1A0MODESER/DERPD1PD0其中S为数据传输起始标志位该位必为1,A2A0进行通道选择,MOD用于转换精度选择,1为8位精度,0为12位精度。所谓通道选择即为检测哪一个通道的坐标。如A2A0为 001时,即命令控制字为0x90,根据表格知,芯片会给触摸屏的Y阻性材料层的两端提供Y+、Y-的电压,若有触笔点击,则 Y触点电压可经过X+利用 ADC读取得。同理命令控制字为 0xd0时,A2A0为 101,即给 X阻性材料层提供电压,触点电压经过Y+由ADC读取得。这就是 XPT2046采集触点电压的原理。如表5-2。表5-2 通道坐标

42、选择A2A1A0+REF-REFY-X+Y+Y-位置X-位置Z1-位置Z2-位置驱动001Y+Y-+INMY+,Y-011Y+X-+INMY+,X-100Y+Y+INY+,X-101X+X-+INMMX+,X-6 图片与文字显示6.1 图片转换利用Image2Lcdv 2.8软件转换图片格式。步骤如下:打开软件。如图6-1所示。图6-1 打开软件点击“打开”选择需要转码的图片。如图6-2所示。图6-2 选择图片点击“设置”,如图6-3所示。图6-3 设置设置参数如图6-4所示。 图6-4 设置参数输出数据点击保存,以*.txt文件打开如图后,即可复制到程序中调试了。如图6-5。图6-5 输出数

43、据6.2 图片显示(利用驱动函数)显示图片void LCD_DrawPicture(u16 StartX,u16 StartY,u8 Dir,u8 *pic);StartX,Y为起始坐标,Dir为图片横/纵标识,0为横向显示,1为纵向,pic为图片指针。指针指向图片转换的第一个字符如图的0X00字符,依次类推,最终将图片显示在显示屏上。7 总结我的毕业设计是便携式指纹考勤系统的触摸屏硬件开发与应用。这次毕业设计是我对大学学习的扩展和提升,对我们在大学即将结束的时候的学习有很大的帮助,让我们提高了自己的自学能力和对word的应用能力,将自己的能力综合发展,为以后的工作学习提供了基础。经过对毕业设

44、计的制作和论文的编写。我体会到了触摸屏使用的优点,它操作简单,反应快,具有人机交互性佳,操作方便,使用灵活,效率高及输入速度快等特点。我对于触摸屏不再仅仅是能够使用它,而是在根本上了解它。参考文献1 任爱锋,基于FPGA的嵌入式系统设计,西安:西安电子工业大学出版社,20042 柴晓光,民用指纹识别技术,北京:人民邮电出版社,20043 隋宗强,EMS液晶显示触摸屏设计,青岛:山东省青岛大学出版社,20124 杨玉琴,触摸屏技术研究及市场进展,河北省全国磁性记录材料信息站,2012(1)附录:触摸屏校正函数触摸屏校正函数1. /* 2. * 函数名:Touchl_Calibrate 3. *

45、描述 :2.4寸触摸屏校正函数 4. * 输入 : 无 5. * 输出 :0 - 校正成功 6. 1 - 校正失败 7. * 举例 :无 8. * 注意 :无 9. */ 10. int Touchl_Calibrate(void) 11. 12. uint8_t i; 13. u16 test_x=0, test_y=0; 14. u16 gap_x=0, gap_y=0; 15. Coordinate * Ptr; 16. / delay_init(); 17. Set_direction(0); /设置为横屏 18. for(i=0;i<4;i+) 19. 20. LCD_Rectangle(0,0,320,240,CAL_BACKGROUND_COLOR); /使整个屏幕显示背景颜色 21. LCD_Str_6x12_O(10, 10,"Touch Calibrate", 0); /显示提示信息 22. LCD_Num_6x12_O(10,25, i+1, 0); /显示触点次数 23. 24. delay_ms(500); 25. DrawCross(DisplaySamplei.x,DisplaySamplei.y); /显示校正用的“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论