5.7英寸TFT模块的应用
摘要:本文介绍介绍了清达光电HGF05731彩色TFT模块的简单应用,另外提供了基于STM单片机的软件应用。
1,5.7英寸TFT模块的应用——清达光电TFT模块 HGF05731的特点
HGF05731是一款文字与图形双图层显示的液晶模组,可结合文字或2D图形应用。 支持BIG5/GB/UNICODE等编码;在图形的使用上,支持一2D的BET引擎,此BET兼容于一般通用的2D BitBLT的功能,可用于处理大量图形数据的转换;除此还包括一些强大的图形处理功能,如画面旋转功能、卷动功能、文字放大等等,并提升MCU软件的执行效率。 此款产品主要特点如下: > 支持文字和绘图两种混合显示模式 > 色彩深度:256色/64K色 > 支持320X240Pixels 2 Layers > 此款默认8-bit 8080时序,是一款功能强大的彩色TFT屏。 (支持8-bit 8080、3/4-wire SPI 及I2C时序,时序可选) > 内建DDRAM: 768KB > 内建10KB字型ROM(8*16Dots)及支持标准ISO8859-1/2/3/4编码 > 支持外面串列式Flash/ROM SPI 界面 > 支持集通公司UNICODE/BIG5/GB系列字库(16X16/24X24/32X32Dots) > 支持1倍到4倍字型放大(垂直和水平) > 支持文字垂直旋转模式功能 > 内建2D BET功能 > 内建几何图形加速绘图引擎 > 提供可调整大小的文字写入游标功能 > 提供32*32pixel的图形光标功能 > 支持256个使用者自定8X16字元符号 > 支持16个使用者自建8X8像素图形Pattern,或4个使用者自建16X16像素图形Pattern > 脉波宽度调制(PWM)控制LED背光 > 内建4线式触控面板控制器(此款产品触摸屏可选) > 提供低耗电的睡眠模式
2,5.7英寸TFT模块的应用——清达光电TFT模块的主要参数
尺寸 5.7”
像素模式 320(RGB)x 240
视角 6点
控制IC RA8875
接口模式 8-bit 8080时序
背光模式 LED白光
工作温度 -20 ~70 ℃
存储温度 -30 ~ 85 ℃
其他 带字库(GB2312)
外形尺寸 160.0(W)X111.0(H)X15.5 MAX.(T) mm
可视区 118.2 (W)×89.4 (H) mm
有效区 115.2(W)×86.4(H) mm
点间距 0.36(W)×0.36(H) mm
3,5.7英寸TFT模块的应用——清达光电TFT模块的接口信息
编号 符号 电平 功能
1 VDD +5.0V 逻辑电源信号
2 VSS 0V I/O信号及内核电路接地端
3 NC - 空脚
4 RS H/L 指令 / 数据选择控制信号,此脚位用于区分进行指令周期或数据周期,当RS = 0时,RA8875为数据读取或写入周期。当RS = 1时,RA8875为状态读取或指令写入周期
5 /WR H/L 数据写入信号,于低电位动作
6 /RD H/L 数据读取信号,于低电位动作
7~14 DB0~DB7 H/L 数据总线,负责模块与微处理器之间的数据传送与接收
15 /CS L 芯片选取控制信号,低准位动作的芯片选取输入信号
16 /REST L 复位信号,低有效
17 /WAIT L 等待信号,此为反应RA8875内部的执行使用状况。当WAIT# 为Low时表示RA8875正处于忙碌状态,无法接受来自MCU指令。把此脚位接到MCU I/O脚位时,它能用轮询机制 (Polling) 来监控内部的状况
18 /INT L 中断信号,RA8875 发出给MCU的外部中断信号
外部扩展Flash控制脚位:
19 /SCS L Flash 片选信号
20 DO H/L 数据输出
21 DIO H/L 数据输入/输出
22 SCL H/L 时钟信号
4,5.7英寸TFT模块的应用——清达光电TFT模块基于STM32单片机的部分软件
文章有限仅录入一部分程序,如需**程序,请联系QQ 453189731 刘小姐
#include "lcd.h" #include "delay.h" #include "stdlib.h" //#include "car_pic.h" #define LCD_FAST_IO 1 //定义是否使用快速IO 0,不实用.1,使用 #if LCD_FAST_IO==1 //快速IO //写寄存器函数 void LCD_CmdWrite(u8 Cmd) { LCD_RS_SET;//写地址 LCD_CS_CLR; DATAOUT(Cmd); LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET; } #else//正常IO //写寄存器函数 void LCD_CmdWrite(u8 Cmd) { LCD_RS=1;//写地址 LCD_CS=0; DATAOUT(Cmd); LCD_WR=0; delay_ms(10); LCD_WR=1; LCD_CS=1; } #endif void LCD_DataWrite(u16 Data) { GPIOA->CRL=0X33333333; //PB0-7 上拉输出 GPIOA->CRH=0X33333333; //PB8-15 上拉输出 GPIOA->ODR=0XFFFF; //全部输出高 LCD_CS_CLR; LCD_RS_CLR; DATAOUT(Data); LCD_WR_CLR; LCD_WR_SET; LCD_RS_SET; LCD_CS_SET; } //***********************读状态 u8 LCD_StatusRead(void) { u16 t; GPIOB->CRL=0X88888888; //PB0-7 上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0XFFFF; //全部输出高 #if LCD_FAST_IO==1 //快速IO LCD_RS_SET; LCD_CS_CLR; //读取数据(读寄存器时,并不需要读2次) LCD_RD_CLR; t=DATAIN; LCD_RD_SET; LCD_RS_CLR; LCD_CS_SET; #else LCD_RS=1; LCD_CS=0; //读取数据(读寄存器时,并不需要读2次) LCD_RD=0; t=DATAIN; LCD_RD=1; LCD_CS=1; #endif GPIOB->CRL=0X33333333; //PB0-7 上拉输出 GPIOB->CRH=0X33333333; //PB8-15 上拉输出 GPIOB->ODR=0XFFFF; //全部输出高 return t; } //***********************读数据 u8 LCD_DataRead(void) { u16 t; GPIOB->CRL=0X88888888; //PB0-7 上拉输入 GPIOB->CRH=0X88888888; //PB8-15 上拉输入 GPIOB->ODR=0XFFFF; //全部输出高 #if LCD_FAST_IO==1 //快速IO LCD_RS_CLR; LCD_CS_CLR; //读取数据(读寄存器时,并不需要读2次) LCD_RD_CLR; t=DATAIN; LCD_RD_SET; LCD_RS_SET; LCD_CS_SET; #else LCD_RS=0; LCD_CS=0; //读取数据(读寄存器时,并不需要读2次) LCD_RD=0; t=DATAIN; LCD_RD=1; LCD_CS=1; #endif GPIOB->CRL=0X33333333; //PB0-7 上拉输出 GPIOB->CRH=0X33333333; //PB8-15 上拉输出 GPIOB->ODR=0XFFFF; //全部输出高 return t; } //***********************写指令 void Write_Dir(u8 Cmd,u16 Data) { LCD_CmdWrite(Cmd); LCD_DataWrite(Data); } //----------------------------// void LCD_Reset(void) { RCC->APB2ENR|=1<<3;//先使能外设PORTA时钟 RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟 RCC->APB2ENR|=1<<0; //开启辅助时钟 JTAG_Set(SWD_ENABLE); //开启SWD //PORTC5~10复用推挽输出 GPIOC->CRH&=0XFFFFF000; GPIOC->CRH|=0X00000333; GPIOC->CRL&=0X000FFFFF; GPIOC->CRL|=0X33300000; GPIOC->ODR|=0X07E0; //PORTA 推挽输出 GPIOB->CRH=0X33333333; GPIOB->CRL=0X33333333; GPIOB->ODR=0XFFFF; LCD_RST = 0; //RA8875 RESET pin delay_ms(1); LCD_RST = 1; delay_ms(10); } void RA8875_PLL_ini(void) { #ifdef P320x240 LCD_CmdWrite(0x88); LCD_DataWrite(0x0a); delay_ms(1); LCD_CmdWrite(0x89); LCD_DataWrite(0x02); delay_ms(1); #endif #ifdef P480x272 LCD_CmdWrite(0x88); LCD_DataWrite(0x0a); delay_ms(1); LCD_CmdWrite(0x89); LCD_DataWrite(0x02); delay_ms(1); #endif #ifdef P640x480 LCD_CmdWrite(0x88); LCD_DataWrite(0x0b); delay_ms(1); LCD_CmdWrite(0x89); LCD_DataWrite(0x02); delay_ms(1); #endif #ifdef P800x480 LCD_CmdWrite(0x88); LCD_DataWrite(0x0c); delay_ms(1); LCD_CmdWrite(0x89); LCD_DataWrite(0x02); delay_ms(1); #endif } //------------------------------------------// void LCD_Initial(void) { RA8875_PLL_ini(); LCD_CmdWrite(0x10); //SYSR bit[4:3]=00 256 color bit[2:1]= 00 8bit MPU interface //LCD_DataWrite(0x0c); // if 8bit MCU interface and 65k color display LCD_DataWrite(0x0F); // if 16bit MCU interface and 65k color display #ifdef P320x240 //============== Display Window 320x240 ================== LCD_CmdWrite(0x04); //set PCLK invers LCD_DataWrite(0x81); delay_ms(1); //Horizontal set LCD_CmdWrite(0x14); //HDWR//Horizontal Display Width Setting Bit[6:0] LCD_DataWrite(0x27);//Horizontal display width(pixels) = (HDWR + 1)*8 LCD_CmdWrite(0x15); //Horizontal Non-Display Period Fine Tuning Option Register (HNDFTR) LCD_DataWrite(0x00);//Horizontal Non-Display Period Fine Tuning(HNDFT) [3:0] LCD_CmdWrite(0x16); //HNDR//Horizontal Non-Display Period Bit[4:0] LCD_DataWrite(0x03);//Horizontal Non-Display Period (pixels) = (HNDR + 1)*8 LCD_CmdWrite(0x17); //HSTR//HSYNC Start Position[4:0] LCD_DataWrite(0x02);//HSYNC Start Position(PCLK) = (HSTR + 1)*8 LCD_CmdWrite(0x18); //HPWR//HSYNC Polarity ,The period width of HSYNC. LCD_DataWrite(0x03);//HSYNC Width [4:0] HSYNC Pulse width(PCLK) = (HPWR + 1)*8 //Vertical set LCD_CmdWrite(0x19); //VDHR0 //Vertical Display Height Bit [7:0] LCD_DataWrite(0xef);//Vertical pixels = VDHR + 1 LCD_CmdWrite(0x1A); //VDHR1 //Vertical Display Height Bit [8] LCD_DataWrite(0x00);//Vertical pixels = VDHR + 1 LCD_CmdWrite(0x1B); //VNDR0 //Vertical Non-Display Period Bit [7:0] LCD_DataWrite(0x0f);//Vertical Non-Display area = (VNDR + 1) LCD_CmdWrite(0x1C); //VNDR1 //Vertical Non-Display Period Bit [8] LCD_DataWrite(0x00);//Vertical Non-Display area = (VNDR + 1) LCD_CmdWrite(0x1D); //VSTR0 //VSYNC Start Position[7:0] LCD_DataWrite(0x0e);//VSYNC Start Position(PCLK) = (VSTR + 1) LCD_CmdWrite(0x1E); //VSTR1 //VSYNC Start Position[8] LCD_DataWrite(0x06);//VSYNC Start Position(PCLK) = (VSTR + 1) LCD_CmdWrite(0x1F); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0] LCD_DataWrite(0x01);//VSYNC Pulse Width(PCLK) = (VPWR + 1) //Active window set //setting active window X LCD_CmdWrite(0x30); //Horizontal Start Point 0 of Active Window (HSAW0) LCD_DataWrite(0x00); //Horizontal Start Point of Active Window [7:0] LCD_CmdWrite(0x31); //Horizontal Start Point 1 of Active Window (HSAW1) LCD_DataWrite(0x00); //Horizontal Start Point of Active Window [9:8] LCD_CmdWrite(0x34); //Horizontal End Point 0 of Active Window (HEAW0) LCD_DataWrite(0x3F); //Horizontal End Point of Active Window [7:0] LCD_CmdWrite(0x35); //Horizontal End Point 1 of Active Window (HEAW1) LCD_DataWrite(0x01); //Horizontal End Point of Active Window [9:8] //setting active window Y LCD_CmdWrite(0x32); //Vertical Start Point 0 of Active Window (VSAW0) LCD_DataWrite(0x00); //Vertical Start Point of Active Window [7:0] LCD_CmdWrite(0x33); //Vertical Start Point 1 of Active Window (VSAW1) LCD_DataWrite(0x00); //Vertical Start Point of Active Window [8] LCD_CmdWrite(0x36); //Vertical End Point of Active Window 0 (VEAW0) LCD_DataWrite(0xef); //Vertical End Point of Active Window [7:0] LCD_CmdWrite(0x37); //Vertical End Point of Active Window 1 (VEAW1) LCD_DataWrite(0x00); //Vertical End Point of Active Window [8] #endif