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

📄 lcd.c

📁 本人在DSP BF533上开发的控制GPS的程序
💻 C
字号:
#include "cpld.h"

/************************************************************/
/*               define sub function		                 				   	*/
/************************************************************/
extern void InitLcd(void);
extern void Delay(unsigned int DelayValue);

extern void LcdDisplayOpen(void);
extern void LcdDisplayClose(void);

extern unsigned char LcdJudgeBusyL(void);
extern unsigned char LcdJudgeBusyR(void);

extern void LcdSetPageL(unsigned char LcdPageL);
extern void LcdSetPageR(unsigned char LcdPageR);

extern void LcdSetStartlineL(unsigned char LcdStartlineL);
extern void LcdSetStartlineR(unsigned char LcdStattlineR);

extern void LcdSetYaddressL(unsigned char LcdYaddressL);
extern void LcdSetYaddressR(unsigned char LcdYaddressR);

extern void LcdWriteDataL(unsigned char LcdDataL);
extern void LcdWriteDataR(unsigned char LcdDataR);

extern unsigned char LcdReadDataL(void);
extern unsigned char LcdReadDataR(void);

extern void LcdDrawPoint(unsigned char LcdPositionX,
							unsigned char LcdPositionY);					
extern void LcdDrawCharacter(unsigned char *Matrix,
							unsigned char LcdRaw,
							unsigned char LcdCol);
							
extern void LcdDrawSign_English(unsigned char Sign_x,unsigned char LcdRaw,unsigned char LcdCol,bool Position);
extern void LcdDrawNumber(unsigned char num_x,unsigned char LcdRaw,unsigned char LcdCol,bool Position);
extern void LcdDrawCapital(unsigned char capital_x,unsigned char LcdRaw,unsigned char LcdCol,bool Position);
extern void LcdDrawLetter(unsigned char letter_x,unsigned char LcdRaw,unsigned char LcdCol,bool Position);
extern void LcdDrawSign_China(unsigned short Sign_x,unsigned char LcdRaw,unsigned char LcdCol,bool Position);
	
extern void LcdDrawRectangle(unsigned char LcdStartPosX,
							unsigned char LcdStartPosY,
							unsigned char LcdEndPosX,
							unsigned char LcdEndPosY);
extern void LcdWriteBack(void);

//******************  数字和符号的点阵  **********************//
extern unsigned char Number_sz[];
extern unsigned char Sign_english[];
extern unsigned char Letter[];
extern unsigned char Capital[];
extern unsigned char Sign_china[];



/************************************************************/
/*               define variable			                 				   	*/
/************************************************************/
unsigned char DisplayBuffer[8][128];//采用2维数组,因为全屏共有128*64个点,
									//而64行中每8个点为一个字节(为一页),所以需8*128个字节来存储
									//排放数据时按全屏,以页和Y地址来排放
									//即每个16*16的块,上半部与下半部相差128个字节.
									//对字符存储时采用了两个2维数组,一个2维数组是以要显示的字为单位,
									//半屏分为一个4*4的区域,坐标从(0,0)到(3,3)
									//另一个2维数组是以点阵的字节为单位,即8*128;

/************************************************************/
/*                 sub function                             */
/************************************************************/
void Delay(unsigned int DelayValue)
{
	unsigned int CurrentDelayValue;
	
 	for(CurrentDelayValue = 0;
		CurrentDelayValue < DelayValue;
	    	CurrentDelayValue ++)
		{;
		}
}

void InitLcd(void)
{
	unsigned char i,j;
	
	LcdDisplayOpen();
	for(i=0;i<8;i++)
		{
		for(j=0;j<128;j++)
			{
			DisplayBuffer[i][j] = 0x00;
			}
		}
	LcdWriteBack();
}

/*******************************************************/
void LcdDisplayOpen(void)
{
	*pLcdCtrlL = 0x3f;
	*pLcdCtrlR = 0x3f;
}

void LcdDisplayClose(void)
{
	*pLcdCtrlL = 0x3e;
	*pLcdCtrlR = 0x3e;
}

