📄 lcddrive.c
字号:
/****************************************************************************************
* 文件名:LCDDRIVE.C
* 功能:LM12864液晶模块驱动。驱动芯片为HD61202
****************************************************************************************/
#include "config.h"
/*显示缓冲区*/
xdata unsigned char DispBuff[GUI_LCM_YMAX/8][GUI_LCM_XMAX];
//================== address define =====================
xdata unsigned char DataPortLeft _at_ 0xc000 ;
xdata unsigned char DataPortRight _at_ 0xa000 ;
xdata unsigned char CommandPortLeft _at_ 0x4000 ;
xdata unsigned char CommandPortRight _at_ 0x2000 ;
//=================== 硬件接口函数 =====================
void WaitBusy( void )
{
unsigned char wait=0;
for(wait=0;wait<1;wait++);
return;
}
void SetCommand(unsigned char command,unsigned char what)
{
WaitBusy();
switch(what)
{
case 0:
CommandPortLeft=command;
break;
case 1:
CommandPortRight=command;
break;
case 2:
CommandPortLeft=command;
CommandPortRight=command;
break;
}
return;
}
void SetData(unsigned char inData,unsigned char what)
{
WaitBusy();
switch(what)
{
case 0:
DataPortLeft=inData;
break;
case 1:
DataPortRight=inData;
break;
case 2:
DataPortLeft=inData;
DataPortRight=inData;
break;
}
return;
}
void ClearScreen(unsigned char mode)
/*
功能:清屏
mode:(0)白屏,(1)黑屏
*/
{
unsigned char x=0,y=0,i=0;
for(i=0;i<2;i++)
{
for(x=0;x<8;x++)
{
SetCommand(0xb8+x,i);
SetCommand(0x40,i);
for(y=0;y<64;y++)
{
if(mode)SetData(0xff,i);
else SetData(0x00,i);
}
}
}
return;
}
void LCD_Begin(void)
/*
功能:液晶显示器件初始化
*/
{
WaitBusy();
SetCommand(0x3f,2);
SetCommand(0xc0,2);
return;
}
//====================================================
/****************************************************************************
* 名称:GUI_ReDisp()
* 功能:刷新屏幕显示。
* 入口参数:无
* 出口参数:无
* 说明:将缓冲区中的数据写入LCD。
****************************************************************************/
void GUI_ReDisp(void)
{
unsigned char x=0,y=0,i=0,indata;
for(i=0;i<2;i++)
{
for(x=0;x<GUI_LCM_YMAX/8;x++)
{
SetCommand(0xb8+x,i);
SetCommand(0x40,i);
for(y=0;y<64;y++)
{
indata=DispBuff[x][y+(i*64)];
SetData(indata,i);
}
}
}
return;
}
/****************************************************************************
* 名称:GUI_Initialize()
* 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_Initialize(void)
{
LCD_Begin();
return;
}
/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat 填充的数据
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_FillSCR(TCOLOR dat)
{
ClearScreen(dat);
return;
}
/****************************************************************************
* 名称:GUI_ClearSCR()
* 功能:清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void GUI_ClearSCR(void)
{
ClearScreen(0);
return;
}
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* color 显示颜色
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
****************************************************************************/
uint8 GUI_Point(uint8 x, uint8 y, TCOLOR color)
{
unsigned char BitData=0;
/* 参数过滤 */
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
/* 刷新显示*/
BitData=0x01<<(y-(unsigned char)((y/8)*8));
if(color)BitData=BitData|DispBuff[y/8][x];
else BitData=(~BitData)&DispBuff[y/8][x];
DispBuff[y/8][x]=BitData;
return(1);
}
/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定位置点的颜色数据。
* 入口参数:x 指定点所在列的位置
* y 指定点所在行的位置
* 出口参数:返回值即是读出值(RRRRRGGGGGGBBBBB)。
****************************************************************************/
uint8 GUI_ReadPoint(uint8 x, uint8 y, TCOLOR *ret)
{
unsigned char inData=0;
/* 参数过滤 */
if(x>=GUI_LCM_XMAX) return(0);
if(y>=GUI_LCM_YMAX) return(0);
/* 读取数据 */
inData=DispBuff[y/8][x];
inData=(inData>>(y-(unsigned char)((y/8)*8)))&0x01;
*ret=inData;
return(1);
}
/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0 水平线起点所在列的位置
* y0 水平线起点所在行的位置
* x1 水平线终点所在列的位置
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_HLine(uint8 x0, uint8 y0, uint8 x1, TCOLOR color)
{
uint8 i;
if(x0>x1) // 对x0、x1大小进行排列,以便画图
{ i = x1;
x1 = x0;
x0 = i;
}
for(i=x0;i<=x1;i++)GUI_Point(i, y0, color);
return;
}
/****************************************************************************
* 名称:GUI_RLine()
* 功能:画垂直线。
* 入口参数: x0 垂直线起点所在列的位置
* y0 垂直线起点所在行的位置
* y1 垂直线终点所在行的位置
* color 显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void GUI_RLine(uint8 x0, uint8 y0, uint8 y1, TCOLOR color)
{
uint8 i;
if(y0>y1) // 对y0、y1大小进行排列,以便画图
{ i= y1;
y1 = y0;
y0 = i;
}
for(i=y0;i<=y1;i++)GUI_Point(x0,i,color);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -