便攜式指紋考勤系統(tǒng)—觸摸屏硬件開發(fā)與應用_第1頁
便攜式指紋考勤系統(tǒng)—觸摸屏硬件開發(fā)與應用_第2頁
便攜式指紋考勤系統(tǒng)—觸摸屏硬件開發(fā)與應用_第3頁
便攜式指紋考勤系統(tǒng)—觸摸屏硬件開發(fā)與應用_第4頁
便攜式指紋考勤系統(tǒng)—觸摸屏硬件開發(fā)與應用_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、石家莊郵電職業(yè)技術學院畢業(yè)設計便攜式指紋考勤系統(tǒng)觸摸屏硬件開發(fā)與應用 2014 屆 電信工程 系專業(yè) 通信技術(光纖通信方向) 班級 電1103-5班 學號 31107004102 姓名 多寶軍 指導教師 孫群中 張 燦 完成日期 2013年12月20日 石家莊郵電職業(yè)技術學院畢業(yè)設計任務書姓 名多寶軍學 號31107004102專 業(yè)通信技術(光纖通信方向)班 級電1103-5班畢業(yè)設計題目便攜式指紋考勤系統(tǒng)觸摸屏硬件開發(fā)與應用指導教師姓名孫群中張 燦職 稱講 師工程師工作單位石家莊郵電職業(yè)技術學院石家莊惠遠郵電設計咨詢有限公司一、畢業(yè)設計內(nèi)容利用觸摸屏的設置進行觸摸屏的顯示和觸摸應用。二、

2、基本要求(1)運用所學專業(yè)基礎理論和知識,理論聯(lián)系實際,分析和解決研究問題。(2)論證邏輯嚴密,概念準確,數(shù)據(jù)可靠,主題鮮明,文句通順,結論正確,符合寫作規(guī)范。(3)論文在規(guī)定時間內(nèi)完成任務。三、重點研究問題觸摸屏設置代碼四、主要設計步驟(1)觸摸屏的初始化(2)觸摸屏驅動設置(3)觸摸屏的圖片讀取主要參考文獻、資料:1 任愛鋒,基于FPGA的嵌入式系統(tǒng)設計,西安:西安電子工業(yè)大學出版社,20042 柴曉光,民用指紋識別技術,北京:人民郵電出版社,20043 隋宗強,EMS液晶顯示觸摸屏設計,青島:山東省青島大學出版社,20124 楊玉琴,觸摸屏技術研究及市場進展,河北省全國磁性記錄材料信息站

3、,2012(1)計劃進度:2013年10月8日-2013年10月22日,確定畢業(yè)設計題目、下達畢業(yè)設計任務書2013年10月23日-2013年11月24日,完成畢業(yè)設計論文初稿2013年11月25日-2013年12月3日,進行畢業(yè)論文中期檢查2013年12月4日-2013年12月20日,修改畢業(yè)論文初稿,提交最終稿2013年12月21日-2013年12月25日,準備畢業(yè)答辯指導教師簽字: 年 月 日石家莊郵電職業(yè)技術學院畢業(yè)設計評定書姓 名多寶軍學 號31107004102專 業(yè)通信技術(光纖通信方向)班 級電1103-5班畢業(yè)設計題目便攜式指紋考勤系統(tǒng) 觸摸屏硬件開發(fā)與應用指導教師評語:指導

4、教師建議成績(60)指導教師簽字: 年 月 日答辯小組建議成績(40)組長簽字: 年 月 日答辯委員會最后審定成績主任簽字: 年 月 日備注摘 要通過完成創(chuàng)新實踐項目便攜式指紋識別考勤儀,主要介紹了觸摸屏的觸摸屏硬件開發(fā)與應用。觸摸屏作為一種新穎輸入技術,具有人機交互性佳,操作方便,使用靈活,效率高及輸入速度快等特點。本文以考勤儀觸摸屏的設置流程為基本,介紹了觸摸屏的基本原理和硬件初始化、程序驅動、顯示功能驅動、觸摸功能驅動、觸摸屏坐標校正、圖片與文字顯示、圖片轉換、圖片顯示等。包含各個部分的介紹及原理、部分應用函數(shù)及圖片格式軟件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 系統(tǒng)時鐘簡介83.4.2 RCC初始化94 程序驅動104.1 顯示功能驅動104.2 觸摸功能驅動105 觸摸屏坐標校正126 圖片與文字顯示146.1 圖片轉換146.2 圖片顯示(利用驅動函數(shù))167 總結16參考文獻171 緒論隨著社會信息化的快速發(fā)展,觸摸屏(Tou

6、ch Screen)的應用日趨普及。到目前為止,在我國觸摸屏產(chǎn)品已逐漸形成了產(chǎn)業(yè)。觸摸屏輸入是一種新穎輸入技術,它靠觸摸顯示器的屏幕來輸入數(shù)據(jù)的。操作方式簡單,使用者無需再通過鼠標和鍵盤,僅用手指觸摸屏幕上的圖形、表格或提示標志,便可從屏幕上得到其所需的各種信息。因此,觸摸屏的功能的強大與否將會直接影響使用者的操作意愿。觸摸屏輸入完全摒棄了鍵盤的繁瑣輸入,使得人機交互只需手指輕輕一觸即可。我們可用觸摸屏輸入來代替諸如鍵盤、光筆、操縱桿、滾球、鼠標及數(shù)字轉換器等數(shù)據(jù)輸入設備,或取代分立開關與薄膜開關之類的面板操作裝置。它的優(yōu)點在于操作簡更直觀、圖像清晰、堅固耐用及節(jié)省空間。并且,它適用范圍廣泛,

