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

📄 lcd.c

📁 str71arm平台下的sed1335驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
/*************************************************************************
版权所有:优特电力科技股份有限公司  
版本号:  1.00  
文件名:  LCD.C 
生成日期:2002.10.22 
作者:    YSH
功能说明:本模块主要是用于LCD液晶驱动显示模块 
与所属工程文件的关系:
其它说明:USE LANGUAGE C       
修改记录:无
记录1:   无  
修改者:  无 
修改日期:无
修改内容:无
修改原因:无
*************************************************************************/

#define __LCD_EXT
#include "includes.h"


#define APPEN_NEWFONT_START	0x145710        //追加字库的起始地址
#define Logo1	    APPEN_NEWFONT_START
#define Logo2		Logo1     + 2560        //2560为Logo1的字节数
#define Logo3		Logo2     + 640
#define Logo4		Logo3     + 640
#define LQI5		Logo4     + 640 
#define LQI4		LQI5      + 32
#define LQI3		LQI4      + 32
#define LQI2		LQI3      + 32
#define LQI1		LQI2      + 32
#define LQI0		LQI1      + 32
#define play        LQI0      + 32
#define pause       play      + 32
#define stop        pause     + 32
#define play_new    stop      + 32
#define pause_new   play_new  + 32
#define stop_new    pause_new + 32
#define charge1     stop_new  + 32
#define charge2     charge1   + 32
#define EnterKey    charge2   + 32
#define BackKey     EnterKey  + 32
#define jun         BackKey   + 32
#define ding        jun       + 32
#define BatteryStatus  ding          + 32
#define LineChar       BatteryStatus + 52

//********追加字库起始地址为 0x145710 ,字库最终flash存储地址为 0x146b0f ***********//

#define BatteryAddress 0x146b50     //增加的电池新图标flash起始地址,最终的字库结束地址为 0x146dbf
#define ArrowAddress   0x146dc0     //增加了左右箭头图标,这为该图标的起始地址
#define Icon_Address   0x146e80     //增加了CDMA、UT-NET、IRDA左上角图标
#define XBYTE ((volatile u8 *)0x0)
#define	WR_C15E05	    0x66000000  //写控制命令地址 A0=0
#define	WR_D15E05	    0x66000001	//写显示数据及指令参数地址 A0=1;

#define DISPON		    0xaf		//开显示命令设置(1)
#define	DISPOFF		    0xae		//关显示命令设置

#define DISPOFFMODEH	0xbf		//关显示的电平接VC命令设置(2)
#define	DISPOFFMODEL	0xbe		//关显示的电平接VSS命令设置

#define DISPNORMAL	    0xa6		//正常显示命令设置(3)
#define DISPREVERSE	    0xa7		//反向显示命令设置

#define DISPALLNOR	    0xa4		//正常显示数据点命令设置(4)
#define DISPALLON	    0xa5		//点亮所有点命令设置

#define SETCOMSTATUSNOR	0xc4		//从COM0到COM131命令设置(5)
#define SETCOMSTATUSREV	0xc5		//从COM131到COM0命令设置

#define SETDISPLINE	    0x8a		//显示起始行命令设置(6)
#define DISPLINEDATA1	0x00		//起始行为0行数据参数,A0 = 1
#define DISPLINEDATA2	0x00		//起始行为0行数据参数,A0 = 1

#define SETDISPPAGE	    0xb1		//显示起始页命令设置(7)
#define DISPPAGEDATA	0x00		//起始页为0行数据参数,A0 = 1				

#define SETDISPCOL	    0x13		//显示起始列命令设置(8)
#define DISPCOLDATA	    0x00		//起始列为0行数据参数,A0 = 1

#define DISPDATAWRITE	0x1d		//显示数据写入命令设置(9)

#define DISPDATAREAD	0x1c		//显示数据读出命令设置(10)

#define SETCOLDIR	    0x84		//从列方向自动增加命令设置(11)
#define SETPAGEDIR	    0x85		//从页方向自动增加命令设置

#define SETCOLDIRNOR	0xa0		//列方向正向自动增加命令设置(12)
#define SETCOLDIRREV	0xa1		//列方向反向自动增加命令设置

#define SETN_LINEREV	0x36		//n-line 反向驱动命令设置(13)
#define N_LINECOUNT	    0x06		//DEMO程序,A0 = 1

#define SETN_LINEON	    0xe5		//开启n-line 反向驱动命令设置(14)
#define SETN_LINEOFF	0xe4		//关闭n-line 反向驱动命令设置

