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

📄 lcd.c

📁 点阵式LCD控制
💻 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 LcdDrawRectangle(unsigned char LcdStartPosX,
							unsigned char LcdStartPosY,
							unsigned char LcdEndPosX,
							unsigned char LcdEndPosY);
extern void LcdWriteBack(void);

/************************************************************/
/*               define variable			                 				   	*/
/************************************************************/
unsigned char DisplayBuffer[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;
}

/********************************************************/
void LcdDemo(void)
{
	unsigned char i,j;

	for(i=0;i<128;i++)
		{
		for(j=0;j<8;j++)
			{
			DisplayBuffer[j][i] = 0xff; 
			}
		LcdWriteBack();
		
		//Delay(2000000);
		}
	
	for(i=0;i<128;i++)
		{
		for(j=0;j<8;j++)
			{
			DisplayBuffer[j][i] = 0x00; 
			}
		LcdWriteBack();
		
		//Delay(2000000);
		}

	for(i=0;i<128;i++)
		{

			LcdDrawPoint(i,(i/2));
			LcdDrawPoint((i),(64-i/2));
		}
	LcdWriteBack();
}

/********************************************************/
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;
	while(LcdJudgeBusyR())
		{;
		}
}

void LcdSetStartlineL(unsigned char LcdStartlineL)
{
	*pLcdCtrlL = 192 + LcdStartlineL;
	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)
{
	*pLcdCtrlR = 64 + LcdYaddressR;
	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 + -