文档库 最新最全的文档下载
当前位置:文档库 › 51单片机驱动16位彩屏

51单片机驱动16位彩屏

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define Window_Horizon_Start 0x0050

#define Window_Horizon_End 0x0051

#define Window_Vertical_Start 0x0052

#define Window_Vertical_End 0x0053

#define GRAM_Horizontal_Address 0x0020

#define GRAM_Vertical_Address 0x0021

#define GRAM_Write_Data 0x0022

#define White 0xFFFF

#define Black 0x0000

#define Blue 0x001F

#define Red 0x0F800

#define Magenta 0xF81F //品红色的

#define Green 0x07E0

#define Cyan 0x7FFF

#define Yellow 0xFFE0 //蓝绿色的

#define DH P1

#define DL P2

sbit TL_RESET=P3^7; //复位TL其中T代表为TFT彩色液晶,L代表为LCD屏幕控制部分!!!

sbit TL_CS=P3^6; //片选

sbit TL_RS=P0^0; //数据或命令选择

sbit TL_WR=P0^1; //写使能

void TL_Register_dizhiANDshuju_Write(uint, uint);

void TL_WindowSetting(uint, uint, uint, uint);

void TL_StartWritePointPosition_Setting(uint, uint);

void ClearScreen(uint);

void TL_Reset( );

void Delayms(uint);

void ILI9325_chushihua( );

void TL_shuju_Write(uint);

void TL_mingling_Write(uint);

void main( )

{

Delayms(30); //延时200ms保证电源供电稳定!! TL_Reset( );

Delayms(100);

ILI9325_chushihua( );

TL_WindowSetting(0, 0, 240, 320); //X--列(240),Y--行(320); ClearScreen(Red);

while(1);

}

//********************************************************** //项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 复位函数

//参数说明: 无参数

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100920

//******************************************************** void TL_Reset( )

{

TL_RESET=1; //复位这步不可少,缺少复位不好使!!

Delayms(20);

TL_RESET=0; //复位低电平有效

Delayms(50);

TL_RESET=1; //置高电平

Delayms(20);

}

//********************************************************** //项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 清屏函数

//参数说明: Color为清屏所要显示的颜色参数

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100920

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

void ClearScreen(uint Color)

{

uint i, j;

TL_StartWritePointPosition_Setting(0x0000, 0x0000); //设置写入起始点(0,0)!!对索引寄存器的高8位写入0x00,对索引寄存器的低8位写入寄存器地址R22H!!!

TL_mingling_Write(GRAM_Write_Data); //此寄存器的功能为(Write Data to GRAM),对已设置好的点位置进行写入要显示的颜色(一个颜色点为16位数据)!! for (i=0; i<320; i++)

{ //清的是满屏(0,0)--(240,320);

for (j=0; j<240; j++)

TL_shuju_Write(Color); //对所要写入的寄存器进行16位设置!

}

}

//项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 向TFT液晶中写入高低各8位数据

//参数说明: wei16_data是16位数据

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100919

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

void TL_shuju_Write(uint wei16_data)

{

TL_RS=1; //选择为数据模式:0--命令,1--数据;

TL_CS=0; //打开片选信号CS=0,低电平有效;

DL=(uchar)wei16_data; //写低8位数据,即D7--D0,低位有P1口输入

DH=(uchar)(wei16_data>>8); //写高8位数据,即D15--D8,高位有P3口输入; TL_WR=0; //打开写使能(低电平有效),在此期间数据被写入;

TL_WR=1; //关闭写使能;

TL_CS=1; //关闭片选信号!!

// DH=0xff; //防止误操作;

// DL=0xff; //防止误操作;

}

//项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 向TFT液晶中写入命令高位数据

//参数说明: wei16_mingling是16位命令

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100919

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

void TL_mingling_Write(uint wei16_mingling)

{

TL_RS=0; //选择为数据模式:0--命令,1--数据;

TL_CS=0; //打开片选信号CS=0,低电平有效;

DL=(uchar)wei16_mingling; //写低8位数据,即D7--D0,低位有P1口输入

DH=(uchar)(wei16_mingling>>8); //写高8位数据,即D15--D8,高位有P3口输入; TL_WR=0; //打开写使能(低电平有效),在此期间数据被写入;

TL_WR=1; //关闭写使能;

TL_CS=1; //关闭片选信号!!

// DH=0xff; //防止误操作;

// DL=0xff; //防止误操作;

}

//项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 向索引寄存器中写入寄存器地址和对寄存器的设置

//参数说明: R_dizhi是所要操作的寄存器地址

// S_shuju是对该寄存器进行设置的16位数据

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100919

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

void TL_Register_dizhiANDshuju_Write(uint R_dizhi, uint S_shuju)

{

TL_mingling_Write(R_dizhi); //对索引寄存器的高8位写入0x00; 对索引寄存器的低8位写入寄存器地址(寄存地址范围R00H--RFFH);

TL_shuju_Write(S_shuju); //对所要写入的寄存器进行16位设置!!

}

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

//项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 定义显示窗口

//参数说明: 开辟出的窗口为(x0,y0)--(x1,y1)

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100920

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

void TL_WindowSetting(uint x0, uint y0, uint x1, uint y1)

