#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 //品红 {MOD}的
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0 //蓝绿 {MOD}的
#define DH P1
#define DL P2
sbit TL_RESET=P3^7; //复位TL其中T代表为TFT彩 {MOD}液晶,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位)真彩 {MOD}液晶触摸屏
//函数名称: 复位函数
//参数说明: 无参数
//返回说明: 无返回值
//作者:赵
//手机: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位)真彩 {MOD}液晶触摸屏
//函数名称: 清屏函数
//参数说明: Color为清屏所要显示的颜 {MOD}参数
//返回说明: 无返回值
//作者:赵
//手机: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),对已设置好的点位置进行写入要显示的颜 {MOD}(一个颜 {MOD}点为16位数据)!!
for (i=0; i<320; i++)
{ //清的是满屏(0,0)--(240,320);
for (j=0; j<240; j++)
TL_shuju_Write(Color); //对所要写入的寄存器进行16位设置!
}
}
//**********************************************************
//项目名称: TFT(16位)真彩 {MOD}液晶触摸屏
//函数名称: 向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位)真彩 {MOD}液晶触摸屏
//函数名称: 向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位)真彩 {MOD}液晶触摸屏
//函数名称: 向索引寄存器中写入寄存器地址和对寄存器的设置
//参数说明: 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位)真彩 {MOD}液晶触摸屏
//函数名称: 定义显示窗口
//参数说明: 开辟出的窗口为(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位)真彩 {MOD}液晶触摸屏
//函数名称: 起始写入点位置设置
//参数说明: (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位)真彩 {MOD}液晶触摸屏
//函数名称: 延时函数(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位)真彩 {MOD}液晶触摸屏
//函数名称: 初始化函数
//返回说明: 无返回值
//作者:赵
//手机: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); //最重要的命令,不可设置错!!
}
此帖出自
小平头技术问答
一周热门 更多>