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

📄 lcd128x64.c

📁 其他人需帐号就可下载此源码液晶显示12864
💻 C
📖 第 1 页 / 共 2 页
字号:

void CheckState()		//状态检查,LCD是否忙?
{
   unsigned char dat;
   RS=0;
   RW=1;
   do{
      Dataport=0x00;
      EN=1; 
	  dat=Dataport;
      EN=0;
      dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
      }while(!(dat==0x00));
}



void SendCommandToLCD(unsigned char command)	   //写命令到LCD中
{
   CheckState();
   RS=0;	 //向LCD发送命令
   RW=0;
   Dataport=command;	 //command :命令
   EN=1;
   EN=0;
}


void SetLine(unsigned char page)	//设置页 0xb8是页的首地址
{
  page=0xb8|page; //1011 1xxx		 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
  SendCommandToLCD(page);
}


void SetStartLine(unsigned char startline) 	   //设定显示开始行,0xc0是行的首地址
{
  startline=0xc0|startline; //1100 0000
  SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
 }


void SetColumn(unsigned char column)	//设定列地址--Y 0-63 ,0x40是列的首地址
{
  column=column &0x3f; //column最大值为64,越出 0=<column<=63
  column= 0x40|column; //01xx xxxx
  SendCommandToLCD(column);
}

 
void SetOnOff(unsigned char onoff)	   //开关显示,0x3f是开显示,0x3e是关显示
{
	onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
	SendCommandToLCD(onoff);
}


void WriteByte(unsigned char dat)	//写显示数据
{
   CheckState();
   RS=1; 
   RW=0;
   Dataport=dat;//dat:显示数据
   EN=1;
   EN=0;
  }




void SelectScreen(unsigned char screen)	  //选择屏幕screen: 0-全屏,1-左屏,2-右屏
{ 						 
   switch(screen)
   { case 0: cs1=0;//全屏
             _nop_(); _nop_(); _nop_(); 
             cs2=0; 
             _nop_(); _nop_(); _nop_(); 
             break; 
     case 1: cs1=0;//左屏
             _nop_(); _nop_(); _nop_(); 
             cs2=1;
             _nop_(); _nop_(); _nop_(); 
             break;
     case 2: cs1=1;//右屏
             _nop_(); _nop_(); _nop_(); 
             cs2=0;
             _nop_(); _nop_(); _nop_(); 
             break;
   }
}


void ClearScreen(unsigned char screen)	  //清屏screen: 0-全屏,1-左屏,2-右
{ 	
     unsigned char i,j;
     SelectScreen(screen);
     
	 for(i=0;i<8;i++)	 //控制页数0-7,共8页
	 {
	        SetLine(i);
			SetColumn(0);
              for(j=0;j<64;j++)	   //控制列数0-63,共64列
			  	{
                  WriteByte(0x00); //写点内容,列地址自动加1
                }
     }
					 
}


void InitLCD() 	  //初始化LCD
{ 

	CheckState();

	SelectScreen(0);
	SetOnOff(0); //关显示

	SelectScreen(0);
	SetOnOff(1); //开显示

	SelectScreen(0);
	ClearScreen(0);//清屏

	SetStartLine(0); //开始行:0

}


//显示全角汉字
void Display(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
	int i;			  //选屏参数,page选页参数,column选列参数,number选第几汉字输出
		
	SelectScreen(ss);
	column=column&0x3f;

	SetLine(page);	//写上半页
	SetColumn(column); //控制列
	for(i=0;i<16;i++)  //控制16列的数据输出
	{
	WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出	
	}

	SetLine(page+1);		 //写下半页
	SetColumn(column);	   //控制列
    for(i=0;i<16;i++)	  //控制16列的数据输出
	{
	WriteByte(Hzk[i+32*number+16]);	//i+32*number+16汉字的后16个数据输出
	}

} 

//反显示全角汉字
void DisplayRev(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
	int i;			  //选屏参数,page选页参数,column选列参数,number选第几汉字输出
		
	SelectScreen(ss);
	column=column&0x3f;

	SetLine(page);	//写上半页
	SetColumn(column); //控制列
	for(i=0;i<16;i++)  //控制16列的数据输出
	{
	WriteByte(~Hzk[i+32*number]); //i+32*number汉字的前16个数据输出	
	}

	SetLine(page+1);		 //写下半页
	SetColumn(column);	   //控制列
    for(i=0;i<16;i++)	  //控制16列的数据输出
	{
	WriteByte(~Hzk[i+32*number+16]);	//i+32*number+16汉字的后16个数据输出
	}

} 

//显示半角汉字和数字和字母
void Displayen(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
	int i;	   //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
		
	SelectScreen(ss);
	column=column&0x3f;

	SetLine(page);	//写上半页
	SetColumn(column);
   	for(i=0;i<8;i++)
	{
	WriteByte(Ezk[i+16*number]);
	}
	
	SetLine(page+1);	//写下半页
	SetColumn(column);
   	for(i=0;i<8;i++)
	{
	WriteByte(Ezk[i+16*number+8]);
	}
} 

//反显示半角汉字和数字和字母
void DisplayenRev(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
{
	int i;	   //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
		
	SelectScreen(ss);
	column=column&0x3f;

	SetLine(page);	//写上半页
	SetColumn(column);
   	for(i=0;i<8;i++)
	{
	WriteByte(~Ezk[i+16*number]);
	}
	
	SetLine(page+1);	//写下半页
	SetColumn(column);
   	for(i=0;i<8;i++)
	{
	WriteByte(~Ezk[i+16*number+8]);
	}
}  

void DisplayC(unsigned char x,unsigned char y,unsigned char number,unsigned char abn)
{
  if((x<128)&&(y<64)){
     if(abn == 0)
     Display(1+(unsigned char)(x/64),y/8,x%64,number); 
     else// if(abn == 1)
     DisplayRev(1+(unsigned char)(x/64),y/8,x%64,number); 
  }
}


void DisplayE(unsigned char x,unsigned char y,unsigned char number,unsigned char abn)
{
  if((x<128)&&(y<64)){
     if(abn == 0)
     Displayen(1+(unsigned char)(x/64),y/8,x%64,number); 
     else// if(abn == 1)
     DisplayenRev(1+(unsigned char)(x/64),y/8,x%64,number); 
  }
}

⌨️ 快捷键说明

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