#define SETDISPMODE	    0x66		//显示模式命令设置(4级灰度或Bin)(15)
#define DISPMODEGRAY	0x00		//4级灰度显示参数,A0 = 1
#define DISPMODEBIN	    0x01		//Bin显示参数,A0 = 1

#define SETGRAYLEVEL	0x39		//灰度等级命令设置(16)
#define GRAYLEVELDATA	0x66		//灰度等级数据选择,A0 = 1

#define SETAREASCROLL	0x40		//屏幕局部滚动设置(17)
#define SCROLLMODEDATA	0x01		//向上滚动
#define SCROLLSTARTLINE	0x00		//滚动起始行为0行数据参数,A0 = 1
#define SCROLLENDLINE1	0x00		//滚动结束行为0行数据参数,A0 = 1
#define SCROLLENDLINE2	0x00		//滚动结束行为0行数据参数,A0 = 1

#define SETDUTY		    0x6d		//duty模式命令设置(18)
#define DUTYDATA	    0x20		//1/128 duty模式,A0 = 1
#define DUTYSTART	    0x01		//!!从COM1开始,A0 = 1

#define DISPDATARDWR	0xe0		//显示数据的读改写命令设置(21)
#define DISPDATAEND	    0xee		//显示数据的读改写结束命令设置(22)

#define SETOSCOFF	    0xaa		//关闭晶振命令设置(23)
#define SETOSCON	    0xab		//开启晶振命令设置

#define SETOSCFREQ	    0x5f		//晶振频率命令设置(24)
#define OSCFREQDATA	    0x0b		//晶振频率=76hz,A0 = 1

#define SETPOWERCTRL	0x25		//电源控制命令设置(25)
#define POWERCTRLVC	    0x1e		//电源上电关闭LCDV, A0 = 1
#define POWERCTRLLCDV	0x1f		//延时100ms后开启LCDV, A0 = 1

#define SETVCVOLT	    0x2b		//LCD电压Vc选择命令设置(27)
#define VCVOLTDATA	    0x03		//LCD电压Vc选择值3.54-7.0v,A0 = 1

#define SETCONTRAST	    0x81		//对比度命令设置 (28)
#define CONTRASTSTATE	0x33		//对比度数值在0-127,A0 =1

#define SETDISCHAROFF	0xea		//关闭放电命令设置(29)
#define SETDISCHARON	0xeb		//开启放电命令设置

#define POWERSAVEOFF	0xa8		//关闭节电模式命令设置(30)
#define POWERSAVEON	    0xa9		//开启节电模式命令设置	

#define SETNOP		    0xe3		//空操作命令设置(34)

#define CSIOP  					0xa0000
#define PSD_PORTE_OUT_DATA		CSIOP+0x34

//从中间空白区(34624+OFFSETFONT)开始,依次留2560个字节给完整的logo
//然后从(37184+OFFSETFONT)开始存放15幅局部图片,每幅占104个字节大小
#define PICTUREDATA OFFSETFONT+37184L

//系统要求留出的空间,即字库从0x100000开始
#define OFFSETFONT	0x100000

//写LCD数据参数
void S1D15E05_Data(u8 data);

//写LCD命令参数  
void S1D15E05_Command(u8 command);

//LCD液晶显示坐标定位  
void LcdGotoxy(u8 Regx,u8 Regy);


//存放LCD的160*128点阵数据,共2560字节的SRAM缓冲区
static u8 Temp_LcdBuffer[2560];        

//存放LCD的160*128点阵数据,在Gray_Scale状态下,共2560*2字节的SRAM缓冲区
static u8 Temp_LcdBuffer_Gray[5120];       

//从0x8a00地址开始,存放从DataFlash中取出的每个字符的点阵数据公共区
static u8 DispDotBuf[50] ;

//从0x8a80地址开始,存放DispBCDBuf中待显示的BCD数字字符串
static  char DispBCDBuf[20] ;

//存放动画数据的缓冲区
static u8 PicBuf[2560] ;

//光标闪动的标记
static u8 CursorBit;


//记录显示完字符串后的坐标值
static u8 PositionX,PositionY;


//整型数据的结构
typedef union
{
	u8 DataAdd_D[2];	//字节顺序由低到高
	u16 DataAdd_I;		//整型数据,如为0x5678
}Un_DataAdd_I;

static Un_DataAdd_I GrayVal;


