www.pudn.com > Glcd.rar > Glcd.c


 
#include "Global.h" 
#include "Hzlib.h" 
 
/////////////////////////////////////////////////////////////////////////////// 
// 内部存储区变量	0~128字节 直接寻址 
// 全局变量定义 
extern data  uchar u8CursorX;			// 光标X坐标列 
extern data  uchar u8CursorY;			// 光标Y坐标行 
extern data  uchar cs;					// 显示片选 
 
extern bdata bit reverse;				// LCD底色显示控制 
 
////////////////////////////////////////////////////////////////////////////// 
// LCD定位,列、行 
/////////////////////////////////////////////////////////////////////////////// 
void GLCD_Locate (uchar u8Column, uchar u8Line) 
{ 
	u8CursorX = u8Column; 
	u8CursorY = u8Line; 
} 
 
/////////////////////////////////////////////////////////////////////////////// 
// LCD延时 
/////////////////////////////////////////////////////////////////////////////// 
void LcdDelay(uchar u32Duration) 
{ 
	idata uchar i; 
 
	for(i=0;i63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
		c1 = fmt[i]; 
		c2 = fmt[i+1]; 
		if(c1 >= 0) 
		{	// ASCII 
			LcdInstructionWrite (X_ADRESS + (u8CursorY/ 8),pos); 
			LcdInstructionWrite (Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
			for (k=0;k<8;k++) 
			{ 
				if(reverse)LcdDataWrite(~ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos); 
				else 
				LcdDataWrite(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos);				 
			} 
 
			LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+1,pos); 
			LcdInstructionWrite (Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
			for(k=8;k<16;k++) 
			{ 
				if(reverse)LcdDataWrite(~ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos); 
				else 
				LcdDataWrite(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+k],pos); 
			} 
			u8CursorX +=8; 
		} 
		else 
		{ 
		// 中文 
			for(j=0;j63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
			LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8),pos); 
			LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
			for (k=8;k<16;k++) 
			{ 
				if(reverse)LcdDataWrite(~GB_16[j].Msk[k],pos); 
				else 
				LcdDataWrite(GB_16[j].Msk[k],pos); 
			} 
			u8CursorX -=8; 
		    if(u8CursorX <64){pos=LEFT;cs=1;} 
  			else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}	 
			LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+1,pos);	 
			LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
			for (k=16;k<24;k++) 
			{ 
				if(reverse)LcdDataWrite(~GB_16[j].Msk[k],pos); 
				else 
				LcdDataWrite(GB_16[j].Msk[k],pos); 
			} 
			u8CursorX +=8; 
			if(u8CursorX <64){pos=LEFT;cs=1;} 
  			else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
			LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+1,pos);	 
			LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos);			 
			for (k=24;k<32;k++) 
			{ 
				if(reverse)LcdDataWrite(~GB_16[j].Msk[k],pos); 
				else 
				LcdDataWrite(GB_16[j].Msk[k],pos); 
			} 
			u8CursorX +=8; 
			i++; 
		} 
		i++; 
	} 
} 
 
/////////////////////////////////////////////////////////////////////////////// 
// 显示大字体 
/////////////////////////////////////////////////////////////////////////////// 
void LcdPutDigit (uchar u8Char) 
{ 
	idata uchar c1;		// 显示字符 
	idata uchar k; 
	idata uchar pos;	// 显示位置 
 
	c1=u8Char; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8),pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	LcdDataWrite(0x00,pos); 
	for (k=0;k<7;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	u8CursorX +=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8),pos); 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	for (k=7;k<14;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	LcdDataWrite(0x00,pos); 
	u8CursorX -=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}	 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+1,pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	LcdDataWrite(0x00,pos); 
	for (k=14;k<21;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	u8CursorX +=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+1,pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	for (k=21;k<28;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	LcdDataWrite(0x00,pos);			 
	u8CursorX -=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}	 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+2,pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	LcdDataWrite(0x00,pos); 
	for (k=28;k<35;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	u8CursorX +=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+2,pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	for (k=35;k<42;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	LcdDataWrite(0x00,pos);	 
	u8CursorX -=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;}	 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/8)+3,pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	LcdDataWrite(0x00,pos); 
	for (k=42;k<49;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	u8CursorX +=8; 
	if(u8CursorX <64){pos=LEFT;cs=1;} 
	else if((u8CursorX >63)&&(u8CursorX <128)){pos=RIGHT;cs=2;} 
	LcdInstructionWrite(X_ADRESS + (u8CursorY/ 8)+3,pos);	 
	LcdInstructionWrite(Y_ADRESS + u8CursorX - (cs-1)*64,pos); 
	for (k=49;k<56;k++) 
	{ 
			LcdDataWrite(clock_digit[(c1-0x30)*56+k],pos); 
	} 
	LcdDataWrite(0x00,pos);	 
}