7、可配用于一切電子顯示器,也可與顯示器制成一體,具有人機交互性佳,操作方便,使用靈活,效率高及輸入速度快等特點。因此,觸摸屏輸入裝置將會成為未來各種電子信息產(chǎn)品的主流技術之一。觸摸屏輸入以其人機交互簡便性,已廣泛應用于工業(yè)過程控制、公共信息咨詢(如銀行、電信局、稅務局、郵政、電力、公用電話機與公共問詢系統(tǒng))、金融證券交易市場、商業(yè)自動化、翻譯機、辦公室自動化(OA)、家用電器及軍事指揮控制系統(tǒng)等眾多領域。在消費領域內(nèi),觸摸屏輸入日趨增多地應用于家用電器、多媒體教學、銷售終端機(POS)、房地產(chǎn)預售、餐館預約、游戲機、飛機與車船預訂和城市導游機等,可以說觸摸屏的應用真是無處不在。它能有如此廣泛應用

8、的最重要的因素就是使用方便和經(jīng)久耐用。在商業(yè)應用中,金融業(yè)務部門已普遍使用此種觸摸屏輸入,如醫(yī)療器械、銀行自動出納機。高檔的先進電子測量儀器儀表、醫(yī)療信息管理系統(tǒng)及辦公室自動化系統(tǒng)亦使用觸摸屏輸入。2 觸摸屏簡介2.1 觸摸屏的主要類型從技術原理來區(qū)別觸摸屏,可分為五個基本種類:矢量壓力傳感技術觸摸屏、電阻技術觸摸屏、電容技術觸摸屏、紅外線技術觸摸屏、表面聲波技術觸摸屏。其中矢量壓力傳感技術觸摸屏已退出歷史舞臺;紅外線技術觸摸屏價格低廉,但其外框易碎,容易產(chǎn)生光干擾,曲面情況下失真;電容技術觸摸屏設計構思合理,但其圖像失真問題很難得到根本解決;電阻技術觸摸屏的定位準確,但其價格頗高,且怕刮易損

9、;表面聲波觸摸屏解決了以往觸摸屏的各種缺陷,清晰不容易被損壞,適于各種場合,缺點是屏幕表面如果有水滴和塵土會使觸摸屏變的遲鈍,甚至不工作。按照觸摸屏的工作原理和傳輸信息的介質,我們把觸摸屏分為四種,它們分別為電阻式、電容感應式、紅外線式以及表面聲波式。每一類觸摸屏都有其各自的優(yōu)缺點,要了解哪種觸摸屏適用于哪種場合,關鍵就在于要懂得每一類觸摸屏技術的工作原理和特點。因為本項目使用的是電阻屏,所以我們以下著重介紹電阻屏。2.2 電阻觸摸屏原理為了操作上的方便,人們用觸摸屏來代替鼠標或鍵盤。工作時,我們必須首先用手指或其它物體觸摸安裝在顯示器前端的觸摸屏,然后系統(tǒng)根據(jù)手指觸摸的圖標或菜單位置來定位選

10、擇信息輸入。觸摸屏由觸摸檢測部件和觸摸屏控制器組成;觸摸檢測部件安裝在顯示器屏幕前面,用于檢測用戶觸摸位置,接受后送觸摸屏控制器;而觸摸屏控制器的主要作用是從觸摸點檢測裝置上接收觸摸信息,并將它轉換成觸點坐標,再送給CPU,它同時能接收CPU發(fā)來的命令并加以執(zhí)行。電阻觸摸屏利用壓力感應進行控制。電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏,這是一種多層的復合薄膜,它以一層玻璃或硬塑料平板作為基層,表面涂有一層透明氧化金屬(透明的導電電阻)導電層,上面再蓋有一層外表面硬化處理、光滑防擦的塑料層、它的內(nèi)表面也涂有一層涂層、在他們之間有許多細小的(小于1/1000英寸)的透明隔離點把兩

11、層導電層隔開絕緣。當手指觸摸屏幕時,兩層導電層在觸摸點位置就有了接觸,電阻發(fā)生變化,在X和Y兩個方向上產(chǎn)生信號,然后送觸摸屏控制器??刂破鱾蓽y到這一接觸并計算出(X,Y)的位置,再根據(jù)模擬鼠標的方式運作。其實簡單的說,電阻屏分兩層,中間以隔離物進行分離。當兩層互相碰撞,電流便會產(chǎn)生影響,芯片因以計算力量與電流之間的數(shù)據(jù),評定屏幕那一個位置受壓,作出反應。由于電阻式屏幕需要上下兩層碰撞后才能作出反應。因此,當兩點同時受壓,屏幕的壓力變得不平衡,導致觸控出現(xiàn)誤差。所以這樣的原理導致了電阻屏很難實現(xiàn)多點觸控,即使是通過技術手段實現(xiàn)了多點觸控靈敏度方面也不是很容易調整,經(jīng)常會出現(xiàn)A點靈敏,B點遲鈍的現(xiàn)

12、象常會發(fā)生。圖2-1 電阻屏的工作原理圖3 觸摸屏初始化對觸摸屏進行初始化,主要進行GPIO、FSMC、SPI與系統(tǒng)時鐘RCC的初始化。在 main函數(shù)中調用的 LCD_Init()函數(shù),它對液晶控制器ILI9341用到的GPIO、FSMC接口進行了初始化,并且向該控制器寫入了命令參數(shù),配置好了CD液晶屏的基本功能。其函數(shù)定義位于 lcd_botton.c文件,如圖2-2所示。 圖3-1 調用LCD_Init()函數(shù)3.1 GPIO3.1.1 GPIO簡介GPIO,英文全稱為General-Purpose IO ports,也就是通用IO口。嵌入式系統(tǒng)中常常有數(shù)量眾多,但是結構卻比較簡單的外部

13、設備/電路,對這些設備/電路有的需要CPU為之提供控制手段,有的則需要被CPU用作輸入信號。而且,許多這樣的設備/電路只要求一位,即只要有開/關兩種狀態(tài)就夠了,比如燈亮與滅。對這些設備/電路的控制,使用傳統(tǒng)的串行口或并行口都不合適。所以在微控制器芯片上一般都會提供一個“通用可編程IO接口”,即GPIO。接口至少有兩個寄存器,即“通用IO控制寄存器”與“通用IO數(shù)據(jù)寄存器”。數(shù)據(jù)寄存器的各位都直接引到芯片外部,而對這種寄存器中每一位的作用,即每一位的信號流通方向,則可以通過控制寄存器中對應位獨立的加以設置。這樣,有無GPIO接口也就成為微控制器區(qū)別于微處理器的一個特征。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開發(fā)庫V3.5.0版本中設置GPIO時,首先將stm32f10x_gpio.c加入到工程中,同時在stm32f10x_conf.h中刪除相應的注釋。使能時鐘,GPIO在APB2橋段上,所以通過函數(shù)RCC_APB2PeriphClockCmd()進行使能。例如:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);使能GPIOA時鐘對時鐘未使能的GPIO進行配置是無效的。時鐘使能后,通過函數(shù)GPIO_Init()進行初始化,首先函數(shù)需要設置參數(shù)缺省值,需要進行設置。

16、在stm32f10x_gpio.h中可以找到這樣的結構體:Typedef structUint16_t GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;GPIO_IintTypeDef;函數(shù)GPIO_Init()再根據(jù)用戶所設置的參數(shù)進行寄存器初始化。所以在調用GPIO_Init()之前,先定義一個GPIO_InitTypeDef結構的變量填寫參數(shù)。將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),譯為靜態(tài)存儲控制器。可用于STM32芯片控制 NOR FLASH、PSRAM、和NAND FLASH存儲芯片。3.2.2 F

19、MSC初始化配置我們用 LCD_Init()函數(shù)調用 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-串行外設接口)總線系統(tǒng)是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息。SPI有三個寄存器分別為:控制寄

20、存器SPCR,狀態(tài)寄存器SPSR,數(shù)據(jù)寄存器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; /時鐘極性/空閑狀態(tài)時,SCK保持低電平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /時鐘相位 /數(shù)據(jù)采樣從第一個時鐘邊沿開始SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /軟件產(chǎn)生NSSSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; /波特率控制 SYSCLK/64SPI_InitStructure.SPI_FirstBit = SPI_

