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

📄 lcd.c

📁 LCD液晶驱动程序代码
💻 C
字号:
#include <P89V51.H>
//#include<reg51.H>
#include <absacc.h>
#include <IO.h>
#include <STRING.H>
#define Uint unsigned int
#define Uchar unsigned char
Uchar 	ReadDataLCM(void);
Uchar 	ReadStatusLCM(void);
void 	WriteDataLCM(Uchar WDLCM);
void 	WriteCommandLCM(Uchar WCLCM,BuysC);
void 	LCMInit(void);
void 	DisplayOneChar(Uchar X, Uchar Y,Uchar DData);
void 	DisplayListChar(Uchar X, Uchar Y,Uchar code *DData);
void 	DisplayInt(Uchar X,Uchar Y,Uint f);
void 	DelayMs(Uint x) ;
void 	DisplayFloat( Uchar X,Uchar Y,float f,Uchar g); 
Uchar   Flag=0;
Uchar   Displaydot=0;           // 判正数后的小数点是否已被显示
//Uchar   NegativeDisplaydot=0; // 判负数后的小数点是否已被显示
/***********************************************************************
  Delay some msec  
************************************************************************/
void DelayMs(Uint x) 
{
	unsigned char del=0; 
	do
	{ 
		//del=0;
		for(del=0;del<125;del++); /* 8us x 125 = 1ms */
	}
	while((x--)!=0);
}


/***********************************************************************
WriteData
************************************************************************/
void WriteDataLCM(unsigned char WDLCM)
{
	ReadStatusLCM();    //检测忙
	LCM_Data = WDLCM;
	LCM_RS = 1;
	LCM_RW = 0;
	LCM_E  = 1;

	LCM_E  = 0; 		//若晶振速度太高可以在这后加小的延时
	DelayMs(5); 
	LCM_E  = 1; 		
	
}


/***********************************************************************
WriteCommand
************************************************************************/
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
{
	if (BuysC) 
	ReadStatusLCM(); //根据需要检测忙
	LCM_Data = WCLCM;
	LCM_RS = 0;
	LCM_RW = 0; 
	LCM_E  = 1;
	LCM_E  = 0;
	DelayMs(5); 
	LCM_E  = 1;
	
}


/***********************************************************************
 ReadData
************************************************************************/
unsigned char ReadDataLCM(void)
{
	LCM_RS = 1; 
	LCM_RW = 1;
	LCM_E  = 0;
	LCM_E  = 0;
	LCM_E  = 1;
	return(LCM_Data);
}


/***********************************************************************
ReadStatus
************************************************************************/
unsigned char ReadStatusLCM(void)
{
	LCM_Data=0xFF; 
	LCM_RS=0;
	LCM_RW=1;
	LCM_E=0;
	LCM_E=0;
	LCM_E=1;
	while (LCM_Data & Busy); //检测忙信号
	return(LCM_Data);
}


/***********************************************************************
Init
************************************************************************/
void LCMInit(void) 
{
	LCM_Data = 0;
	WriteCommandLCM(0x30,0);  
	DelayMs(15); 
	WriteCommandLCM(0x30,0);  
	DelayMs(15); 
	WriteCommandLCM(0x30,0);
	DelayMs(15); 
    WriteCommandLCM(0x30,1);  
	WriteCommandLCM(0x0C,1);   
	//WriteCommandLCM(0x08,1);
    WriteCommandLCM(0x01,1);   
	WriteCommandLCM(0x00,1);  

	
	
}


/***********************************************************************
DisplayOneChar in a place	
************************************************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
	if((X!=0)||(Y!=0))
	{
	Y &= 0x03;				
	X &= 0x07; 				
	switch(Y)
		{
		 case 0: {X |= 0x80;} break;
		 case 1: {X |= 0x90;} break;
		 case 2: {X |= 0x88;} break;
		 case 3: {X |= 0x98;} break;
		}
	   WriteCommandLCM(X,0);
	   WriteDataLCM(DData);
	} 
	    


      else
	      WriteDataLCM(DData);
}




/***********************************************************************
DisplayInt	
************************************************************************/
void DisplayInt(Uchar X,Uchar Y,Uint f)
{
	Uint idata lcdcopy[16];
 	Uint idata lcdbuffer[16];
 	Uint i=0;
 	Uint k=0;
    if (f==0)  				 
 	{
   		DisplayOneChar(X,Y,0x30);
  	}
   	else  				
  	{
		while(f!=0)
		{
		  lcdbuffer[k++]=f%10;
     	  f=f/10;
	  	}
		for(i=0;i<k;i++)
	  	{
		  lcdcopy[i]=lcdbuffer[k-1-i];
	  	}
		DisplayOneChar(X,Y,lcdcopy[0]+0X30);
    	for (i=1;i<k;i++)
	 	{ 
		 
		   DisplayOneChar(0,0,lcdcopy[i]+0X30);	
 	   	
		}

	 }
}








⌨️ 快捷键说明

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