您好,欢迎来到微智科技网。
搜索
您的当前位置:首页TFT_ILI9163驱动(DOFLY-TFT—1.77A)

TFT_ILI9163驱动(DOFLY-TFT—1.77A)

来源:微智科技网


#include \"ILI9163.h\"

//端口定义

sbit CS =P2^0;

sbit RST=P2^1;

sbit RW =P2^2;

sbit RS =P2^3;

#define TFT_DATA P0

//颜色定义

unsigned

color[]={0xf800,0xffe0,0x07e0,0x07ff,0x001f,0xf81f,0x0000,0xffff,0x7bef};

// 红 黄 绿 青 蓝 紫 灰

/******************************************************

延时,小于0.5ms

int

黑 白

******************************************************/

void delayms(unsigned int count) // x 10ms

{

unsigned int i;

unsigned char j;

for(i=0;ifor(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);

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务