24、FirstBit_MSB; /數(shù)據(jù)高位在前SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC多項式寄存器初始值為7 SPI_Init(SPI1, &SPI_InitStructure); /* SPI1 使能 */ SPI_Cmd(SPI1,ENABLE); (5)收發(fā)數(shù)據(jù)。收發(fā)數(shù)據(jù)可以使用同一個函數(shù),因為SPI是同步輸入輸出的,在發(fā)送數(shù)據(jù)的時候已經(jīng)在接受數(shù)據(jù)。unsigned char SPI_WriteByte(unsigned char data) unsigned char Data = 0; /等待發(fā)送緩沖區(qū)空while(SPI_I2S

25、_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)=RESET); / 發(fā)送一個字節(jié) SPI_I2S_SendData(SPI1,data); /等待是否接收到一個字節(jié) while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)=RESET); / 獲得該字節(jié)Data = SPI_I2S_ReceiveData(SPI1); / 返回收到的字節(jié) return Data; 3.4 RCC時鐘3.4.1 系統(tǒng)時鐘簡介RCC系統(tǒng)時鐘控制器在STM32中,有五個時鐘源,為HSI、HSE、LSI、LSE、PLL。其中:HSI是高速內(nèi)部時

26、鐘,RC振蕩器,頻率為8MHz。HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz16MHz。LSI是低速內(nèi)部時鐘,RC振蕩器,頻率為40kHz。LSE是低速外部時鐘,接頻率為32.768kHz的石英晶體。PLL為鎖相環(huán)倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為216倍,但是其輸出頻率最大不得超過72MHz。在這里,我們選擇HSE(高速外部時鐘)8MHz經(jīng)過PLL 9倍倍頻得到72MHz的SYSCLK系統(tǒng)時鐘)。(SYSCLK = PLLCLK = HSE×9)3.4.2 RCC初始化程序開發(fā)使用的開發(fā)庫為STM32F1

27、0X開發(fā)庫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,所以庫函數(shù)的設置都是假

28、定硬件已經(jīng)接了 8M 晶振來運算的。以上東西就是默認晶振 8M 的時候,推薦的 CPU 頻率選擇。在這里選擇了:#define SYSCLK_FREQ_72MHz 72000000,也就是103系列能跑到的最大值72M。如圖3-4。圖3-4 選擇最大晶振這就是定義 72M 的時候,設置時鐘的函數(shù)。這個函數(shù)被 SetSysClock ()函數(shù)調用,而SetSysClock ()函數(shù)則是被 SystemInit()函數(shù)調用。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 網(wǎng)絡模塊片選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; /時鐘極性 空閑狀態(tài)時,SCK保持低電平SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;/時鐘相位 數(shù)據(jù)采樣從第一個時鐘邊沿開始SPI_InitStructure.SPI_NSS = SP

35、I_NSS_Soft;/軟件產(chǎn)生NSSSPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; /波特率控制 SYSCLK/64SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /數(shù)據(jù)高位在前SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC多項式寄存器初始值為7 SPI_Init(SPI1, &SPI_InitStructure);/* SPI1 使能 */ SPI_Cmd(SPI1,ENABLE); void Re

36、ad_XPT2046(void)為讀XPT2046,產(chǎn)生觸摸坐標。5 觸摸屏坐標校正在 main函數(shù)初始化完成 LCD之后,調用了 Touchl_Calibrate()函數(shù)進行觸摸屏校正。具體函數(shù)見附錄A。本函數(shù)的主要作用是在指定的幾個液晶屏坐標(邏輯坐標)顯示”十”字交叉點,我們使用觸筆點擊觸摸屏交叉點,讀取由XPT2046測得的觸點電壓(物理坐標)。采集 4個不同位置的觸點電壓(物理坐標),然后根據(jù)觸摸校準算法把邏輯坐標與物理坐標轉換公式的系數(shù) A、B、C、D、E、F計算出來。 若使用此函數(shù)校準成功后,我們再點擊觸摸屏時,可把測量出的觸點電壓(物理坐標)代入已知系數(shù)的轉換公式,計算出對應的

