51单片机驱动16位彩屏

2019-03-24 21:11发布

#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);     //最重要的命令,不可设置错!!
}
此帖出自小平头技术问答
0条回答

一周热门 更多>