




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于 STM32F103x的 LCD 触摸屏驱动的设计姓名: 徐进东 学号: 10030227班级: 10 计卓目录1 概述 32 LCD 液晶显示屏 32.1 LCD液晶显示屏原理 32.2 LCD液晶显示屏分类 33 触摸屏驱动原理概述 43.1 电阻触摸屏工作原理 43.2 触摸屏控制实现 44 设计目标 45 系统硬件设计 55.1 STM32 微处理器 FSMC接口 55.2 LCD液晶显示屏介绍 75.3 触摸屏控制板 86 系统软件设计 106.1 系统软件结构 106.2 头文件设计 116.2 硬件初始化程序 116.3 3 寸 LCD模块驱动程序 146.4 触摸坐标获取程
2、序 196.5 LCD控制器控制程序 227 总结 241 概述LCD液晶显示屏与触摸屏在嵌入式系统中的应用越来越普及。他们是非常简单、方便、 自然的人机交互方式,目前广泛应用于便携式仪器、智能家电、掌上设备等领域。 触摸屏与 LCD液晶显示技术的紧密结合,成了主流配置。LCD液晶显示屏 (LCD Module , LCM)是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源以及结构件装配在仪器的组件。触摸屏技术在我国的应用时间不是太长, 但它已经成长为人们最为接受的输入方式。 利 用这种技术人们只需触碰屏幕就可以对主机进行操作,是人机交互更为方便,直截了当。本文档是对 LCD液晶显示
3、屏和触摸屏驱动的设计做深入介绍。2 LCD液晶显示屏2.1 LCD 液晶显示屏原理液晶 ( Liquid Crystal):是一种介于固态和液态之间的具有规则性分子排列,及晶体的光学各向异性的有机化合物, 液晶在受热到一定温度的时候会呈现透明状的液体状态, 而冷却 则会出现结晶颗粒的混浊固体状态, 因为物理上具有液体与晶体的特性, 故称之为 “液晶”。液晶显示器 LCD( Liquid Crystal Display):是新型平板显示器件。显示器中的液晶体并不 发光, 而是控制外部光的通过量。 当外部光线通过液晶分子时, 液晶分子的排列扭曲状态不 同,使光线通过的多少就不同, 实现了亮暗变化,
4、 可重现图像。液晶分子扭曲的大小由加在 液晶分子两边的电压差的大小决定。 因而可以实现电到光的转换。 即用电压的高低控制光的 通过量,从而把电信号转换成光像。2.2 LCD 液晶显示屏分类1. 位段型液晶显示模块 位段型液晶显示模块是一种由位段型液晶显示器件与专用的集成电路组装成一体的功 能部件。2. 字符型液晶显示模块字符型液晶显示模块是由字符液晶显示器件与专用的行、 列驱动器、 控制器、 必要的连 接件以及结构件装配而成,可以显示数字和西文字符。3. 图形点阵型液晶显示模块图形点阵型显示模块就是可以动态地显示字符和图片的LCD。图形点阵液晶模块的点阵像素连续排列, 行和列在拍布中均没有空隔
5、, 不仅可以显示字符, 还可以显示连续完整的图 像。图形点阵型液晶显示模块有三种类型可供选择: 行列驱动型, 行列驱动控制型及行列控 制型。3 触摸屏驱动原理概述3.1 电阻触摸屏工作原理电阻触摸屏是采用电阻模拟量技术。 它是一层玻璃作为基层, 上面涂有一层透明氧化金 属( ITO氧化铟)导电层,再盖有一层玻璃或是外表面硬化处理的光滑的塑料层;内表面也 涂有一层 ITO导电层。 它们之间有许多细小的透明隔离点把两导电层隔开绝缘, 每当有笔或 是手指按下时, 两导电层就相互接触。而形成电路。导电层的两端都涂有一条银胶,称为该 工作面的一对电极。上下两个导电层一个是水平方向,一个是竖直方向,分别用
6、来测量 X和 Y 的坐标位置。在水平面上的电极称为X+电极和 X-电极,在竖直平面的电极称为 Y+电极和 Y-电极。工作时, 两个电极根据测量需要提供参考电压或是作为测量端对接触点的位置进 行测量。当测量接触点 X 坐标的时候,导电层上的 X+电极和 X-电极分别上参考电压和地; Y 电极不加电压,那么 X 电极间会形成均匀的电压分布,用Y+电极作为测量点,得到的电压值通过 A/D 转换,就可对应地判断出接触点的X坐标。 Y 坐标亦是类似,只需改成对 Y电极加电压而 X 电极不加电压即可。图 4-1 电阻屏原理图3.2 触摸屏控制实现对触摸屏的控制有专用的控制芯片。 触摸屏的控制芯片主要完成两
7、个任务: 一是完成电 极电压的切换,二是采集接触点处的电压值并实现 A/D 转换。触摸屏控制芯片主要由触摸检测部件和触摸屏控制器组成。 触摸检测部件安装在显示器 屏幕前面, 用于检测用户触摸位置, 接受位置信号后送至触摸屏控制器; 而触摸屏控制器的 主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给MPU,同时它能接收 MPU 发来的命令并加以执行。4 设计目标基于 STM32硬件开发平台与 3 寸液晶屏组成液晶显示与触摸屏人机交互系统。5 系统硬件设计本实验的主要硬件由 STM32微处理器的 FSMC接口,3 寸屏时序转换板以及触摸屏控制 板组成。STM32处理器图 5-
8、1 硬件系统结构图5.1 STM32 微处理器 FSMC 接口FSMC模块能够与同步或异步的存储器和16 位的 PC存储器卡接口,它的主要作用是:将 AHB 传输信号转换到适当的外部设备协议 满足访问外部设备的时序要求, 所有的外部存储器共享控制器输出的地址、 数据和 控制信号,每个外部设备可以通过一个唯一的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。FSMC具有下列主要功能: 具有静态存储器接口的器件包括: 静态随机存储器 (SRAM) 只读存储器 (ROM) NOR 闪存 PSRAM(4个存储器块 ) 两个 NAND 闪存块,支持硬件 ECC并可检测多达 8K 字节数据 16
9、位的 PC卡 支持对同步器件的成组 (Burst)访问模式,如 NOR 闪存和 PSRAM 8或16 位数据总线 每一个存储器块都有独立的片选控制 每一个存储器块都可以独立配置 时序可编程以支持各种不同的器件: 等待周期可编程 (多达 15 个周期 ) 总线恢复周期可编程 (多达 15 个周期 ) 输出使能和写使能延迟可编程(多达 15周期 )独立的读写时序和协议,可支持宽范围的存储器和时序PSRAM和 SRAM 器件使用的写使能和字节选择输出将 32 位的 AHB 访问请求, 转换到连续的 16 位或 8 位的, 对外部 16 位或 8 位器件 的访问具有 16 个字,每个字 32 位宽的写
10、入 FIFO,允许在写入较慢存储器时释放 AHB 进 行其它操作。在开始一次新的 FSMC操作前, FIFO 要先被清空。通常在系统复位或 上电时, 应该设置好所有定义外部存储器类型和特性的FSMC寄存器, 并保持它们的内容不变;当然,也可以在任何时候改变这些设置。FSMC包含四个主要模块:AHB 接口(包含 FSMC配置寄存器)NOR 闪存和 PSRAM控制器NAND 闪存和 PC卡控制器 外部设备接口FSMC框图如下:图 5-2 FSMC 接口结构框图当 STM32 微处理器使用 FSMC 接口模块来控制 LCD液晶显示模块时,其接口信号用于 驱动 LCD的对应关系:FSMC接口信号线LC
11、D接口信号功能NExCSX片选NWRWRX写使能NOERDX读使能D15:0D15:0数据信号A25:0RS地址信号STM32 微处理器使用 FSMC接口模块与 LCD英特尔 8080(类似)接口示意图:图 5-3 FSMC 接口模块与 LCD英特尔 8080 接口示意图5.2 LCD 液晶显示屏介绍本实验的 LCD液晶显示器采用宇顺公司的 3寸彩色液晶屏 S95361,分辨率为 240*400 。 3TFT显示屏焊接在奋斗显示转接板上,在屏上贴有触摸屏,通过40 芯的接口与 V5 连接。 40 芯接口定义如下:图 5-4 40 芯接口40芯里包含了 16 位数据线,读写线,命令 /数据控制线
12、,片选线, LCD硬件复位线,背 光控制线以及触摸控制线。 奋斗板 V3和MINI 就是通过这个接口来控制显示。奋斗板 MINI和 V3 都是选用了具有 16 位 FSMC接口 STM32F103VET6作为 MCU , FSMC接口也可以称为 16 位并行接口,时序同 I8080 接口。按照显示屏驱动电路 LGDP5420的手册,为了达到色彩 与显示效率的平衡,奋斗板采用了 16 位 64K 色接口模式。图 5-5 16 位 RGB 真彩图在这个模式每个像素用 5位红色 6位绿色 5位蓝色总共 16 位来表示, 根据分辨率, 帧图像占用 400*240*2=192000 字节。16 位 80
13、80 总线接口时序如下:图 5-6 总线读写时序图5.3 触摸屏控制板TSC2046是一款四线制触摸屏控制器,内涵 12 位分辨率 125kHz 转换速率逐步逼近型 A/D 转换器, 它支持 1.5V5.25V 范围的低电压 I/O 口。TSC2046还具有一个片上 2.5V 的参考 电压,可以用于辅助输入,电池监测,和温度测量模式。TSC2046芯片主要功能如下: 具有四线制触摸屏接口; 可单电源工作,工作电压范围 2.2V 至 5.25V; 支持 1.5V 至 5.25V 的数字 I / O 口; 内部自带 2.5V 参考电压源; 能直接测量电源电压( 0V 至 6V); 片上温度测量;触
14、摸压力测量; 具有 3 线制 SPI通信接口; 自动省电; 封装小, TSSOP-16,QFN-16 封装,可在 VFBGA-48封装; 其功能框图如下:图 5-7 TSC2046功能框图TSC2046最常用封装 TSSOP-16引脚排列如图 9 所示,对应的引脚功能定义如下表所示:图 5-8 TSC2046引脚排列图引脚号引脚名功能描述1VCC电源2,3X+,Y+触摸屏正电极4,5X-,Y-触摸屏负电极6GND电源地7VBAT电池监控输入端。8AUX辅助输入端。9VREFA/D 参考电压输入10IOVDD数字电源输入端。11PENIRQ笔中断引脚,当有触摸事件发生时,向微控制器申请中断服务。
15、12DOUT串行数据输出,用于输出转换后的触摸位置 数据, 12 位工作方式下,最大为 4095。13BUSY忙指示,低电平有效14DIN串行数据输入、其控制数据通过该引脚输入。15CS片选16DCLK外部时钟输入引脚。6 系统软件设计6.1 系统软件结构LCD上层应用程序系统软件图形用户接口 uc/GUI 任务管理C/OS-II 系统BSP硬件平台初始化硬件底层驱动程序STM32F103处理器 LCD底层驱动图 6-1 系统软件结构本实验的触摸模块主要的软件设计任务按功能和层次可分为如下几个部分:1、ucos 系统建立任务,包括主任务,用户界面任务,CAN 报文接收任务等。2、ucGUI 图
16、形用户界面程序,设计相关操作界面。3、中断服务程序,主要使用的中断处理函数为USB_HP_CAN_TX_IRQHandler(,) 执行CAN总线接收的中断处理。4、硬件平台初始化程序,包括时钟, CAN 模块,触摸屏等等的初始化。5、LCD的底层驱动函数。6.2 头文件设计本实验由于使用函数以及宏定义较多,自定义了头文件#ifdef GLOBALS#define EXT#else#define EXT extern#endif#define Led_ON() GPIO_SetBits(GPIOB, GPIO_Pin_5);#define Led_OFF() GPIO_ResetBits(GP
17、IOB, GPIO_Pin_5);demo.hh 。 demo.h 内容如下:/LED1 亮/LED1 灭#define TP_CS() GPIO_ResetBits(GPIOB,GPIO_Pin_7)#define TP_DCS() GPIO_SetBits(GPIOB,GPIO_Pin_7)#define PEN GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)/ 触摸 SPI片选允许/ 触摸 SPI片选允许/ 触摸检测#define RED 0XF800 #define GREEN 0X07E0 #define BLUE 0X001F #define BRE
18、D 0XF81F #define GRED 0XFFE0 #define GBLUE 0X07FF;#define BLACK 0;6.2 硬件初始化程序硬件平台初始化主要包括系统时钟配置,FSMC接口的 LCD初始化, SPI接口级触摸屏芯片初始化, GPIO 初始化等系统常用配置。触摸屏初始化配置通过调用 tp_Config() 函数实现,代码如下:void tp_Config(void)GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;/* SPI1 时钟使能 */ RCC_APB2PeriphCl
19、ockCmd(RCC_APB2Periph_SPI1,ENABLE);/* SPI1 SCK(PA5、) MISO(PA6)、MOSI(PA7) 设置 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;/ 口线速度 50MHZ/ 复用模式/ 口线速度 50MHZ/ 推挽输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &G
20、PIO_InitStructure);/* SPI1 触摸芯片的片选控制设置 PB7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);/SPI1 SST25VF016B片选/SPI1 VS1003 片选/SPI1 网络模块片选/SPI CS1/SPI CS4/SPI NSS/* 由于 SP
21、I1总线上挂接了 4 个外设,所以在使用触摸屏时,需要禁止其余 3 个 SPI1 外设, 才能正常工作 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_Set
22、Bits(GPIOC, GPIO_Pin_4);GPIO_SetBits(GPIOB, GPIO_Pin_12);GPIO_SetBits(GPIOA, GPIO_Pin_4);/* SPI1 总线 配置 */SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; / 全双工SPI_InitStructure.SPI_Mode = SPI_Mode_Master; / 主模式SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /8 位SPI_InitStructure.
23、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; / 波特率控制 SYSCLK6/4SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MS
24、B; / 数据高位在前SPI_InitStructure.SPI_CRCPolynomial = 7;/CRC 多项式寄存器初始值为 7SPI_Init(SPI1, &SPI_InitStructure);/* SPI1 使能 */SPI_Cmd(SPI1,ENABLE);FSMC接口的 LCD初始化通过调用 FSMC_LCD_Init()函数实现信号引脚配置等功能。函数 代码如下:/* 名 称: void FSMC_LCD_Init(void)* 功 能:基于 FSMC 接口的 16 位 TFT接口初始化* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无void FSMC_LCD_
25、Init(void)FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef p;GPIO_InitTypeDef GPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); / 使能 FSMC接口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;/ 背光控制GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/ 通用推挽输出模式G
26、PIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; / 输出模式最大速度 50MHz GPIO_Init(GPIOD, &GPIO_InitStructure);/ 打开背光/TFT 复位脚/ 通用推挽输出模式/ 输出模式最大速度GPIO_SetBits(GPIOD, GPIO_Pin_13); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_S
27、peed_50MHz;50MHzGPIO_Init(GPIOE, &GPIO_InitStructure);/* 启用 FSMC复用功能, 定义 FSMC D0-D15及 nWE, nOE对应的引脚 */* 设置 PD.00(D2), PD.01(D3), PD.04(nOE), PD.05(nWE), PD.08(D13), PD.09(D14), PD.10(D15),PD.14(D0), PD.15(D1) 为复用上拉 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | G
28、PIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/ 最大速度 50MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/ 复用模式GPIO_Init(GPIOD, &GPIO_InitStructure);/* 设置 PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
29、 PE.14(D11), PE.15(D12) 为复用上拉 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;GPIO_Init(GPIOE, &GPIO_InitStructure);/* FSMC NE1 配置 PD7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_Init(GPIOD, &
30、GPIO_InitStructure);/* FSMC RS配置 PD11-A16 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; GPIO_Init(GPIOD, &GPIO_InitStructure);p.FSMC_AddressSetupTime = 0x02;p.FSMC_AddressHoldTime = 0x00;p.FSMC_DataSetupTime = 0x05;p.FSMC_BusTurnAroundDuration = 0x00;p.FSMC_CLKDivision = 0x00;p.FSMC_DataLatency = 0x
31、00;p.FSMC_AccessMode = FSMC_AccessMode_B;FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryD
32、ataWidth_16b;FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive =FSMC_WaitSignal
33、Active_BeforeWaitState;FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Di
34、sable;FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);/* 使能 FSMC BANK1_SRAM 模式 */FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);6.3 3 寸 LCD 模块驱动程序本例程在 奋斗版 STM32 开发板 V5 上调试通过文件名 : Fun.c内容简述 :文件历
35、史 :版本号 日期作者 说明1.0 2013-10xjd#include fsmc_sram.h#include font.h#include demo.h#define Bank1_LCD_D (uint32_t)0x60020000) /disp Data ADDR#define Bank1_LCD_C (uint32_t)0x60000000)/disp Reg ADDRvoid LCD_Init(void);void LCD_WR_REG(unsigned int index);void LCD_WR_CMD(unsigned int index,unsigned int val);v
36、oid LCD_WR_Data(unsigned int val);void LCD_test(void);void LCD_clear(unsigned int p);void Delay(_IO uint32_t nCount);unsigned short LCD_RD_data(void);extern void lcd_rst(void);extern void Delay(_IO uint32_t nCount);void TFT_CLEAR(u8 x,u16 y,u8 len,u16 wid);void TFT_DrawPoint(u8 x,u16 y);void TFT_Sho
37、wChar(u8 x,u16 y,u8 num);void TFT_ShowNum(u8 x,u16 y,u32 num);void TFT_ShowString(u8 x,u16 y,const u8 *p);void TFT_ShowBmp(u8 x,u16 y,u8 lenth,u16 wide,const u8 *p);u16 POINT_COLOR=RED; / 默认红色 /* 名称: LCD_WR_REG(unsigned int index)* 功能: FSMC 写显示器寄存器地址函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无 */ void LCD_WR_RE
38、G(unsigned int index)*(_IO uint16_t *) (Bank1_LCD_C)= index;/* 名称: void LCD_WR_CMD(unsigned int index,unsigned int val)* 功能: FSMC 写显示器寄存器数据函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无void LCD_WR_CMD(unsigned int index,unsigned int val) *(_IO uint16_t *) (Bank1_LCD_C)= index;*(_IO uint16_t *) (Bank1_LCD_D)= val;
39、 /* 名称: unsigned short LCD_RD_data(void)* 功 能: FSMC 读显示区 16 位数据函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无 */ unsigned short LCD_RD_data(void)unsigned int a=0;a=*(_IO uint16_t *) (Bank1_LCD_D);/ 空操作a=*(_IO uint16_t *) (Bank1_LCD_D);/ 读出的实际 16 位像素数据return(a);/* 名称: LCD_WR_Data(unsigned int val)* 功 能: FSMC 写 16
40、位数据函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无*/void LCD_WR_Data(unsigned int val)*(_IO uint16_t *) (Bank1_LCD_D)= val;void LCD_WR_Data_8(unsigned int val)*(_IO uint16_t *) (Bank1_LCD_D)= val;/* 名称: void Delay(_IO uint32_t nCount)* 功能:延时函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无*/ void Delay(_IO uint32_t nCount)for(; nC
41、ount != 0; nCount-);/* 名称: void LCD_Init(void)* 功能: 2.4 寸 TFT 初始化函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无*/ void LCD_Init(void) unsigned int i;/lcd_rst();GPIO_ResetBits(GPIOE, GPIO_Pin_1); / 硬件复位 Delay(0x1AFFf);GPIO_SetBits(GPIOE, GPIO_Pin_1 ); Delay(0x1AFFf);LCD_WR_CMD(0x0000, 0x00000);LCD_WR_CMD(0x0000, 0
42、x00000);LCD_WR_CMD(0x0000, 0x00000);LCD_WR_CMD(0x0000, 0x00000);/time, 0010 ,msLCD_WR_CMD(0x0400, 0x06200);LCD_WR_CMD(0x0008, 0x00808);LCD_WR_CMD(0x0300, 0x00C00);/gamma LCD_WR_CMD(0x0301, 0x05A0B);LCD_WR_CMD(0x0302, 0x00906);LCD_WR_CMD(0x0303, 0x01017);LCD_WR_CMD(0x0304, 0x02300);LCD_WR_CMD(0x0305,
43、 0x01700);LCD_WR_CMD(0x0306, 0x06309);LCD_WR_CMD(0x0307, 0x00C09);LCD_WR_CMD(0x0308, 0x0100C);LCD_WR_CMD(0x0309, 0x02232); LCD_WR_CMD(0x0010, 0x00016);/69.5HzLCD_WR_CMD(0x0011, 0x00101);/LCD_WR_CMD(0x0012, 0x00000);/LCD_WR_CMD(0x0013, 0x00001);/LCD_WR_CMD(0x0100, 0x00330);/BT,APLCD_WR_CMD(0x0101, 0x
44、00237);/DC0,DC1,VCLCD_WR_CMD(0x0103, 0x00F00);/VDVLCD_WR_CMD(0x0280, 0x06100);/VCMLCD_WR_CMD(0x0102, 0x0C1B0);/VRH,VCMR,PSON,PON /time, 0100 ,msLCD_WR_CMD(0x0001, 0x00100);LCD_WR_CMD(0x0002, 0x00100);LCD_WR_CMD(0x0003, 0x01030);LCD_WR_CMD(0x0009, 0x00001);LCD_WR_CMD(0x000C, 0x00000);LCD_WR_CMD(0x009
45、0, 0x08000);LCD_WR_CMD(0x000F, 0x00000);LCD_WR_CMD(0x0210, 0x00000);LCD_WR_CMD(0x0211, 0x000EF);LCD_WR_CMD(0x0212, 0x00000);LCD_WR_CMD(0x0213, 0x0018F);/432=1AF, 400=18FLCD_WR_CMD(0x0500, 0x00000);LCD_WR_CMD(0x0501, 0x00000);LCD_WR_CMD(0x0502, 0x0005F);LCD_WR_CMD(0x0401, 0x00001);LCD_WR_CMD(0x0404,
46、0x00000); /time, 0100 ,msLCD_WR_CMD(0x0007, 0x00100);/BASEE/time, 0100 ,msLCD_WR_CMD(0x0200, 0x00000);LCD_WR_CMD(0x0201, 0x00000);LCD_WR_CMD(0x200, 0);LCD_WR_CMD(0x201, 0);*(_IO uint16_t *) (Bank1_LCD_C)= 0x202; / 准备写数据显示区 for(i=0;i96000;i+)LCD_WR_Data(0xffff); / 用黑色清屏/* 名称: u32 abs(s32 res)* 功能:取绝对
47、值函数* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无*/ u32 abs(s32 res)if(res0)return -res;else return res;/* 名称: u32 mn(u8 m,u8 n)* 功能:* 入口参数:无* 出口参数:无* 说 明:* 调用方法:无*/ u32 mn(u8 m,u8 n)u32 result=1;while(n-)result*=m; return result;6.4 触摸坐标获取程序TPReadX(和) TPReadY()函数用于读取触摸屏 X 轴数据和触摸屏 Y轴数据。/* 名称: u16 TPReadX(void)* 功能:
48、触摸屏 X 轴数据读出* 入口参数:无* 出口参数:无* 说 明:* 调用方法:u16 TPReadX(void) u16 x=0;TP_CS();Delay(20);SPI_WriteByte(0x90);Delay(20);x=SPI_WriteByte(0x00);x3;/ 移位换算成 12 位的有效数据 0-4095return (x);/* 名称: u16 TPReadY(void)* 功能:触摸屏 Y 轴数据读出* 入口参数:无* 出口参数:无* 说 明:* 调用方法:u16 TPReadY(void)u16 y=0;TP_CS();Delay(20);SPI_WriteByte(0xd0);Delay(20); y=SPI_WriteByte(0x00); y3;return (y);/ 选择 XPT2046/ 延时/ 设置 Y 轴读取标志/ 延时/ 连续读取 16 位的数据/ 禁止 XPT2046/ 移位换算成 12 位的有效数据 0-4095* 名称: void Read_XPT2046(void)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热力项目审批流程与管理方案
- 学生校园安全教育演讲
- 土建工程地铁工程施工方案
- 潍坊针刺毯施工方案
- 建筑垃圾处理厂安全监控系统建设方案
- 动力电池零碳工厂项目技术方案
- 离婚协议书:婚姻终止及财产处理协议
- 桥梁锚头维护施工方案
- 离婚共同债务处理与子女监护权协议书(全面解决)
- 体育馆屋顶设施建设方案
- GB/T 37507-2025项目、项目群和项目组合管理项目管理指南
- 2025年人教部编版小学三年级语文上册全册单元测试题及答案(全套)
- 城市轨道交通车站平面设计要点课件
- 生产计划与调度操作手册
- 食品防欺诈培训课件
- 室内墙体拆除合同全文
- 2025年中国移动初级解决方案经理学习考试题库大全-上(单选题)
- 江苏苏州历年中考语文现代文之散文阅读13篇(截至2024年)
- 体育行业反兴奋剂管理制度
- 护理管理的发展史
- 《以产地命名中药》课件
评论
0/150
提交评论