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

📄 e0f343a920c1001d115eb61adb267a55

📁 基于FREERtos和LPC2468的程序。里面实现了串口通信
💻
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************************
* 文件名:LCDDRIVE.C
* 功能:图形液晶240*128驱动(型号为SMG240128A)。32K显示存,0000H-7FFFH地址。显示是横向字节,高位
*      在前。
* 说明:图形液晶采用T6963C为LCD控制芯片,内带负压产生器,单5伏供电,并行接口(使用LPC2210驱动)。
* 硬件连接: D0--D7  <===>  D0--D7
*           /WR     <===>  nWE
*           /RD     <===>  nOE
*           /CE     <===>  nCS2_1
*           C/D     <===>  A1
*
*           /RST    <===>  VCC
****************************************************************************************/
#include "../gui/config.h"
#include "lcddrive.h"
#include "../gui/FONT_MACRO.H"
#define DISRAM_SIZE 0X7FFF  //设置显示ram的大小
#define TXTSTART 0x0000      //设置文本区的起始地址
#define GRSTART 0x6800       //设置图形区的起始地址
#define CGRAMSTART 0x7800  //设置CGRAM的起始地址

uint8  	gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8];				// 声明显示缓冲区
const uint8 My_DispFlag[][8]=
{
		//	'1'
	{
	   ________,
	   ___X____,
	   __XX____,
	   ___X____,
	   ___X____,
	   ___X____,
	   ___X____,
	   __XXX___,
	   }
		//'A'
	,{
	  ________,
	  __XXX___,
	  _X___X__,
	  _X___X__,
	  _XXXXX__,
	  _X___X__,
	  _X___X__,
	  _X___X__,
	  }
};
const uint8 DownFlag[12]=
{
	{
	  ________,
	  ________,
	  ___XX___,
	  ___XX___,
	  ___XX___,
	  ___XX___,
	  ___XX___,
	  X__XX__X,
	  _X_XX_X_,
	  __XXXX__,
	  ___XX___,
	  ________,
	  }
};
void LCD_BackLight(int onoff)
{
	if(onoff)
		IOSET1=0x00000004;
	else
		IOCLR1=0x00000004;
}
 
/******************************************************************************
** Function name:		mdelay
**
** Descriptions:		
**
** parameters:			delay length
** Returned value:		None
** 
*****************************************************************************
void mdelay( int delay )
{
  int  i;
  for( i = 0; i < delay * 40; i++);
  return;
}
*/
/***********************************************************************
* 名称:LCD_TestStaBit01()
* 功能:判断读写指令和读写数据是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/

uint8  LCD_TestStaBit01(void)
{ 
   uint8 i;

   for(i=100; i>0; i--)
   {  if( (LCD_ReadState()&0x03)==0x03 ) break;
   }
   //mdelay(15);
   return(i);
  
  // mdelay(10); return 1;
}


/***********************************************************************
* 名称:LCD_TestStaBit3()
* 功能:数据自动写状态是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/
uint8  LCD_TestStaBit3(void);
uint8  LCD_TestStaBit3(void)
{  

	uint8 i;

   for(i=100; i>0; i--)
   {  if( (LCD_ReadState()&0x08)==0x08 ) break;
   }
   //mdelay(15);
   return(i);
}


/***********************************************************************
* 名称:LCD_WriteTCommand1()
* 功能:写无参数命令子程序。会先判断LCM状态字。
* 入口参数:command  		要写入LCM的命令字
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
uint8  LCD_WriteTCommand1(uint8 command);
uint8  LCD_WriteTCommand1(uint8 command)
{  if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteCommand(command);		// 发送命令字
   
   return(1);
}


/***********************************************************************
* 名称:LCD_WriteTCommand3()
* 功能:写双参数命令子程序。会先判断LCM状态字。
* 入口参数:command  	要写入LCM的命令字
*          dat1		参数1
*          dat2		参数2
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送两字节参数据数据,再发送命令字
***********************************************************************/
uint8  LCD_WriteTCommand3(uint8 command, uint8 dat1, uint8 dat2);
uint8  LCD_WriteTCommand3(uint8 command, uint8 dat1, uint8 dat2)
{  
	if( LCD_TestStaBit01()==0 ) return(0);
    LCD_WriteData(dat1);				// 发送数据1
   
    if( LCD_TestStaBit01()==0 ) return(0);
    LCD_WriteData(dat2);				// 发送数据2
   
    if( LCD_TestStaBit01()==0 ) return(0);
    LCD_WriteCommand(command);		// 发送命令字
   
    return(1);
}