37、液晶屏坐標(邏輯坐標)。 轉換公式的系數(shù)為代碼 6672行中的aa1、bb1、cc1、aa2、bb2、cc3這幾個全局變量,如果把這幾個數(shù)據(jù)保存在SD卡中,上電后向這幾個變量賦值,就不需要每次上電都進行一次觸屏校準了。 在代碼中的 1830行,與觸摸屏的觸點電壓獲取有關,分析如下: (1)第 2025行,調用LCD_Rectangle()、LCD_Str6x12_O()、LCDNum_6x12_O()、DrawCross()由液晶屏顯示背景、提示信息及校準用的“十”字。這些函數(shù)都與液晶的畫點函數(shù)原理類似,關于字符顯示的在下一個章節(jié)進行說明。 (2)第 28行,調用 Read_2046()函數(shù)獲

38、取觸點的電壓,該函數(shù)通過向XPT2046控制器發(fā)送控制命令:若觸筆點擊觸摸屏時采集觸點的電壓,采集 10個電壓取平均值,結果返回給變量 Ptr;若沒有觸點,則Ptr的值為 0,由do-while循環(huán)等待至采集到數(shù)據(jù)為止。Ptr中保存的電壓數(shù)據(jù)在后面被用于校準算法計算。Read_2046()函數(shù)定義如下: 1. /* 2. * 函數(shù)名: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()函數(shù)中,調用了Touch_GetAdXY(),它用于獲取一次觸點(x,y)電壓。實際上,驅動XPT2046最底層的是命令 WR_CMD(CHX)和WR_CMD(CHY),發(fā)送了這兩個命令后,XPT2046開始采集相應的觸點電壓,通過SPI傳送觸點電壓數(shù)據(jù)到 STM32。命令語句中的 CHX宏展開為 0xd0,CHY為0x90,它們是根據(jù) XPT2046的命令格式設定的。驅動 XPT2046的命令控制字格式。如表5-1所示。表5-1 驅動 XPT2046的命令控制字格式位7(M

41、SB)位6位5位4位3位2位1位0(LSB)SA2A1A0MODESER/DERPD1PD0其中S為數(shù)據(jù)傳輸起始標志位該位必為1,A2A0進行通道選擇,MOD用于轉換精度選擇,1為8位精度,0為12位精度。所謂通道選擇即為檢測哪一個通道的坐標。如A2A0為 001時,即命令控制字為0x90,根據(jù)表格知,芯片會給觸摸屏的Y阻性材料層的兩端提供Y+、Y-的電壓,若有觸筆點擊,則 Y觸點電壓可經(jīng)過X+利用 ADC讀取得。同理命令控制字為 0xd0時,A2A0為 101,即給 X阻性材料層提供電壓,觸點電壓經(jīng)過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 設置設置參數(shù)如圖6-4所示。 圖6-4 設置參數(shù)輸出數(shù)據(jù)點擊保存,以*.txt文件打開如圖后,即可復制到程序中調試了。如圖6-5。圖6-5 輸出數(shù)

43、據(jù)6.2 圖片顯示(利用驅動函數(shù))顯示圖片void LCD_DrawPicture(u16 StartX,u16 StartY,u8 Dir,u8 *pic);StartX,Y為起始坐標,Dir為圖片橫/縱標識,0為橫向顯示,1為縱向,pic為圖片指針。指針指向圖片轉換的第一個字符如圖的0X00字符,依次類推,最終將圖片顯示在顯示屏上。7 總結我的畢業(yè)設計是便攜式指紋考勤系統(tǒng)的觸摸屏硬件開發(fā)與應用。這次畢業(yè)設計是我對大學學習的擴展和提升,對我們在大學即將結束的時候的學習有很大的幫助,讓我們提高了自己的自學能力和對word的應用能力,將自己的能力綜合發(fā)展,為以后的工作學習提供了基礎。經(jīng)過對畢業(yè)設

44、計的制作和論文的編寫。我體會到了觸摸屏使用的優(yōu)點,它操作簡單,反應快,具有人機交互性佳,操作方便,使用靈活,效率高及輸入速度快等特點。我對于觸摸屏不再僅僅是能夠使用它,而是在根本上了解它。參考文獻1 任愛鋒,基于FPGA的嵌入式系統(tǒng)設計,西安:西安電子工業(yè)大學出版社,20042 柴曉光,民用指紋識別技術,北京:人民郵電出版社,20043 隋宗強,EMS液晶顯示觸摸屏設計,青島:山東省青島大學出版社,20124 楊玉琴,觸摸屏技術研究及市場進展,河北省全國磁性記錄材料信息站,2012(1)附錄:觸摸屏校正函數(shù)觸摸屏校正函數(shù)1. /* 2. * 函數(shù)名:Touchl_Calibrate 3. *

45、描述 :2.4寸觸摸屏校正函數(shù) 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); /顯示觸點次數(shù) 23. 24. delay_ms(500); 25. DrawCross(DisplaySamplei.x,DisplaySamplei.y); /顯示校正用的“

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論