聯(lián)系人:劉小姐,李小姐,王小姐
Tel:010-62000662,62051209
Fax:010-82036512
Mobile:13701081790
Email:bjqingda@126.com
Web:www.tsingtek.com
QQ:453189731
微信:13701081790
地址:北京市海淀區(qū)花園東路32號(hào)花園公寓A402室5.7英寸TFT模塊的應(yīng)用
5.7英寸TFT模塊的應(yīng)用
摘要:本文介紹介紹了清達(dá)光電HGF05731彩色TFT模塊的簡(jiǎn)單應(yīng)用,另外提供了基于STM單片機(jī)的軟件應(yīng)用。
1,5.7英寸TFT模塊的應(yīng)用——清達(dá)光電TFT模塊 HGF05731的特點(diǎn)
HGF05731是一款文字與圖形雙圖層顯示的液晶模組,可結(jié)合文字或2D圖形應(yīng)用。 支持BIG5/GB/UNICODE等編碼;在圖形的使用上,支持一2D的BET引擎,此BET兼容于一般通用的2D BitBLT的功能,可用于處理大量圖形數(shù)據(jù)的轉(zhuǎn)換;除此還包括一些強(qiáng)大的圖形處理功能,如畫面旋轉(zhuǎn)功能、卷動(dòng)功能、文字放大等等,并提升MCU軟件的執(zhí)行效率。 此款產(chǎn)品主要特點(diǎn)如下: > 支持文字和繪圖兩種混合顯示模式 > 色彩深度:256色/64K色 > 支持320X240Pixels 2 Layers > 此款默認(rèn)8-bit 8080時(shí)序,是一款功能強(qiáng)大的彩色TFT屏。 (支持8-bit 8080、3/4-wire SPI 及I2C時(shí)序,時(shí)序可選) > 內(nèi)建DDRAM: 768KB > 內(nèi)建10KB字型ROM(8*16Dots)及支持標(biāo)準(zhǔn)ISO8859-1/2/3/4編碼 > 支持外面串列式Flash/ROM SPI 界面 > 支持集通公司UNICODE/BIG5/GB系列字庫(kù)(16X16/24X24/32X32Dots) > 支持1倍到4倍字型放大(垂直和水平) > 支持文字垂直旋轉(zhuǎn)模式功能 > 內(nèi)建2D BET功能 > 內(nèi)建幾何圖形加速繪圖引擎 > 提供可調(diào)整大小的文字寫入游標(biāo)功能 > 提供32*32pixel的圖形光標(biāo)功能 > 支持256個(gè)使用者自定8X16字元符號(hào) > 支持16個(gè)使用者自建8X8像素圖形Pattern,或4個(gè)使用者自建16X16像素圖形Pattern > 脈波寬度調(diào)制(PWM)控制LED背光 > 內(nèi)建4線式觸控面板控制器(此款產(chǎn)品觸摸屏可選) > 提供低耗電的睡眠模式
2,5.7英寸TFT模塊的應(yīng)用——清達(dá)光電TFT模塊的主要參數(shù)
尺寸 5.7”
像素模式 320(RGB)x 240
視角 6點(diǎn)
控制IC RA8875
接口模式 8-bit 8080時(shí)序
背光模式 LED白光
工作溫度 -20 ~70 ℃
存儲(chǔ)溫度 -30 ~ 85 ℃
其他 帶字庫(kù)(GB2312)
外形尺寸 160.0(W)X111.0(H)X15.5 MAX.(T) mm
可視區(qū) 118.2 (W)×89.4 (H) mm
有效區(qū) 115.2(W)×86.4(H) mm
點(diǎn)間距 0.36(W)×0.36(H) mm
3,5.7英寸TFT模塊的應(yīng)用——清達(dá)光電TFT模塊的接口信息
編號(hào) 符號(hào) 電平 功能
1 VDD +5.0V 邏輯電源信號(hào)
2 VSS 0V I/O信號(hào)及內(nèi)核電路接地端
3 NC - 空腳
4 RS H/L 指令 / 數(shù)據(jù)選擇控制信號(hào),此腳位用于區(qū)分進(jìn)行指令周期或數(shù)據(jù)周期,當(dāng)RS = 0時(shí),RA8875為數(shù)據(jù)讀取或?qū)懭胫芷?。?dāng)RS = 1時(shí),RA8875為狀態(tài)讀取或指令寫入周期
5 /WR H/L 數(shù)據(jù)寫入信號(hào),于低電位動(dòng)作
6 /RD H/L 數(shù)據(jù)讀取信號(hào),于低電位動(dòng)作
7~14 DB0~DB7 H/L 數(shù)據(jù)總線,負(fù)責(zé)模塊與微處理器之間的數(shù)據(jù)傳送與接收
15 /CS L 芯片選取控制信號(hào),低準(zhǔn)位動(dòng)作的芯片選取輸入信號(hào)
16 /REST L 復(fù)位信號(hào),低有效
17 /WAIT L 等待信號(hào),此為反應(yīng)RA8875內(nèi)部的執(zhí)行使用狀況。當(dāng)WAIT# 為L(zhǎng)ow時(shí)表示RA8875正處于忙碌狀態(tài),無法接受來自MCU指令。把此腳位接到MCU I/O腳位時(shí),它能用輪詢機(jī)制 (Polling) 來監(jiān)控內(nèi)部的狀況
18 /INT L 中斷信號(hào),RA8875 發(fā)出給MCU的外部中斷信號(hào)
外部擴(kuò)展Flash控制腳位:
19 /SCS L Flash 片選信號(hào)
20 DO H/L 數(shù)據(jù)輸出
21 DIO H/L 數(shù)據(jù)輸入/輸出
22 SCL H/L 時(shí)鐘信號(hào)
4,5.7英寸TFT模塊的應(yīng)用——清達(dá)光電TFT模塊基于STM32單片機(jī)的部分軟件
文章有限僅錄入一部分程序,如需**程序,請(qǐng)聯(lián)系QQ 453189731 13701081790劉小姐
#include "lcd.h"
#include "delay.h"
#include "stdlib.h"
//#include "car_pic.h"
#define LCD_FAST_IO 1 //定義是否使用快速IO 0,不實(shí)用.1,使用
#if LCD_FAST_IO==1 //快速IO
//寫寄存器函數(shù)
void LCD_CmdWrite(u8 Cmd)
{
LCD_RS_SET;//寫地址
LCD_CS_CLR;
DATAOUT(Cmd);
LCD_WR_CLR;
LCD_WR_SET;
LCD_CS_SET;
}
#else//正常IO
//寫寄存器函數(shù)
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;
}
//***********************讀狀態(tài)
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;
//讀取數(shù)據(jù)(讀寄存器時(shí),并不需要讀2次)
LCD_RD_CLR;
t=DATAIN;
LCD_RD_SET;
LCD_RS_CLR;
LCD_CS_SET;
#else
LCD_RS=1;
LCD_CS=0;
//讀取數(shù)據(jù)(讀寄存器時(shí),并不需要讀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;
}
//***********************讀數(shù)據(jù)
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;
//讀取數(shù)據(jù)(讀寄存器時(shí),并不需要讀2次)
LCD_RD_CLR;
t=DATAIN;
LCD_RD_SET;
LCD_RS_SET;
LCD_CS_SET;
#else
LCD_RS=0;
LCD_CS=0;
//讀取數(shù)據(jù)(讀寄存器時(shí),并不需要讀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;//先使能外設(shè)PORTA時(shí)鐘
RCC->APB2ENR|=1<<4;//先使能外設(shè)PORTC時(shí)鐘
RCC->APB2ENR|=1<<0; //開啟輔助時(shí)鐘
JTAG_Set(SWD_ENABLE); //開啟SWD
//PORTC5~10復(fù)用推挽輸出
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