/***********************************************************************
* 名称:LCD_WriteTCommand2()
* 功能:写单参数命令子程序。会先判断LCM状态字。
* 入口参数:command  	要写入LCM的命令字
*          dat1		参数1
* 出口参数:操作出错返回0,否则返回1
* 说明:先发送参数据数据,再发送命令字
***********************************************************************/
uint8  LCD_WriteTCommand2(uint8 command, uint8 dat1);
uint8  LCD_WriteTCommand2(uint8 command, uint8 dat1)
{  if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat1);				// 发送数据1
   
   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteCommand(command);		// 发送命令字
   
   return(1);
}


/***********************************************************************
* 名称:LCD_WriteTData1()
* 功能:写1字节数据子程序。会先判断状态字。
* 入口参数:dat  		要写入LCM的数据
* 出口参数:操作出错返回0,否则返回1
***********************************************************************/
uint8  LCD_WriteTData1(uint8 dat);
uint8  LCD_WriteTData1(uint8 dat)
{  
	if( LCD_TestStaBit3()==0 ) return(0);
   LCD_WriteData(dat);				// 发送命令字
   
   return(1);
}


/* 以下为LCM的用户接口层,主要负责解释用户命令,并发送到LCM,为用户编程提供接口 */
void LCD_Clear(void);
void LCD_Clear(void)
{
   uint32  i;

   LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00);			// 置地址指针
   LCD_WriteTCommand1(LCD_AUT_WR);						// 自动写
   for(i=0;i<128*16;i++)
   {  
	   LCD_WriteTData1(0x00);								// 写数据
   }
   LCD_WriteTCommand1(LCD_AUT_OVR);						// 自动写结束
   LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00);			// 重置地址指针
  
}
/***********************************************************************
* 名称:LCD_Initialize()
* 功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0x0000,。
* 入口参数:无
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/

void  LCD_Initialize(void)
{  
   IODIR0 |=0x00000004;									//define IO stat for Backlight control
   
   LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00);			// 设置文本方式RAM起始地址
   LCD_WriteTCommand3(LCD_TXT_WID, 16, 0x00);			// 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00);			// 设置图形方式RAM起始地址
   LCD_WriteTCommand3(LCD_GRH_WID, 16, 0x00);			// 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand1(LCD_MOD_OR);						// 设置显示方式为"或"
   LCD_WriteTCommand1(LCD_DIS_SW|0x08);					// 设置纯图形显示模式
  //LCD_WriteTCommand1(0x9c);
   LCD_Clear();
}

/*
void  LCD_Initialize(void)
{  LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00);			// 设置文本方式RAM起始地址
   LCD_WriteTCommand3(LCD_TXT_WID, 16, 0x00);			// 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00);			// 设置图形方式RAM起始地址
   LCD_WriteTCommand3(LCD_GRH_WID, 16, 0x00);			// 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
   LCD_WriteTCommand1(LCD_MOD_OR);						// 设置显示方式为"或"
   LCD_WriteTCommand1(LCD_DIS_SW|0x08);					// 设置纯图形显示模式
}
*/
/***********************************************************************
* 名称:LCD_FillAll()
* 功能:LCD填充。以图形方式进行填充,起始地址为0x0000。
* 入口参数:dat		要填充的数据
* 出口参数:无
***********************************************************************/

void  LCD_FillAll(uint8 dat)
{  
	uint32  i;

   LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00);			// 置地址指针
   LCD_WriteTCommand1(LCD_AUT_WR);						// 自动写
   for(i=0;i<128*16;i++)
   {  LCD_WriteTData1(dat);								// 写数据
   }
   LCD_WriteTCommand1(LCD_AUT_OVR);						// 自动写结束
   LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00);			// 重置地址指针
}
/***********************************************************************
* 名称:LCD_FillDat()   //填充一个有效的区域范围
* 功能:LCD填充。以图形方式进行填充,起始地址为x,y。填充范围w宽,h高.
* 入口参数:dat		要填充的数据

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -