for(j=0;j<255;j++);}
/******************************************************
写寄存器ID的子程序
******************************************************/
void WriteCOM(unsigned char ID)
{
RS=0;
CS=0;
TFT_DATA=0x00;
RW=0;
RW=1;
TFT_DATA=ID;
RW=0;
RW=1;
RS=1;
CS=1;
}
/******************************************************
写数据的子程序
******************************************************/
void WriteDAT(unsigned char HD,unsigned char LD) //写16位数据
{
RS=1;
CS=0;
TFT_DATA=HD;
RW=0;
RW=1;
TFT_DATA=LD;
RW=0;
RW=1;
RS=0;
CS=1;
}
void WriteDAT_8(unsigned char ddate) //写8位数据
{
RS=1;
CS=0;
TFT_DATA=ddate;
RW=0;
RW=1;
RS=0;
CS=1;
}
/******************************************************
用于写字符,图线等
*****************************************************/
void Write_Data_U16(unsigned int y)
{
unsigned char m,n;
m=y>>8; //高8位
n=y; //低8位
WriteDAT(m,n);
}
/******************************************************
IC ILI9163初始化
******************************************************/
void ILI9163_init(void)
{
RST=1;
delayms(10);
RST=0;
delayms(10);
RST=1;
delayms(10);
WriteCOM(0x11);//退出睡眠模式
delayms(10);
WriteCOM(0x26);// Gammut format 伽马曲线设置
WriteDAT_8(0x04);
/* 04h GC3 Gammut 2.2,01h GC1 Gammut 1.0 , 02h GC2 gammut 1.8, 08h GC3 Gammut 2.5 */
delayms(10);
WriteCOM(0xB1); //帧频控制
WriteDAT_8(0x06);
WriteDAT_8(0x08);
WriteDAT_8(0x09);
WriteCOM(0xC0); WriteDAT_8(0x04); WriteDAT_8(0x00); WriteCOM(0xC1); WriteDAT_8(0x07);
WriteCOM(0xC5); WriteDAT_8(0x4c); WriteDAT_8(0x38); WriteCOM(0xC7); WriteDAT_8(0x40); //电源控制
//电源控制
//偏压控制
//vcom control 0x48,0x24 34 //2b
//vcom control 0x48,0x24 50 //47 //偏压控制
//C4
delayms(10);
WriteCOM(0x3A); // Interface Pixel mode
WriteDAT_8(0x05);
/*0x05 16 bit/Pixel RGB 53-35 Twice per pixel for 80-8bits parallel
0x06 18 bit/Pixel RGB 6-6-6 Three times per pixel for 80-8bits parallel */
WriteCOM(0x36); //扫描方向控制
WriteDAT_8(0xA8); //
WriteCOM(0xB7);
WriteDAT_8(0x00); //
WriteCOM(0xF2);
WriteDAT_8(0x01);
delayms(10);
// t Gamma,伽马曲线设置
WriteCOM(0xE0);// Positive 05
WriteDAT_8(0x09);//1
WriteDAT_8(0x16);//2
WriteDAT_8(0x09);//3
WriteDAT_8(0x27);//4
WriteDAT_8(0x2e);//5
WriteDAT_8(0x25);//6
WriteDAT_8(0x1c);//7
WriteDAT_8(0x20);//8
WriteDAT_8(0x1e);//9
WriteDAT_8(0x1a);//10
WriteDAT_8(0x24);//11
WriteDAT_8(0x2d);//12
WriteDAT_8(0x04);//13
WriteDAT_8(0x05);//14
WriteDAT_8(0x02);//15
WriteDAT_8(0x0e);//16
WriteCOM(0xE1); // Negative
WriteDAT_8(0x0b);//1
WriteDAT_8(0x14);//2
WriteDAT_8(0x09);//3
WriteDAT_8(0x26);//4
WriteDAT_8(0x27);//5
WriteDAT_8(0x22);//6
WriteDAT_8(0x1c);//7
WriteDAT_8(0x20);//8
WriteDAT_8(0x1d);//9
WriteDAT_8(0x1a);//10
WriteDAT_8(0x25);//11
WriteDAT_8(0x2d);//12
WriteDAT_8(0x06);//13
WriteDAT_8(0x06);//14
WriteDAT_8(0x02);//15
WriteDAT_8(0x0f);//16
WriteCOM(0x29); //Display on
delayms(10);
WriteCOM(0x2C); //write to RAM
}
/******************************************************
地址设置
******************************************************/
void add_rst(void) //地址重置
{
WriteCOM(0x2a); WriteDAT_8(0x00);
WriteDAT_8(0x00);
WriteDAT_8(0x00);
WriteDAT_8(159);
WriteCOM(0x2b); WriteDAT_8(0x00);
WriteDAT_8(0x00);
WriteDAT_8(0x00);
//Colulm addRSTs set
//Colulm addRSTs set
WriteDAT_8(128);
WriteCOM(0x2C); //Write Data to GRAM
}
static void LCD_SetPos(unsigned int x0,unsigned y0,unsigned int y1)
{
WriteCOM(0x2A); //Colulm addRSTs set
WriteDAT_8(x0>>8); //取x0的高8位
WriteDAT_8(x0); //取x0的低8位
WriteDAT_8(x1>>8);
WriteDAT_8(x1);
WriteCOM(0x2B); //Colulm addRSTs set
WriteDAT_8(y0>>8);
WriteDAT_8(y0);
int x1,unsigned int
WriteDAT_8(y1>>8);
WriteDAT_8(y1);
WriteCOM(0x2C); //Write Data to GRAM
}
/*****************************************************
函数名:display()
功能:显示整屏颜色,颜色由d1,d2决定
******************************************************/
void display(unsigned int colour)
{
unsigned int c,s;
add_rst();
for(c=0;c<128;c++) //横向扫描
{
for(s=0;s<160;s++)
{
WriteDAT(colour>>8,colour);
}
}
delayms(200);
}
/******************************************************
函数名:LCD_ico
功能:在起始位置为xs、ys,宽x、高y的区域内写入大小
为x*y的图像ico
******************************************************/
void LCD_ico(unsigned char xs,unsigned char ys,unsigned char x,unsigned char y,unsigned char ico[])
{
unsigned int i;
LCD_SetPos(xs,xs+x-1,ys,ys+y-1);
for(i=0;i{WriteDAT(ico[i],ico[i+1]); //
}
}
/******************************************************
函数名:LCD_clear
功能:在起始位置为xs、ys,宽x、高y的区域内写白色
*****************************************************/
void LCD_clear(unsigned char xs,unsigned char ys,unsigned char x,unsigned char y)
{
unsigned int i;
LCD_SetPos(xs,xs+x-1,ys,ys+y-1);
for(i=0;i{WriteDAT(0xff,0xff); //
}
}
/******************************************************
函数名:LCD_write_kong
功能:写空白显示在编号x位置
******************************************************/
void LCD_write_kong(unsigned char y)
{
unsigned char m,n;
LCD_SetPos((y%3)*42+y%3,(y%3)*42+42-1+y%3,(y/3)*42+y/3,(y/3)*42+42-1+y/3); //ram ready
for(n=0;n<42;n++) //
for(m=0;m<42;m++)
{
WriteDAT(0xFF,0xEE); //暂定为 色
}
}
/******************************************************
函数名:LCD_write_part
功能:从图片数组中取出对应于x的部分显示在编号y位置上
每一小部分大小暂定为42x42。
******************************************************/
void LCD_write_part(unsigned char y,unsigned char x,unsigned char img[])
{
unsigned char m,n;
LCD_SetPos((y%3)*42+y%3,(y%3)*42+42-1+y%3,(y/3)*42+y/3,(y/3)*42+42-1+y/3); //ram ready
if(x==8)
LCD_write_kong(y);
else
{
for(n=0;n<42;n++)
{
for(m=0;m<42;m++)
{
WriteDAT(img[2*(m+126*n+42*(x%3)+126*42*(x/3))],img[2*(m+126*n+42*(x%3)+126*42*(x/3))+1]); //
}
}
}
}
/******************************************************
第x列,第y行,字符串c,颜色fColor
*****************************************************/
void LCD_bot(unsigned char x,unsigned char y,unsigned int fColor)
{
LCD_SetPos(x,x+1,y,y+1);
Write_Data_U16(fColor);
}
/******************************************************
自测试程序,正屏刷8种颜色
*******************************************************/
void TFT_Test()
{
unsigned char i;
ILI9163_init();
for(i=0;i<8;i++)
{
display(color[i]); //white FULL
delayms(1000);
}
}