www.pudn.com > LCD20040316.rar > LCD.C


 
#ifdef HY_12864B 
 
#include "..\h\globle.h" 
#include "..\h\lcd.h" 
 
extern void RESET(void); 
extern void INITIAL(void); 
extern void CLEARPAGE(byte); 
extern void ROLL(byte); 
extern void CHAR_PR(byte,byte,byte);  
 
byte        PROMPT_X;			//当前光标横坐标 
byte  		PROMPT_Y;			//当前光标纵坐标(0-7) 
byte        V_PROMPT_Y;	        //虚拟当前光标纵坐标(0--0xff) 
//word      V_PROMPT_Y;	        //虚拟当前光标纵坐标(0--0xffff) 
 
byte    BACKSPACECODE; 
 
byte  		CHAR_WIDTH=16;		//输出字符的宽度 
byte  		CHAR_HEIGHTH=16;		//输出字符的高度 
 
/* 
void LcdReset(void) 
{ 
RESET(); 
} 
*/ 
 
void LcdInit(void) 
{ 
INITIAL(); 
PROMPT_X=0; 
PROMPT_Y=0; 
V_PROMPT_Y=0; 
} 
 
void LcdClearLine(byte line) 
{ 
CLEARPAGE(line); 
} 
 
void LcdClearAll(void) 
{ 
byte i; 
for(i=0;i<8;i++) 
CLEARPAGE(i); 
} 
 
void LcdRoll(byte pixels)						//每次卷动pixels像素 
{ 
 
ROLL(PROMPT_Y*8+pixels); 
} 
 
byte LcdPutOne(byte x,byte y,byte code0)		//输出一个字符,(x,y)为坐标,y是行号 
{ 
 
CHAR_PR(x,y,code0); 
 
return(code0); 
} 
 
void NextLine(void) 
{ 
byte  i,line; 
line=CHAR_HEIGHTH/8; 
 
		PROMPT_X=0; 
		V_PROMPT_Y+=line; 
		PROMPT_Y+=line; 
		if(PROMPT_Y>=TOTAL_PAGES)  PROMPT_Y-=8; 
		if(V_PROMPT_Y>=TOTAL_PAGES) 
        { 
			LcdRoll(CHAR_HEIGHTH);			//如果超出范围则自动卷动屏幕 
		    for(i=0;i=0x80) PROMPT_X=0;		//只能在本行有效 
		 		 
LcdPutOne(PROMPT_X,PROMPT_Y,BACKSPACECODE); 
} 
 
/* 
void SuperBackSpace(void) 
{ 
byte k; 
 
PROMPT_X-=CHAR_WIDTH; 
if(PROMPT_X>=0x80)  
	{	 		 
    k=V_PROMPT_Y;		//此段代替上一行代码,可以清除上一行显示,不建议使用 
	V_PROMPT_Y-=CHAR_HEIGHTH/8;				 
	if(kTOTAL_X_PIXELS) NextLine();	//如果右边超出显示范围则从下一行显示,或卷页  
		   LcdPutOne(PROMPT_X,PROMPT_Y,charcode); 
	    	PROMPT_X+=CHAR_WIDTH; 
       }//else BACKSPACE 
 
   }//else  LR 
return(charcode); 
} 
 
void Display(byte *string)			//从当前坐标处开始输出字符串,具有自动换行、退格功能,能够自动卷动屏幕		 
{ 
byte i=0; 
byte charcode; 
 
while((charcode=*(string+i))!=STRING_END)  
    { 
    LcdPutChar(charcode); 
	i++; 
	 
   }		//while 
 
} 
 
 
void DisplayNumber(word number)		//number为要显示的数字 
{ 
byte NumDisplay[5]; 
byte i,*string; 
bit rtn=0; 
 
	NumDisplay[0]=number/10000;			//最高位 
	number-=NumDisplay[0]*10000; 
 
	NumDisplay[1]=number/1000; 
	number-=NumDisplay[1]*1000; 
 
	NumDisplay[2]=number/100; 
	number-=NumDisplay[2]*100; 
 
	NumDisplay[3]=number/10; 
	number-=NumDisplay[3]*10; 
 
	NumDisplay[4]=number; 
 
	string=NumDisplay; 
	 
for(i=0;(i<5)&&(rtn==0);i++)			//寻找第一个不为0的数字位置//保证至少输出一个数字 
	{ 
	 if(*(string+i)!=0) rtn=1; 
	 	 
	} 
 
 
for(i-=1;i<5;i++) 
	{ 
	  LcdPutChar(*(string+i)); 
    } 
 
} 
 
#endif