/**************************************************************************
函数名称: void S1D15E05_Data(u8 data)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:写LCD数据参数      
输入参数:LCD数据参数,ttt
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void S1D15E05_Data(u8 data)
{
	XBYTE[WR_D15E05] = data;
}

/**************************************************************************
函数名称: void S1D15E05_Command(u8 command)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:写LCD命令参数     
输入参数:LCD命令参数,command
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void S1D15E05_Command(u8 command)
{
	XBYTE[WR_C15E05] = command;
 
}

/**************************************************************************
函数名称: void LcdLuminance(u8 LcdLum)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:LCD对比度设置      
输入参数:LcdLum为液晶对比度等级,取值范围在0-7,共8个等级
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdLuminance(u8 LcdLum)
{
	S1D15E05_Command(SETCONTRAST);
	S1D15E05_Data(0x2f+2*LcdLum);   //对比度值在0x2f-0x3f
}

/**************************************************************************
函数名称: void LcdInit(void)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:初始化液晶模块,控制IC是S1D15E05      
输入参数:无
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdInit(void)
{
	u8 TempVal;
	S1D15E05_Command(SETCOLDIRNOR);		//列方向正向自动增加命令设置(12)
	delay_ms(5);
	S1D15E05_Command(SETCOMSTATUSNOR);	//从COM0到COM131命令设置(5)
	delay_ms(5);
	S1D15E05_Command(DISPNORMAL);		//正常显示命令设置(3)
	delay_ms(5);
	S1D15E05_Command(DISPALLNOR);		//正常点亮数据点命令设置(4)
	delay_ms(5);
	S1D15E05_Command(SETDUTY);		    //duty模式命令设置(18)
	S1D15E05_Data(DUTYDATA);		    //1/128 duty模式,A0 = 1
	S1D15E05_Data(DUTYSTART);		    //从COM0开始,A0 = 1
	delay_ms(5);
	
	S1D15E05_Command(SETVCVOLT);		//LCD电压Vc选择命令设置(27)
	S1D15E05_Data(VCVOLTDATA);		    //LCD电压Vc选择值3.54-7.0v,A0 = 1
	delay_ms(5);
	TempVal = ReadLcdContrastVal();
	if(TempVal>0x08)
	{
		TempVal = 0x03;
		SaveLcdContrastVal(TempVal);
	}
	
	LcdLuminance(TempVal);
	delay_ms(3);

	/*********************************/
	
	S1D15E05_Command(DISPOFFMODEH);		//关显示的电平接VC命令设置(2)
	delay_ms(5);
	
	//added by ysh. 2003.02.17
	S1D15E05_Command(0x4e);		        //温度梯度设置 (31)
	S1D15E05_Data(0x07);
	
	
	S1D15E05_Command(SETDISPMODE);		//显示模式命令设置(4级灰度或Bin)(15)

	S1D15E05_Data(DISPMODEBIN);		    //Bin显示参数,A0 = 1    

	delay_ms(5);
	S1D15E05_Command(SETDISPLINE);		//显示起始行命令设置(6)
	S1D15E05_Data(DISPLINEDATA1);		//起始行为0行数据参数,A0 = 1
	S1D15E05_Data(DISPLINEDATA2);
	delay_ms(5);
	S1D15E05_Command(SETDISPCOL);		//显示起始列命令设置(8)
	S1D15E05_Data(DISPCOLDATA);		    //起始列为0行数据参数,A0 = 1
	delay_ms(5);
	S1D15E05_Command(SETCOLDIR);		//从列方向自动增加命令设置(11)
	delay_ms(5);
	S1D15E05_Command(SETDISCHAROFF);	//关闭放电命令设置(29)
	delay_ms(5);
	S1D15E05_Command(POWERSAVEOFF);		//关闭节电模式命令设置(30)
	delay_ms(5);
	S1D15E05_Command(SETGRAYLEVEL);		//灰度等级命令设置(16)

	S1D15E05_Data(0x11);
	delay_ms(5);

	S1D15E05_Command(SETOSCFREQ);		//晶振频率命令设置(24)
	S1D15E05_Data(OSCFREQDATA);		    //晶振频率=76hz,A0 = 1
	delay_ms(5);
	S1D15E05_Command(SETOSCON);		    //开启晶振命令设置(23)
	delay_ms(5);
	S1D15E05_Command(SETPOWERCTRL);		//电源控制命令设置(25)
	S1D15E05_Data(POWERCTRLVC);		    //电源上电关闭LCDV, A0 = 1
	delay_ms(150);
	S1D15E05_Command(SETPOWERCTRL);		//电源控制命令设置(25)
	S1D15E05_Data(POWERCTRLLCDV);		//延时100ms后开启LCDV, A0 = 1
	delay_ms(5);
	S1D15E05_Command(DISPON);		    //开显示命令设置(1)
	delay_ms(10);
	LcdClrscr();
	OpenLcd();
}

