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

📄 lcdinitial.c

📁 LCD0802的显示.本人从网上的资料修改并做好了函数接口,完全放心使用,经过本人测试,并已经应用产品上.
💻 C
字号:
/**********************************************************************************
*File Name:LCD.c
*Fuction:0802型号LCD 初始化,LCD显示
*Designed by zpq.
*Time:2008.10.09
**********************************************************************************/

#include <string.h>

#define LCD_RS P3_2 /* Switch Register: Command/Data */
#define LCD_RW P1_6 /* Switch Mode:!Write/Read */
#define LCD_EN P1_7 /* LCD Operation Enable */
#define LCD_DATA P2
#define LCD_CLEAR 0x01
#define MAX_X 0x10 /* Defines How Many LTR Can Be Disp.In a Row. */
#define MAX_Y 0x02 /* Defines How Many LTR Can Be Disp.In a Line. */

#define CursorON()   LCD_WrtCmd(0x0e,1)
#define CursorOFF()  LCD_WrtCmd(0x0c,1)
#define DisplayOFF() LCD_WrtCmd(0x08,1)

#define uchar unsigned char
#define uint unsigned int

/* The Declaration of Some Functions about LCD Driver */
void Delay5ms(void);
void LCD_WrtCmd(uchar Command, Busy_C);
void Init_LCD(void);
uchar Get_LCD_Status(void);
void LCD_WrtData(uchar Data);
void OutCharxy(uchar x,uchar y,unsigned disp_data);  //output char
void OutStringxy(uchar x,uchar y,uchar *disp_data);  //output string
void OutNumberxxy(uchar x1,uchar x2,uchar y,int disp_data);  //output type of int number
void ClearDisplay();     //clear screen
void Clearxxy(uchar x1,uchar x2,uchar y);   //clear x1 to x2   
uchar ReadDataxy(uchar x,uchar y);
  
/*
void Init_LCD(void)
{
	LCD_DATA=0;
	LCD_WrtCmd(0x38,0);
	// Two Lines, 5x7 Font Style, No Cursors, No Blink 
	Delay5ms();
	LCD_WrtCmd(0x38,0);
	Delay5ms();
	LCD_WrtCmd(0x38,0);
	Delay5ms();
	LCD_WrtCmd(0x38,1);
	LCD_WrtCmd(0x80,1);
	LCD_WrtCmd(LCD_CLEAR,1);
	LCD_WrtCmd(0x06,1);
	LCD_WrtCmd(0x0c,1);
}
*/

///*
void Init_LCD(void)
{
	LCD_DATA=0;
	LCD_WrtCmd(0x38,0);
	// Two Lines, 5x7 Font Style, No Cursors, No Blink 
	Delay5ms();
	LCD_WrtCmd(0x38,0);
	// Two Lines, 5x7 Font Style, No Cursors, No Blink 
	Delay5ms();
	LCD_WrtCmd(0x0e,0);
	Delay5ms();
	LCD_WrtCmd(0x01,1);
	Delay5ms();
	LCD_WrtCmd(0x04,1);

	Delay5ms();

}
//*/

uchar Get_LCD_Status(void)
{
	LCD_DATA=0xff;
	LCD_EN=0;
	LCD_EN=0;
	LCD_RW=1;
	LCD_RS=0;
	LCD_EN=1;
	while(LCD_DATA & 0x80);
	LCD_EN=0;
	return LCD_DATA;
}

void LCD_WrtData(uchar Data)
{
	LCD_EN=0;
	Get_LCD_Status();
	LCD_DATA=Data;
	LCD_RS=1;
	LCD_RW=0;
	LCD_EN=0;
	LCD_EN=0;
	LCD_EN=1;
	LCD_EN=1;
	LCD_EN=0;
}

void LCD_WrtCmd(uchar Command, Busy_C)
{
	LCD_EN=0;
	if(Busy_C) Get_LCD_Status();
	LCD_DATA=Command;
	LCD_RS=0;
	LCD_RW=0;
	LCD_EN=0;
	LCD_EN=0;
	LCD_EN=1;
	LCD_EN=1;
	LCD_EN=0;
}

void OutCharxy(uchar x,uchar y,unsigned disp_data)
{
	y=y&(MAX_Y-1);
	x=x&(MAX_X-1);
	if(y) x+=0x40;
	x+=0x80;
	LCD_WrtCmd(x,1);
	LCD_WrtData(disp_data);
}

unsigned char GetSizeofNumber(int m)
{
	if(m/10000>0)
	return 5;
	else if(m/1000>0)
	return 4;
	else if(m/100>0)
	return 3;
	else if(m/10>0)
	return 2;
	else if(m>=0)
	return 1;
}

void PutOneBitNumberxy(uchar x,uchar y,unsigned disp_data)
{
	y=y&(MAX_Y-1);
	x=x&(MAX_X-1);
	if(y) x+=0x40;
	x+=0x80;
	LCD_WrtCmd(x,1);
	LCD_WrtData(disp_data+0x30);
}


void OutNumberxxy(uchar x1,uchar x2,uchar y,int disp_data)
{
	uchar OneBit[5]={0,0,0,0,0};
	uchar j;
	//char_length=GetSizeofNumber(disp_data);
	OneBit[4]=disp_data/10000;
	OneBit[3]=disp_data/1000%10;
	OneBit[2]=disp_data/100%10;
	OneBit[1]=disp_data/10%10;
	OneBit[0]=disp_data%10;
	for(j=0;j<=x2-x1;j++)
		PutOneBitNumberxy(x2-j,y,OneBit[j]);
	PutOneBitNumberxy(x2-1,y,OneBit[1]);

}

void Clearxxy(uchar x1,uchar x2,uchar y)
{
	uchar i;
	for(i=x1;i<=x2;i++)
	OutCharxy(i,y,' ');
}

void OutStringxy(uchar x,uchar y,uchar *disp_data)
{
	uchar char_length,j;
	char_length=strlen(disp_data);
	y=y&(MAX_Y-1);
	x=x&(MAX_X-1);
	for (j=0;j<char_length;j++) 
	{
		OutCharxy(x,y,disp_data[j]);
		x++;
	}
}

uchar ReadDataxy(uchar x,uchar y)
{
	uchar ucData;
	y=y&(MAX_Y-1);
	x=x&(MAX_X-1);
	if(y) x+=0x40;
	x+=0x80;
	LCD_WrtCmd(x,1);

	LCD_EN=0;
	Get_LCD_Status();
	//ucData=LCD_DATA;
	LCD_RS=1;
	LCD_RW=1;
	LCD_EN=0;
	LCD_EN=0;
	LCD_EN=1;
	LCD_EN=1;
	LCD_EN=0;
	ucData=LCD_DATA;
	return ucData;
}

void ClearDisplay()
{
	LCD_WrtCmd(0x01,1);
}

void Delay5ms(void)
{ 
	uint i=6025;while(i--); 
}

⌨️ 快捷键说明

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