#include<REG52.H> #include <intrins.h> #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位)真彩色液晶触摸屏 //函数名称: 复位函数 //参数说明: 无参数 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期:20100920 //******************************************************** void TL_Reset( ) { TL_RESET=1; //复位这步不可少,缺少复位不好使!! Delayms(20); TL_RESET=0; //复位低电平有效 Delayms(50); TL_RESET=1; //置高电平 Delayms(20); }
//********************************************************** //项目名称: TFT(16位)真彩色液晶触摸屏 //函数名称: 清屏函数 //参数说明: Color为清屏所要显示的颜色参数 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期: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位数据 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期: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位命令 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期: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位数据 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期: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) //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期:20100920 //********************************************************** void TL_WindowSetting(uint x0, uint y0, uint x1, uint y1) { TL_Register_dizhiANDshuju_Write(Window_Horizon_Start, x0); //Window_Horizon_Start是水平开始寄存器地址(R50H)[8位二进制],x0为水平开始寄存器的设置数据[16位二进制]!!! TL_Register_dizhiANDshuju_Write(Window_Vertical_Start, y0); //Window_Vertical_Start是垂直开始寄存器地址(R52H)[8位二进制],y0为垂直开始寄存器的设置数据[16位二进制]!!! TL_Register_dizhiANDshuju_Write(Window_Horizon_End, x1); //Window_Horizon_End是水平终止寄存器地址(R51H)[8位二进制],x1为水平终止寄存器的设置数据[16位二进制]!!! TL_Register_dizhiANDshuju_Write(Window_Vertical_End, y1); //Window_Horizon_Start是垂直终止寄存器地址(R53H)[8位二进制],y1为垂直终止寄存器的设置数据[16位二进制]!!! }
//********************************************************** //项目名称: TFT(16位)真彩色液晶触摸屏 //函数名称: 起始写入点位置设置 //参数说明: (x_start, y_start)为写入时的起始坐标 // 这个点坐标必须在所设置的窗口内,否则无法显示 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期: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) //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期:20100920 //********************************************************** void Delayms(uint xms) { uint i, j; for(i=xms; i>0; i--) for(j=110; j>0; j--); }
//********************************************************** //项目名称: TFT(16位)真彩色液晶触摸屏 //函数名称: 初始化函数 //返回说明: 无返回值 //作者:赵 //手机:13836033349 //QQ号:672641732 //邮箱:zhaokaibin1986@163.com //日期: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); //最重要的命令,不可设置错!! }
|