📄 lcd_driver_user.c
字号:
*LCD_CMD_Buffer = uiTemp2; //WD = 0
*LCD_CMD_Buffer = uiTemp; //WD = 1
#if LCD_Data_BUS_Byte==1
*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0x00ff)|(Dat<<8);
#endif
#if LCD_Data_BUS_Byte==0
*LCD_Data_BUS_Out = (*LCD_Data_BUS_Out&0xff00)|(Dat&0x00ff);
#endif
uiTemp = *LCD_CMD_Buffer;
uiTemp2 = uiTemp&(~LCD_WR);
*LCD_CMD_Buffer = uiTemp2; //WD = 0
*LCD_CMD_Buffer = uiTemp; //WD = 1
uiTemp = uiTemp|LCD_CS;
*LCD_CMD_Buffer = uiTemp;
}
//========================================================================
// 函数: void LCD_PortInit(void)
// 描述: 与LCD连接的端口初始化代码
// 参数: 无
// 返回: 无
// 备注:
// 版本:
// 2007/03/15 First version
// 注意:
//========================================================================
void LCD_PortInit(void)
{
#if LCD_Data_BUS_Byte==1
*LCD_Data_BUS_Dir = *LCD_Data_BUS_Dir|0xff00;
*LCD_Data_BUS_Attrib = *LCD_Data_BUS_Attrib|0xff00;
*LCD_Data_BUS_Out = *LCD_Data_BUS_Out|0xff00;
#endif
#if LCD_Data_BUS_Byte==0
*LCD_Data_BUS_Dir = *LCD_Data_BUS_Dir|0x00ff;
*LCD_Data_BUS_Attrib = *LCD_Data_BUS_Attrib|0x00ff;
*LCD_Data_BUS_Out = *LCD_Data_BUS_Out|0x00ff;
#endif
*LCD_CMD_Dir = *LCD_CMD_Dir|(LCD_CS+LCD_WR+LCD_RD+LCD_RS+LCD_RE);
*LCD_CMD_Attrib = *LCD_CMD_Attrib|(LCD_CS+LCD_WR+LCD_RD+LCD_RS+LCD_RE);
*LCD_CMD_Buffer = *LCD_CMD_Buffer|(LCD_CS+LCD_WR+LCD_RD+LCD_RS+LCD_RE);
}
//========================================================================
// 函数: void Write_Dot_LCD(int x,int y,unsigned int i)
// 描述: 在LCD的真实坐标系上的X、Y点绘制填充色为i的点
// 参数: x X轴坐标
// y Y轴坐标
// i 要填充的点的颜色
// 返回: 无
// 备注:
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void Write_Dot_LCD(int x,int y,unsigned int i)
{
LCD_RegWrite(0x20,x);
LCD_RegWrite(0x21,y);
LCD_DataWrite(i);
}
//========================================================================
// 函数: void Clear_Dot_LCD(int x,int y)
// 描述: 清除在LCD的真实坐标系上的X、Y点
// 参数: x X轴坐标
// y Y轴坐标
// 返回: 无
// 备注: 暂不使用该函数
// 版本:
// 2006/10/15 First version
//========================================================================
void Clear_Dot_LCD(int x,int y)
{
//可根据自己的需要填写代码
}
//========================================================================
// 函数: unsigned int Get_Dot_LCD(int x,int y)
// 描述: 获取在LCD的真实坐标系上的X、Y点上的当前填充色数据
// 参数: x X轴坐标
// y Y轴坐标
// 返回: 该点的颜色
// 备注: 暂不使用该函数
// 版本:
// 2006/10/15 First version
//========================================================================
unsigned int Get_Dot_LCD(int x,int y)
{
unsigned int Read_Data;
//可根据自己的需要填写代码
LCD_RegWrite(0x20,x);
LCD_RegWrite(0x21,y);
Read_Data = LCD_DataRead(); //
return Read_Data;
}
//========================================================================
// 函数: void Set_Dot_Addr_LCD(int x,int y)
// 描述: 设置在LCD的真实坐标系上的X、Y点对应的RAM地址
// 参数: x X轴坐标
// y Y轴坐标
// 返回: 无
// 备注: 仅设置当前操作地址,为后面的连续操作作好准备
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void Set_Dot_Addr_LCD(int x,int y)
{
LCD_RegWrite(0x20,x);
LCD_RegWrite(0x21,y);
LCD_Reg22();
}
//========================================================================
// 函数: void LCD_Fill(unsigned int Data)
// 描述: 会屏填充以Data的数据至各点中
// 参数: Data 要填充的颜色数据
// 返回: 无
// 备注: 仅在LCD初始化程序当中调用
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void LCD_Fill(unsigned int Data)
{
unsigned int i,j;
unsigned int uiTemp;
uiTemp = (unsigned int)Dis_Y_MAX;
Set_Dot_Addr_LCD(0,0);
for(i=0;i<=uiTemp;i++) //往LCD中填充初始化的显示数据
{
for(j=0;j<=Dis_X_MAX;j++)
{
Fill_Dot_LCD(Data);
}
}
}
//========================================================================
// 函数: void LCD_Fill_s(unsigned int Number,unsigned int Color)
// 描述: 连续填充以Color色调的Number个点
// 参数: Number 填充的数量 Color 像素点的颜色
// 返回:
// 备注: 该函数可能会使用到
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
void LCD_Fill_s(unsigned int Number,unsigned int Color)
{
// LCD_DataWrite(Color);
// Number--;
while(Number!=0)
{
Fill_Dot_LCD(Color); //
Number--;
}
}
//========================================================================
// 函数: void LCD_Init(void)
// 描述: LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果
// 用户想了解,建议查看DataSheet当中各个寄存器的意义
// 参数: 无
// 返回: 无
// 备注:
// 版本:
// 2006/10/15 First version
// 2007/01/09 V1.2
//========================================================================
//延时程序
void TimeDelay(int Time)
{
int i;
while(Time > 0)
{
for(i = 0;i < 800;i++)
{
__asm("nop");__asm("nop");__asm("nop");__asm("nop");__asm("nop");
}
Time --;
}
}
void LCD_Init(void)
{
//LCD驱动所使用到的端口的初始化
LCD_PortInit();
*LCD_CMD_Buffer = *LCD_CMD_Buffer&(~LCD_RE);
TimeDelay(50);
*LCD_CMD_Buffer = *LCD_CMD_Buffer|LCD_RE;
TimeDelay(5);
// LCD_RegWrite(0x0000,0x0000);
LCD_RegWrite(0x0001,0x0100); //Driver Output Contral Register
LCD_RegWrite(0x0002,0x0700); //0x0701 //LCD Driving Waveform Contral
LCD_RegWrite(0x0003,0x1030); //Entry Mode设置
//指针从左至右自上而下的自动增模式
//Normal Mode(Window Mode disable)
//RGB格式
//16位数据2次传输的8总线设置
LCD_RegWrite(0x0004,0x0000); //Scalling Control register
LCD_RegWrite(0x0008,0x0207); //Display Control 2
LCD_RegWrite(0x0009,0x0000); //Display Control 3
LCD_RegWrite(0x000A,0x0000); //Frame Cycle Control
LCD_RegWrite(0x000C,0x0000); //External Display Interface Control 1
LCD_RegWrite(0x000D,0x0000); //Frame Maker Position
LCD_RegWrite(0x000F,0x0000); //External Display Interface Control 2
TimeDelay(100);
LCD_RegWrite(0x0007,0x0101); //Display Control
TimeDelay(100);
LCD_RegWrite(0x0010,0x16B0); //0x14B0 //Power Control 1
LCD_RegWrite(0x0011,0x0001); //0x0007 //Power Control 2
LCD_RegWrite(0x0017,0x0001); //0x0000 //Power Control 3
LCD_RegWrite(0x0012,0x0138); //0x013B //Power Control 4
LCD_RegWrite(0x0013,0x0800); //0x0800 //Power Control 5
LCD_RegWrite(0x0029,0x0009); //NVM read data 2
LCD_RegWrite(0x002a,0x0009); //NVM read data 3
LCD_RegWrite(0x00a4,0x0000);
/*
LCD_RegWrite(0x0030,0x0002); //Gamma setting
LCD_RegWrite(0x0031,0x0720); //Gamma setting
LCD_RegWrite(0x0032,0x0924); //Gamma setting
LCD_RegWrite(0x0033,0x3F10); //Gamma setting
LCD_RegWrite(0x0034,0x3D06); //Gamma setting
LCD_RegWrite(0x0035,0x1003); //Gamma setting
LCD_RegWrite(0x0036,0x0507); //Gamma setting
LCD_RegWrite(0x0037,0x0411); //Gamma setting
LCD_RegWrite(0x0038,0x0005); //Gamma setting
LCD_RegWrite(0x0039,0x0003); //Gamma setting
LCD_RegWrite(0x003A,0x0805); //Gamma setting
LCD_RegWrite(0x003B,0x0B02); //Gamma setting
LCD_RegWrite(0x003C,0x040F); //Gamma setting
LCD_RegWrite(0x003D,0x050C); //Gamma setting
LCD_RegWrite(0x003E,0x0103); //Gamma setting
LCD_RegWrite(0x003F,0x0401); //Gamma setting
*/
LCD_RegWrite(0x0050,0x0000); //设置操作窗口的X轴开始列
LCD_RegWrite(0x0051,0x00EF); //设置操作窗口的X轴结束列
LCD_RegWrite(0x0052,0x0000); //设置操作窗口的Y轴开始行
LCD_RegWrite(0x0053,0x013F); //设置操作窗口的Y轴结束行
LCD_RegWrite(0x0060,0x2700); //Driver Output Control
//设置屏幕的点数以及扫描的起始行
LCD_RegWrite(0x0061,0x0001); //Driver Output Control
LCD_RegWrite(0x006A,0x0000); //Vertical Scroll Control
LCD_RegWrite(0x0080,0x0000); //Display Position – Partial Display 1
LCD_RegWrite(0x0081,0x0000); //RAM Address Start – Partial Display 1
LCD_RegWrite(0x0082,0x0000); //RAM address End - Partial Display 1
LCD_RegWrite(0x0083,0x0000); //Display Position – Partial Display 2
LCD_RegWrite(0x0084,0x0000); //RAM Address Start – Partial Display 2
LCD_RegWrite(0x0085,0x0000); //RAM address End – Partail Display2
LCD_RegWrite(0x0090,0x0013); //Frame Cycle Control
LCD_RegWrite(0x0092,0x0000); //Panel Interface Control 2
LCD_RegWrite(0x0093,0x0003); //Panel Interface control 3
LCD_RegWrite(0x0095,0x0110); //Frame Cycle Control
// LCD_RegWrite(0x0097,0x0000);
// LCD_RegWrite(0x0098,0x0000);
// LCD_RegWrite(0x00F0,0x5408);
// LCD_RegWrite(0x00F4,0x0077);
// LCD_RegWrite(0x00F3,0x000c);
LCD_RegWrite(0x0007,0x0173);
LCD_Fill(LCD_INITIAL_COLOR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -