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

📄 lcddrive.c

📁 LCM240320底层驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************************
* 文件名:LCDDRIVE320240.C
* 功能:图形液晶320*2408驱动(型号为SED1330)。32K显示存,0000H-7FFFH地址。显示是横向字节,高位
*      在前。
* 说明:图形液晶采用SED1330为LCD控制芯片,内带负压产生器,单5伏供电,并行接口(使用LPC2210驱动)。
* 硬件连接: D0--D7  <===>  D0--D7
*           /WR     <===>  nWE
*           /RD     <===>  nOE
*           /CE     <===>  nCS3_1
*           C/D     <===>  A1
*
*           /RST    <===>  VCC
****************************************************************************************/
#include "config.h"

uint8  	gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8];				// 声明显示缓冲区

/* 定义LCM地址 */
#define  TG320240_COM    	(*((volatile unsigned short *) 0x83000002))
#define  TG320240_DAT    	(*((volatile unsigned short *) 0x83000000))


/***********************************************************************
* 名称:LCD_WriteCommand()
* 功能:写命令子程序。(发送命令前,不检查液晶模块的状态)
* 入口参数:command  	要写入LCM的命令字
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
#define   LCD_WriteCommand(command)  TG320240_COM = (uint16)command


/***********************************************************************
* 名称:LCD_WriteData()
* 功能:写数据子程序。(发送数据前,不检查液晶模块的状态)
* 入口参数:dat  	要写入LCM的数据
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
#define  LCD_WriteData(dat)  TG320240_DAT = (uint16)dat



/***********************************************************************
* 名称:LCD_ReadState()
* 功能:读取忙状态字子程序。
* 入口参数:无
* 出口参数:返回值即为读出的状态字
* 说明:函数会设置LCM数据总线为输入方式
***********************************************************************/
#define  LCD_ReadState()	TG320240_DAT


/***********************************************************************
* 名称:LCD_ReadData()
* 功能:读取参数及显示数据子程序。
* 入口参数:无
* 出口参数:返回值即为读出的数据
* 说明:函数会设置LCM数据总线为输入方式
***********************************************************************/
#define  LCD_ReadData()		TG320240_COM

#define  LCD_SYS_SET        0x40                                                 /* 初始化,设置显示窗口 */
uint8 const ParaSysTable8[]= {0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};          // P1-P8参数

#define  LCD_SCROLL         0x44                                                 //设置显示区域,卷动
uint8 const ParaScrTableA[]={0x00,0x00,0xF0,0x00,0x40,0xF0,0x00,0x80,0x00,0x00}; /* P1-P10参数 */

#define  LCD_SLEEP_IN		0x53						/* 空闲状态设置 */
#define  LCD_DISP_ON		0x59						/* 显示开:后接参数P1,规定各显区及光标的显示方式和闪烁启用/禁用 */
#define  LCD_DISP_OFF		0x58						/* 显示关:后接参数P1,规定各显区及光标的显示方式和闪烁启用/禁用 */
#define  LCD_OYLAY		    0x5B						/* 设置画面重叠显示的合成方式及显示一、三区的显示属性,后带一参数P1 */
#define  LCD_HDOTSET		0x5A						/* 设置以点为单位的显示画面水平移动量 */
#define  LCD_CGR_POS		0x5C						/* CGRAM偏置地址设置(可以增加自已的符号),后带参数P1、P2 */
#define  LCD_CSR_FORM		0x5D						/* 光标显示方式及形状设置,后跟2个参数P1、P2 */
#define  LCD_CSRDIR_R		0x4C						/* 光标地址指针移动方向,向右移动 */
#define  LCD_CSRDIR_L		0x4D						/* 光标地址指针移动方向,向左移动 */
#define  LCD_CSRDIR_U		0x4E						/* 光标地址指针移动方向,向上移动 */
#define  LCD_CSRDIR_D		0x4F						/* 光标地址指针移动方向,向下移动 */
#define  LCD_CSR_W		    0x46						/* 写当前光标地址,MUP使用两次读数操作 */
#define  LCD_CSR_R		    0x47						/* 读当前光标地址,后带两参数CSRL、CSRH */
#define  LCD_MWRITTE    	0x42						/* 数据写入显示缓冲区 */
#define  LCD_MREAD       	0x43						/* 从显示缓冲区读出数据 */


/***********************************************************************
* 名称:LCD_TestStaBit01()
* 功能:判断读写指令和读写数据是否允许。
* 入口参数:无
* 出口参数:返回0表示禁止,否则表示允许
***********************************************************************/   
uint8  LCD_TestStaBit01(void)
{  uint16 i;   
   for(i=2000; i>0; i--)
   { 
     if( (LCD_ReadState()&0x40)==0x40 ) break;      
   }   
   return(i);
}

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

   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat1);				          // 发送数据1
   
   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat2);				          // 发送数据2
    
   return(1);
}

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

   if( LCD_TestStaBit01()==0 ) return(0);
   LCD_WriteData(dat1);				         // 发送数据1
   
   return(1);
}

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


/* 以下为LCM的用户接口层,主要负责解释用户命令,并发送到LCM,为用户编程提供接口 */


/***********************************************************************
* 名称:LCD_Initialize()
* 功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0x0000,。
* 入口参数:无
* 出口参数:无
* 说明:函数会设置LCM数据总线为输出方式
***********************************************************************/
void LCD_Initialize(void)
{
    uint8 i;
    LCD_WriteTCommand1(LCD_SYS_SET);        //设置显示窗口
    for(i=0;i<8;i++) 
	{
        LCD_WriteTData1(ParaSysTable8[i]);       
    }
	
    LCD_WriteTCommand1(LCD_SCROLL);           //设置显示区域,卷动
    for (i=0;i<10;i++)
    {
        LCD_WriteTData1(ParaScrTableA[i]);        
    }
   
     LCD_WriteTCommand2(LCD_HDOTSET,0x00);           //设置点单元卷动位置,0-不移动
     
     LCD_WriteTCommand2(LCD_OYLAY,0x1C);             //设置合成方式,一区,三区文本方式,或逻辑
     
     LCD_WriteTCommand2(LCD_DISP_ON,0x04);            //开显示,1区开,2、3、4区关,关光标
     
}


/***********************************************************************
* 名称:LCD_FillAll()
* 功能:LCD填充。以图形方式进行填充,起始地址为0x0000。
* 入口参数:dat		要填充的数据
* 出口参数:无
***********************************************************************/
void  LCD_FillAll(uint8 dat)
{
    uint32 i;
    LCD_WriteTCommand1(LCD_CSRDIR_R);           //光标右移   
	LCD_WriteTCommand3(LCD_CSR_W,0x00,0x00);              //设置光标起始地址0000H
    LCD_WriteTCommand1(LCD_MWRITTE);            //向显示缓冲区写数据
    for(i=0;i<240*40;i++)
    {
       LCD_WriteTData1(dat);
        
    }
}


/****************************************************************************
* 名称:LCD_WriteoneHZ

⌨️ 快捷键说明

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