/**************************************************************************
函数名称: void LcdBackLight(u8 IsOn)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:LCD液晶的背光控制     
输入参数:IsOn为液晶背光的开关控制参数,0x0为关,0x1为开
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdBackLight(u8 IsOn)
{
	u8 ReadByte;
	
	ReadByte = XBYTE[PSD_PORTE_OUT_DATA];
	if(IsOn==LGON)
	{
		XBYTE[PSD_PORTE_OUT_DATA] = ReadByte|0x02;	//使PE1(EL)输出高
	}
	else
	{
		XBYTE[PSD_PORTE_OUT_DATA] = ReadByte&0xfd;	//使PE1(EL)输出低
	}
}

/**************************************************************************
函数名称: void LcdGotoxy(u8 Regx,u8 Regy)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:LCD液晶显示坐标定位      
输入参数:坐标Regy取值在0-15,Regx在0-159
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdGotoxy(u8 Regx,u8 Regy)
{
	S1D15E05_Command(SETDISPCOL);		//显示起始列命令设置(8)
	S1D15E05_Data(Regx);			    //起始列为0行数据参数,A0 = 1
	S1D15E05_Command(SETDISPPAGE);		//显示起始页命令设置(7)
	S1D15E05_Data(Regy);			    //起始页为0行数据参数,A0 = 1	
}

/**************************************************************************
函数名称: void LcdClrscr(void)
函数版本: 1.00  
作者:     yht
创建日期: 2007.4.19       
函数功能说明:清除LCD中部分内容(除去顶端四个汉字的位置)  
输入参数:无
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdClrscr(void)
{
	u16 ii,jj;
	u16 Sch1;

	for(ii=14;ii<16;ii++)                   //在Y方向共16行
	{
		Sch1 = 160*ii;	                    //在X方向共160列,变化一行就偏移160。
		for(jj=32;jj<128;jj++)
		{
			Temp_LcdBuffer[Sch1+jj] = 0x0;  //缓冲区清零	
		}
	}
	for(ii=0;ii<2240;ii++)                  //在Y方向共16行
	{
		Temp_LcdBuffer[ii] = 0x0;           //缓冲区清零	
	}
}

/**************************************************************************
函数名称: void LcdClrAll(void)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:清除LCD屏中全部内容  
输入参数:无
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void LcdClrAll(void)
{
	u8 ii,jj;
	u16 Sch1;
	for(ii=0;ii<16;ii++)                  //在Y方向共16行
	{
		Sch1 = 160*ii;	                  //在X方向共160列,变化一行就偏移160。
		for(jj=0;jj<160;jj++)
		{
			Temp_LcdBuffer[Sch1+jj] = 0x0;//缓冲区清零	
		}
	}
	
}

/**************************************************************************
函数名称: void OpenLcd(void)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:将显示缓冲区Temp_LcdBuffer里的数据写入显示Sram
输入参数:无
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void OpenLcd(void)
{
	u8 ii,jj;
	u16 Sch1;
	
	LcdGotoxy(0,0);	                  //从LCD左上角开始显示
	S1D15E05_Command(DISPDATAWRITE);
	for(ii=0;ii<16;ii++)	          //在Y方向共16行
	{
		Sch1 = 160*ii;
		for(jj=0;jj<160;jj++)		  //在X方向共160列,变化一行就偏移160
		{
			S1D15E05_Data(Temp_LcdBuffer[Sch1+jj]);	//缓冲区内容写入显示RAM进行显示
		}
	}
}


/**************************************************************************
函数名称: void OpenLcd_Gray(void)
函数版本: 1.00  
作者:     ysh
创建日期: 2002.10.25       
函数功能说明:Gray_Scale模式下,将显示缓冲区Temp_LcdBuffer_Gray里的数据写入显示Sram
输入参数:无
输出参数:无
返回值:  无
函数扇出清单:空
函数扇入清单:空
函数体中用到的公共资源:空 
更新后的上述资源:空
***************************************************************************/
void OpenLcd_Gray(void)
{
	u8 ii,jj;
	u16 Sch1;
	
	LcdGotoxy(0,0);						//从LCD左上角开始显示
	S1D15E05_Command(DISPDATAWRITE);
	for(ii=0;ii<16;ii++)				//在Y方向共16行
	{
		Sch1 = 320*ii;    				//modified by yht
		for(jj=0;jj<320;jj++)			//在X方向共160列,变化一行就偏移160
		{
			S1D15E05_Data(Temp_LcdBuffer_Gray[Sch1+jj]);   //缓冲区内容写入显示RAM进行显示
		}

⌨️ 快捷键说明

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