{

TL_Register_dizhiANDshuju_Write(Window_Horizon_Start, x0); //Window_Horiz on_Start是水平开始寄存器地址(R50H)[8位二进制],x0为水平开始寄存器的设置数据[16位二进制]!!!

TL_Register_dizhiANDshuju_Write(Window_Vertical_Start, y0); //Window_Vertica l_Start是垂直开始寄存器地址(R52H)[8位二进制],y0为垂直开始寄存器的设置数据[16位二进制]!!!

TL_Register_dizhiANDshuju_Write(Window_Horizon_End, x1); //Window_Horizon_E nd是水平终止寄存器地址(R51H)[8位二进制],x1为水平终止寄存器的设置数据[16位二进制]!!!

TL_Register_dizhiANDshuju_Write(Window_Vertical_End, y1); //Window_Horizo n_Start是垂直终止寄存器地址(R53H)[8位二进制],y1为垂直终止寄存器的设置数据[16位二进制]!!!

}

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

//项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 起始写入点位置设置

//参数说明: (x_start, y_start)为写入时的起始坐标

// 这个点坐标必须在所设置的窗口内,否则无法显示

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100920

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

void TL_StartWritePointPosition_Setting(uint x_start, uint y_start)

{

TL_Register_dizhiANDshuju_Write(GRAM_Horizontal_Address, x_start); //R20H寄存器为水平起始写入点设置寄存器!x_start为16位数据!!

TL_Register_dizhiANDshuju_Write(GRAM_Vertical_Address, y_start); //R21H寄存器为垂直起始写入点设置寄存器!y_start为16位数据!!

}

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

//项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 延时函数(ms)

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100920

//********************************************************** void Delayms(uint xms)

{

uint i, j;

for(i=xms; i>0; i--)

for(j=110; j>0; j--);

}

//********************************************************** //项目名称: TFT(16位)真彩色液晶触摸屏

//函数名称: 初始化函数

//返回说明: 无返回值

//作者:赵

//手机:138********

//QQ号:672641732

//邮箱:zhaokaibin1986@https://www.wendangku.net/doc/965562782.html,

//日期:20100924

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

void ILI9325_chushihua( )

{

TL_Register_dizhiANDshuju_Write(0x00E3,0x3008); // Set internal timing

TL_Register_dizhiANDshuju_Write(0x00E7,0x0012); // Set internal timing

TL_Register_dizhiANDshuju_Write(0x00EF,0x1231); // Set internal timing

TL_Register_dizhiANDshuju_Write(0x0000,0x0001); //启动TFT内部晶振;(可有可无)

Delayms(20); //等待TFT内部晶振稳定,约10ms;

TL_Register_dizhiANDshuju_Write(0x0001,0x0000); //扫描方向控制,

SM=0;SS=1;SS(源极,列)S1~~S720;(SM=0,GB=1)为从上至下扫描行!!

TL_Register_dizhiANDshuju_Write(0x0002,0x0700); //波形控制,EOR=1和B/C=1设置行反转!!

TL_Register_dizhiANDshuju_Write(0x0003,0x1000); //

TL_Register_dizhiANDshuju_Write(0x0004,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0008,0x0207); //

TL_Register_dizhiANDshuju_Write(0x0009,0x0000); //

TL_Register_dizhiANDshuju_Write(0x000A,0x0000); //

TL_Register_dizhiANDshuju_Write(0x000C,0x0000); //

TL_Register_dizhiANDshuju_Write(0x000D,0x0000); //

TL_Register_dizhiANDshuju_Write(0x000F,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0010,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0011,0x0007); //

TL_Register_dizhiANDshuju_Write(0x0012,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0013,0x0000); //

Delayms(200);

TL_Register_dizhiANDshuju_Write(0x0010,0x1690); // TL_Register_dizhiANDshuju_Write(0x0011,0x0227); //

Delayms(50);

TL_Register_dizhiANDshuju_Write(0x0012,0x001D); //

Delayms(50);

TL_Register_dizhiANDshuju_Write(0x0013,0x0800); //

TL_Register_dizhiANDshuju_Write(0x0029,0x0014); //

TL_Register_dizhiANDshuju_Write(0x002B,0x000B); //

Delayms(50);

TL_Register_dizhiANDshuju_Write(0x0030,0x0007); //

TL_Register_dizhiANDshuju_Write(0x0031,0x0707); //

TL_Register_dizhiANDshuju_Write(0x0032,0x0006); //

TL_Register_dizhiANDshuju_Write(0x0035,0x0704); //

TL_Register_dizhiANDshuju_Write(0x0036,0x1F04); //

TL_Register_dizhiANDshuju_Write(0x0037,0x0004); //

TL_Register_dizhiANDshuju_Write(0x0038,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0039,0x0706); //

TL_Register_dizhiANDshuju_Write(0x003C,0x0701); //

TL_Register_dizhiANDshuju_Write(0x003D,0x000F); //

TL_Register_dizhiANDshuju_Write(0x0050,0x0000); // TL_Register_dizhiANDshuju_Write(0x0051,0x00EF); //

TL_Register_dizhiANDshuju_Write(0x0052,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0053,0x013F); //

TL_Register_dizhiANDshuju_Write(0x0060,0x2700); //

TL_Register_dizhiANDshuju_Write(0x0061,0x0001); //

TL_Register_dizhiANDshuju_Write(0x006A,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0080,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0081,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0082,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0083,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0084,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0085,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0090,0x0010); //

TL_Register_dizhiANDshuju_Write(0x0092,0x0000); //

TL_Register_dizhiANDshuju_Write(0x0093,0x0003); //

TL_Register_dizhiANDshuju_Write(0x0095,0x0110); //

TL_Register_dizhiANDshuju_Write(0x0097,0x0000);

TL_Register_dizhiANDshuju_Write(0x0098,0x0000);

TL_Register_dizhiANDshuju_Write(0x0007,0x0133); //最重要的命令,不可设置错!!

}

相关文档
相关文档 最新文档