⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcddrive.c

📁 ZLG/GUI HD61202或KS0108驱动
💻 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 + -