#include "lcddrive.h"
/****************************************************************************
*函数名:TFT_WriteCmd
*输 入:cmd:命令
*输 出:
*功 能:写命令。
****************************************************************************/
void TFT_WriteCmd(uint cmd)
{
uchar cmdH, cmdL;
cmdH = cmd >> 8;
cmdL = cmd & 0x00FF;
TFT_WR = 1; //初始化WR
TFT_CS = 0; //打开片选
TFT_RD = 1; //选择写
TFT_RS = 0; //选择命令
TFT_DATAPORT = cmdH; //放置命令数据
TFT_DB8 = 0;
TFT_WR = 0; //写入时序
TFT_WR = 1;
TFT_DATAPORT = cmdL;
TFT_DB8 = 0;
TFT_WR = 0; //写入时序
TFT_WR = 1;
TFT_CS = 1; //关闭片选
}
/****************************************************************************
*函数名:TFT_WriteData
*输 入: dat:数据
*输 出:
*功 能: 写数据。
****************************************************************************/
void TFT_WriteData(uint dat)
{
uchar datH, datL;
datH = dat >> 8;
datL = dat & 0x00FF;
TFT_WR = 1; //初始化WR
TFT_CS = 0; //打开片选
TFT_RD = 1; //选择写
TFT_RS = 1; //选择发送数据
TFT_DATAPORT = datH; //放置命令数据
TFT_DB8 = 0;
TFT_WR = 0; //写入时序
TFT_WR = 1;
TFT_DATAPORT = datL;
TFT_DB8 = 0;
TFT_WR = 0; //写入时序
TFT_WR = 1;
TFT_CS = 1; //关闭片选
}
/****************************************************************************
*函数名:TFT_WriteColorData
*输 入: dat:输入的颜色
*输 出:
*功 能: 写数据。
****************************************************************************/
void TFT_WriteColorData(uint dat)
{
uchar datH, datL, db8H, db8L;
//-- 进行颜色转换 --//
datL = dat & 0x00FF;
db8L = (dat >> 4) & 0x01;
datH = dat >> 11;
datH <<= 1;
datH |= dat >> 15;
datH <<= 2;
datH |= (dat >> 9) & 0x03;
db8H = (dat >> 8) & 0x01;
TFT_WR = 1; //初始化WR
TFT_CS = 0; //打开片选
TFT_RD = 1; //选择写
TFT_RS = 1; //选择发送数据
TFT_DATAPORT = datH; //放置命令数据
TFT_DB8 = db8H;
TFT_WR = 0; //写入时序
TFT_WR = 1;
TFT_DATAPORT = datL;
TFT_DB8 = db8L;
TFT_WR = 0; //写入时序
TFT_WR = 1;
TFT_CS = 1; //关闭片选
}
/****************************************************************************
*函数名:TFT_WriteCmdData
*输 入:cmd:命令
* :dat:数据
*输 出:
*功 能:写命令, 写数据。
****************************************************************************/
void TFT_WriteCmdData(uint cmd, uint dat)
{
TFT_WriteCmd(cmd);
TFT_WriteData(dat);
}
/****************************************************************************
*函数名:TFT_Init
*输 入:
*输 出:
*功 能:初始化TFT。
****************************************************************************/
void TFT_Init(void)
{
uint i;
TFT_RST = 1;
for(i=500; i>0; i--);
TFT_RST = 0;
for(i=500; i>0; i--);
TFT_RST = 1;
for(i=5000; i>0; i--);
TFT_CS = 0;
//************* Start Initial Sequence **********//
TFT_WriteCmdData(0xE3, 0x3008); // Set internal timing
TFT_WriteCmdData(0xE7, 0x0012); // Set internal timing
TFT_WriteCmdData(0xEF, 0x1231); // Set internal timing
TFT_WriteCmdData(0x01, 0x0100); // set SS and SM bit
TFT_WriteCmdData(0x02, 0x0700); // set 1 line inversion
TFT_WriteCmdData(0x03, 0x1030); // set GRAM write direction and BGR=1.
TFT_WriteCmdData(0x04, 0x0000); // Resize register
TFT_WriteCmdData(0x08, 0x0207); // set the back porch and front porch
TFT_WriteCmdData(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0]
TFT_WriteCmdData(0x0A, 0x0000); // FMARK function
TFT_WriteCmdData(0x0C, 0x0000); // RGB interface setting
TFT_WriteCmdData(0x0D, 0x0000); // Frame marker Position
TFT_WriteCmdData(0x0F, 0x0000); // RGB interface polarity
//*************Power On seence ****************//
TFT_WriteCmdData(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
TFT_WriteCmdData(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
TFT_WriteCmdData(0x12, 0x0000); // VREG1OUT voltage
TFT_WriteCmdData(0x13, 0x0000); // VDV[4:0] for VCOM amplitude
for(i=5000; i>0; i--); // Dis-charge capacitor power voltage
TFT_WriteCmdData(0x10, 0x1490); // SAP, BT[3:0], AP, DSTB, SLP, STB
TFT_WriteCmdData(0x11, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
for(i=5000; i>0; i--); // Delay 50ms
TFT_WriteCmdData(0x12, 0x001C); // Internal reference voltage= Vci;
for(i=5000; i>0; i--); // Delay 50ms
TFT_WriteCmdData(0x13, 0x1A00); // Set VDV[4:0] for VCOM amplitude
TFT_WriteCmdData(0x29, 0x0025); // Set VCM[5:0] for VCOMH
TFT_WriteCmdData(0x2B, 0x000C); // Set Frame Rate
for(i=5000; i>0; i--); // Delay 50ms
TFT_WriteCmdData(0x20, 0x0000); // GRAM horizontal Address
TFT_WriteCmdData(0x21, 0x0000); // GRAM Vertical Address
// ----------- Adjust thGamma Curve ----------//
TFT_WriteCmdData(0x30, 0x0000);
TFT_WriteCmdData(0x31, 0x0506);
TFT_WriteCmdData(0x32, 0x0104);
TFT_WriteCmdData(0x35, 0x0207);
TFT_WriteCmdData(0x36, 0x000F);
TFT_WriteCmdData(0x37, 0x0306);
TFT_WriteCmdData(0x38, 0x0102);
TFT_WriteCmdData(0x39, 0x0707);
TFT_WriteCmdData(0x3C, 0x0702);
TFT_WriteCmdData(0x3D, 0x1604);
//------------------ SetRAM area ---------------//
TFT_WriteCmdData(0x50, 0x0000); // Horizontal GRAM Start Address
TFT_WriteCmdData(0x51, 0x00EF); // Horizontal GRAM End Address
TFT_WriteCmdData(0x52, 0x0000); // Vertical GRAM Start Address
TFT_WriteCmdData(0x53, 0x013F); // Vertical GRAM Start Address
TFT_WriteCmdData(0x60, 0xA700); // Gate Scan Line
TFT_WriteCmdData(0x61, 0x0000); // NDL,VLE, REV (????)IPS(0000),TN(0001)
TFT_WriteCmdData(0x6A, 0x0000); // set scrolling line
//-------------- Partialisplay Control ---------//
TFT_WriteCmdData(0x80, 0x0000);
TFT_WriteCmdData(0x81, 0x0000);
TFT_WriteCmdData(0x82, 0x0000);
TFT_WriteCmdData(0x83, 0x0000);
TFT_WriteCmdData(0x84, 0x0000);
TFT_WriteCmdData(0x85, 0x0000);
//-------------- Panel Ctrol -------------------//
TFT_WriteCmdData(0x90, 0x0010);
TFT_WriteCmdData(0x92, 0x0600);
TFT_WriteCmdData(0x07, 0x0133); // 262K color and display ON
}
/****************************************************************************
*函数名:TFT_SetWindow
*输 入:xStart:起始X坐标
* :yStart:起始Y坐标
* :xEnd:结束X坐标
* :yEnd:结束Y坐标
*输 出:
*功 能:设置要操作的窗口。
****************************************************************************/
void TFT_SetWindow(uint xStart, uint yStart, uint xEnd, uint yEnd)
{
TFT_WriteCmdData(0x0050, xStart); //水平线起始
TFT_WriteCmdData(0x0052, yStart); //垂直线起始
TFT_WriteCmdData(0x0051, xEnd); //水平线结束
TFT_WriteCmdData(0x0053, yEnd); //垂直线结束
TFT_WriteCmdData(0x0020, xEnd);
TFT_WriteCmdData(0x0021, yEnd);
TFT_WriteCmd(0x0022);
}
/****************************************************************************
*函数名:GUI_Clearcreen
*输 入:backColor:清屏颜色
*输 出:
*功 能:清屏并涂上颜色。
****************************************************************************/
void TFT_ClearScreen(uint color)
{
uint i, j;
TFT_SetWindow(0, 0, TFT_XMAX, TFT_YMAX); //作用区域
for(i=0; i<= TFT_XMAX; i++)
{
for (j=0; j<= TFT_YMAX; j++)
{
TFT_WriteColorData(color);
}
}
}