2.2 初始化函数,包括电源电压的设置,显示模式的设置等等。
// 定义TFT4267初始化数据信息
STCOM_INI TFT4267_INI[] =
{ // 电源设置
{0x0000, 0x0001, 10}, // Start Oscillation
{0x000B, 0x0000, 0}, // Frame cycle setting;lcd工作时钟设置
{0x000C, 0x0000, 15}, // External display interface setting;lcd工作模式设置
{0x0011, 0x2E00, 0}, // Power control2 setting;灰度电压,3级电源电路设置
{0x0014, 0x1119, 0}, // Power control4 setting;设置lcd屏的供电电压
{0x0010, 0x1040, 15}, // Power control1 setting;设置lcd屏的电流及其它参数
{0x0013, 0x0040, 15}, // Power control3 setting;1级电源电路设置
{0x0013, 0x0060, 15}, // Power control3
{0x0013, 0x0070, 60}, // Power control3
// {0x0011, 0x3100, 0}, // Power control2
// {0x0010, 0x1600, 20}, // Power control1
// 显示设置
{0x0001, 0x0927, 0}, // Driver output setting (240x320 mode, GS="0", SS="1")
{0x0002, 0x0700, 0}, // LCD driving waveform setting
{0x0003, 0x1030, 0}, // Entry mode setting (TRI=0, DFM="0", BGR="1", ID1:ID0 =11)
{0x0007, 0x0004, 0}, // Display control1 (VLE2:VLE1=00, REV="1")
{0x0008, 0x0505, 0}, // Display control2
{0x0009, 0x0000, 0}, // ***
{0x0040, 0x0000, 0}, // Gate scan position (start G1 scan)
{0x0041, 0x0000, 0}, // Vertical scroll setting
{0x0042, 319, 0}, // Screen end position (320-1)
{0x0043, 0, 0}, // Screen start position (0)
{0x0044, 0, 0}, // 2th Screen end position
{0x0045, 0, 0}, // 2th Screen start position
{0x0046, 0xEF00, 0}, // window addr set for x0,x1 (0, 239)
{0x0047, 0x013F, 0}, // window addr set for y0 (319)
{0x0048, 0x0000, 20}, // window addr set for y1 (0)
{0x0030, 0x0404, 0}, // Gamma control1
{0x0031, 0x0006, 0}, // Gamma control2
{0x0032, 0x0000, 0}, // Gamma control3
{0x0033, 0x0202, 0}, // Gamma control4
{0x0034, 0x0707, 0}, // Gamma control5
{0x0035, 0x0107, 0}, // Gamma control6
{0x0036, 0x0303, 0}, // Gamma control7
{0x0037, 0x0202, 0}, // Gamma control8
{0x0038, 0x1100, 0}, // Gamma control9
{0x0039, 0x1100, 0}, // Gamma control10
// 打开显示
{0x0007, 0x0015, 40}, // Display control (GON=1, open disp)
{0x0007, 0x0017, 40},
{0x0020, 0x0000, 0}, // set GRAM addr(AD7--0)
{0x0021, 0x0000, 20}, // set GRAM addr(AD16--8)
{DATA_END, 0, 0}
};
/*******************************************************
* 名称: TftInit
* 功能: 初始化TFT液晶模块。
* 入口参数: 无
* 出口参数: 无
*******************************************************/
void TftInit(void)
{ STCOM_INI init_dat;
int i;
TftReset(); //初始化的时候要先拉低电压
for(i=0; i<100; i++) // 设定最多100条初始化命令
{ init_dat = TFT4267_INI[i];
if(init_dat.com==DATA_END) break;
TftSendCom(init_dat.com);
TftSendDat(init_dat.dat);
DelaymS(init_dat.dly);
}
}
2.3 还要提供几个基本的函数供上层调用,比如取点,画线函数。有了这几个函数就可以实现复杂的图。比如圆,椭圆等。
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* color 显示颜色
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
****************************************************************************/
uint8 GUI_Point(uint16 x, uint16 y, TCOLOR color)
{ /* 参数过滤 */
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
/* 刷新显示 */
TftSetWrite(x, y);
TftSendDat(color);
return(1);
}
/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定位置点的颜色数据。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* 出口参数:返回值即是读出值(RRRRRGGGGGGBBBBB)。
****************************************************************************/
uint8 GUI_ReadPoint(uint16 x, uint16 y, TCOLOR *ret)
{ uint16 bak;
/* 参数过滤 */
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
/* 读取数据 */
TftSetAddr(x, y); // 设置地址
TftSendCom(WR_RD_DATA);
bak = TftRcvDat();
// bak = TftRcvDat();
*ret = bak;
return(1);
}
/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0 水平线起点所在列的位置
* y0 水平线起点所在行的位置
* x1 水平线终点所在列的位置
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_HLine(uint16 x0, uint16 y0, uint16 x1, TCOLOR color)
{ uint16 bak;
if(x0>x1) // 对x0、x1大小进行排列,以便画图
{ bak = x1;
x1 = x0;
x0 = bak;
}
GUI_Point(x0, y0, color); // 显示第一点
x0++;
while(x1>=x0)
{ TftSendDat(color); // 不断填充并显示
x0++;
}
}
/****************************************************************************
* 名称:GUI_RLine()
* 功能:画垂直线。
* 入口参数: x0 垂直线起点所在列的位置
* y0 垂直线起点所在行的位置
* y1 垂直线终点所在行的位置
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_RLine(uint16 x0, uint16 y0, uint16 y1, TCOLOR color)
{ uint16 bak;
if(y0>y1) // 对y0、y1大小进行排列,以便画图
{ bak = y1;
y1 = y0;
y0 = bak;
}
while(y1>=y0)
{ GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
y0++;
}
}