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

📄 lcd.c

📁 此文件是液晶显示全部程序 包括带字库液晶和不带字库液晶
💻 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<line;i++)
			LcdClearLine(PROMPT_Y+i);		//并将不应该出现的行清楚
		}

}

void BackSpace(void)
{
PROMPT_X-=CHAR_WIDTH;
if(PROMPT_X>=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(k<V_PROMPT_Y) V_PROMPT_Y=k;
	PROMPT_Y=V_PROMPT_Y%8;
    }				
LcdPutOne(PROMPT_X,PROMPT_Y,BACKSPACECODE);
}
*/

byte LcdPutChar(byte charcode)
{

if(charcode==LR ) NextLine();						//遇到回车符则换行
else
  {
	 if(charcode<0x40)		{CHAR_WIDTH=8;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE8_16;} 
	 else if(charcode<0x80) {CHAR_WIDTH=6;CHAR_HEIGHTH=8;BACKSPACECODE=BACKSPACECODE8_8;} //CHAR_WIDTH=8;
	 else if(charcode<0xd0) {CHAR_WIDTH=16;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE16_16;}
 	 else if(charcode<0xe0) {CHAR_WIDTH=24;CHAR_HEIGHTH=24;BACKSPACECODE=0xdf;}
	 else if(charcode<0xf0) {CHAR_WIDTH=32;CHAR_HEIGHTH=32;BACKSPACECODE=0xef;}
	 else if(charcode<0xfd) {CHAR_WIDTH=12;CHAR_HEIGHTH=16;BACKSPACECODE=BACKSPACECODE12_16;}
     //else 
 
	 if(charcode==BACKSPACE) BackSpace();				//退一格
	 else
	   {
	 	  if((PROMPT_X+CHAR_WIDTH)>TOTAL_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

⌨️ 快捷键说明

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