/********************************************************/
unsigned char LcdJudgeBusyL(void)
{
	unsigned char lcdstatusl = 0;
	
	lcdstatusl = *pLcdStatusL;

	if(lcdstatusl >= 128)
		{
			return(1);//busy
		}
	else
		{
			return(0);//ready
		}	
}

unsigned char LcdJudgeBusyR(void)
{
	unsigned char lcdstatusr = 0;
	
	lcdstatusr = *pLcdStatusR;

	if(lcdstatusr >= 128)
		{
			return(1);//busy
		}
	else
		{
			return(0);//ready
		}	
}

/*********************************************************/
void LcdSetPageL(unsigned char LcdPageL)//设置左边的页地址
{
	*pLcdCtrlL = 184 + LcdPageL;
	while(LcdJudgeBusyL())
		{;
		}
}

void LcdSetPageR(unsigned char LcdPageR)//设置右边的页地址
{
	*pLcdCtrlR = 184 + LcdPageR;	//184=0xB8=1011 1000
	while(LcdJudgeBusyR())	//检测是否完毕
		{;
		}
}

void LcdSetStartlineL(unsigned char LcdStartlineL)//设置左边的起始行
{
	*pLcdCtrlL = 192 + LcdStartlineL;	//192=0xc0=1100 0000B
	while(LcdJudgeBusyL())
		{;
		}
}

void LcdSetStartlineR(unsigned char LcdStartlineR)//设置右边的起始行
{
	*pLcdCtrlR = 192 + LcdStartlineR;
	while(LcdJudgeBusyR())
		{;
		}
}

void LcdSetYaddressL(unsigned char LcdYaddressL)
{
	*pLcdCtrlL = 64 + LcdYaddressL;
	while(LcdJudgeBusyL())
		{;
		}
}

void LcdSetYaddressR(unsigned char LcdYaddressR)//设置Y地址
{
	*pLcdCtrlR = 64 + LcdYaddressR;//64=0x40=0100 0000
	while(LcdJudgeBusyR())
		{;
		}
}

void LcdWriteDataL(unsigned char LcdDataL)
{
	*pLcdWriteL = LcdDataL;
	while(LcdJudgeBusyL())
		{;
		}
}

void LcdWriteDataR(unsigned char LcdDataR)//写显示数据
{
	*pLcdWriteR = LcdDataR;
	while(LcdJudgeBusyR())
		{;
		}
}

unsigned char LcdReadDataL(void)
{
	unsigned char ReadOutData;

	ReadOutData = *pLcdReadL;
	while(LcdJudgeBusyL())
		{;
		}
	return(ReadOutData);
}
unsigned char LcdReadDataR(void)
{
	unsigned char ReadOutData;

	ReadOutData = *pLcdReadR;
	while(LcdJudgeBusyR())
		{;
		}
	return(ReadOutData);

}

/*************************************************************************/
void LcdDrawPoint(unsigned char LcdPositionX,unsigned char LcdPositionY)
{
	unsigned char Offset;
	unsigned char Buffer = 1;
	unsigned char Temp;
	unsigned char CurrentPage;
	
	CurrentPage = LcdPositionY / 8;

	Temp=DisplayBuffer[CurrentPage][LcdPositionX];
		
	Offset = LcdPositionY % 8;
        Buffer = Buffer << Offset;                 //decide the display data.	
        Buffer = Temp | Buffer;                    //temp or buffer according to bit.

        DisplayBuffer[CurrentPage][LcdPositionX] = Buffer;

}
void LcdDrawCharacter(unsigned char *Matrix,unsigned char LcdRaw,unsigned char LcdCol)
{
	unsigned char i,j;
	
	for(j=0;j<16;j++)
		{
		for(i=0;i<2;i++)
			{
			DisplayBuffer[i +LcdRaw*2][j + LcdCol*16] = *(Matrix ++);
			}
		}

	//  该字模应用于单色的点阵液晶,数据是纵向的

⌨️ 快捷键说明

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