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

📄 lcd - text type.c

📁 8051入間程序
💻 C
字号:
//*****************************************************
//LCD - Text Type
//16 * 2 char
//5x8 dots per char
//Display text By using ASCII code
//*****************************************************

#include <REGX52.H> 

#define LCD_RS P3_2		// 1 Data Mode, 0 Instruction Mode
#define LCD_RW P3_3		// 1 Read Mode, 0 Write Mode
#define LCD_E P3_4		// 1 Enable
#define LCD_DATA P1		// Data Bus

//LCD main functions
void lcdInit(void);									//LCD init
void lcdWriteCmd(unsigned char cmd);				//write instruction
void lcdWriteAdd(unsigned char add);				//write address (7-bits)
void lcdWriteDat(unsigned char dat);				//write char
void lcdWriteDatArray(unsigned char code *ch);		//write char[]
//LCD sub functions
void lcdWaitBusy(void);								//wait until LCD ready (not busy)
void lcdSend(void);									//generate a low square wave pulse
//Others
unsigned char calLength(unsigned char code *ch);	//return char[] length
void delay5(void);									//delay 5ms
void delay400(void);								//delay 400ms


//*****************************************************
//LCD main functions
//*****************************************************
void main(void)
{
	unsigned char code cLine1[] = {"Welcome"};
	//init
	delay400();
	lcdInit();
	//write
	lcdWriteAdd(0x04);
	lcdWriteDatArray(cLine1);

	while(1);
}


void lcdInit(void)
{
	lcdWriteCmd(0x38);		// 8 bits, 2 lines, 5x7 dots
	lcdWriteCmd(0x0E);		// Display on, Cursor on, Blinking off
	lcdWriteCmd(0x06);		// Cursor shift, direction : increase
	lcdWriteCmd(0x02);		// Cursor return
	lcdWriteCmd(0x01);		// Clear Display

}

void lcdWriteCmd(unsigned char cmd)
{
	lcdWaitBusy();
	LCD_RS = 0;			//instruction mode
	LCD_RW = 0;			//write mode
	LCD_DATA = cmd;
	lcdSend();
}

void lcdWriteAdd(unsigned char add)
{
	add = add | 0x80;
	lcdWriteCmd(add);
}

void lcdWriteDat(unsigned char dat)
{
	lcdWaitBusy();
	LCD_RS = 1;
	LCD_RW = 0;
	LCD_DATA = dat;	
	lcdSend();
}

void lcdWriteDatArray(unsigned char code *ch)
{
	unsigned char cLength = calLength(ch);		//get char length
	int i;
	for(i=0 ; i<cLength ; i++)					//write all char
		lcdWriteDat(ch[i]);					
}


//*****************************************************
//LCD sub functions
//*****************************************************

void lcdWaitBusy(void)
{
	do
	{
		LCD_DATA = 0xFF;
		LCD_RS = 0;
		LCD_RW = 1;				//read mode
		lcdSend();				//after execute, if not busy, BF become 0
	}while(LCD_DATA > 0xEF);	//BF is MSB, if BF == 1, must > 0xEF
}

void lcdSend(void)
{
	//low square wave
	LCD_E = 0;
	delay5();
	LCD_E = 1;
}


//*****************************************************
//Other functions
//*****************************************************

unsigned char calLength(unsigned char code *ch)
{
	unsigned char cLength = 0;
	
	while(ch[cLength]>=0x20)		//if !end
		cLength++;
	return cLength;
}

void delay5(void)
{
	unsigned char d = 5552;
	while(d--)
	;
}

void delay400(void)
{
	unsigned char A = 5;
	unsigned int B;
	while(A--)
	{
		B=7269;
		while(B--);
	};
}



⌨️ 快捷键说明

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