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

📄 lcd.c

📁 AT89C51与液晶SED1520的驱动程序
💻 C
字号:
/*=========================================================================================*/
/*张刚--最后修改于2005年03月18日*/

/*晶采光电12232液晶处理子程序*/
/*=========================================================================================*/
#include <reg52.h>
#include <intrins.h> 
#include <constdef.h> 
#include <x25045.h>
#include <Table.h> 
#include <Name.h>
 
#define DataPort   P0

sbit c_d=P2^7;
sbit MasterE=P2^5; //E1
sbit SlaveE=P2^6;  //E2

void OutComMaster(uchar cCommand)  
{
     WatchDog();
     c_d=0;_nop_();_nop_();
     MasterE=1;_nop_();_nop_();
     DataPort=cCommand;_nop_();_nop_();
     MasterE=0;_nop_();_nop_();  
}

void OutComSlave(uchar cCommand)
{  
     WatchDog();
     c_d=0;_nop_();_nop_();
     SlaveE=1;_nop_();_nop_();
     DataPort=cCommand;_nop_();_nop_();
     SlaveE=0;_nop_();_nop_(); 
}

// 发送数据
void OutDataMaster(uchar cData) 
{
     WatchDog();
     c_d=1;_nop_();_nop_();
     MasterE=1;_nop_();_nop_();
     DataPort=cData;_nop_();_nop_();
     MasterE=0;_nop_();_nop_();  
}

void OutDataSlave(uchar cData)
{
     WatchDog();
     c_d=1 ;_nop_();_nop_();
     SlaveE=1;_nop_();_nop_();
     DataPort=cData;_nop_();_nop_();
     SlaveE=0;_nop_();_nop_();  
}

//设置地址和页数
void SetAddress(uchar PageAddress,uchar LineAddress)
{    
     WatchDog(); 
     if(LineAddress<61) 
	   {
	    OutComMaster(LineAddress&0x7f); 
		OutComMaster(PageAddress|0xb8);
	   }
	 else 
	   {
	    OutComSlave((LineAddress-61)&0x7f); 
		OutComSlave(PageAddress|0xb8);
	   }
}


// LCD 初始化
void LcdIni() 
{  
     WatchDog();
     OutComMaster(0xe2);
	 OutComSlave(0xe2);

     OutComMaster(0xae);
	 OutComSlave(0xae);     
       
     OutComMaster(0xa4);
	 OutComSlave(0xa4);  
  
	 OutComMaster(0xa9);
	 OutComSlave(0xa9);

     OutComMaster(0xa0);
	 OutComSlave(0xa0);

	 OutComMaster(0xee);
	 OutComSlave(0xee);

	 OutComMaster(0xb8);
	 OutComSlave(0xb8);
	 OutComMaster(0x00);	 
	 OutComMaster(0xc0);
	 OutComSlave(0x00);
	 OutComSlave(0xc0);

	 OutComMaster(0xaf);
	 OutComSlave(0xaf);    
}

// 清屏
void ClrLcd()
{
     uchar page,i;
     WatchDog();
     for (page=0;page<4;page++)
      {
          SetAddress(page,0);
          SetAddress(page,61);
          for (i=0;i<61;i++)
		   {
            OutDataMaster(0);
			 	OutDataSlave(0);
          }
      }
}

void ClrRect(uchar cStartPage,uchar cStartLine,uchar cEndPage,uchar cEndLine)
{
	uchar cTemp0,cTemp1;
	WatchDog();
	for (cTemp0=cStartPage;cTemp0<=cEndPage;cTemp0++)
	{
		SetAddress(cTemp0,cStartLine);
		for(cTemp1=cStartLine;cTemp1<=cEndLine;cTemp1++)
		{
			if (cTemp1==61)
				SetAddress(cTemp0,61);
			if (cTemp1>60)
				OutDataSlave(0);
			else
				OutDataMaster(0);
		}
	}
}
void ShowHZ(uchar cLine,uchar cCloumn,uchar cHZCode,bit bWhite)
{
     uchar i;
	 uchar iCloumn;  
     WatchDog();
     iCloumn=cCloumn;
     SetAddress(cLine*2,cCloumn);
	 for(i=0;i<16;i++)
	 {
	   if(iCloumn>60)
	   {
	     if(iCloumn==61)
     	   SetAddress(cLine*2,iCloumn);
         if(bWhite)
          OutDataSlave(~HZTable[cHZCode][i]);
         else
          OutDataSlave(HZTable[cHZCode][i]);
	   }
	   else
         if(bWhite)
	      OutDataMaster(~HZTable[cHZCode][i]);
         else
          OutDataMaster(HZTable[cHZCode][i]);
	   iCloumn++;
	 }

	 SetAddress(cLine*2+1,cCloumn);
	 iCloumn=cCloumn;
	 for(i=16;i<32;i++)
	 {
	   if(iCloumn>60)
	   {
	     if(iCloumn==61)
     	 SetAddress(cLine*2+1,iCloumn);
         if(bWhite)
		  OutDataSlave(~HZTable[cHZCode][i]); 
         else
          OutDataSlave(HZTable[cHZCode][i]); 
	   }
	   else 
         if(bWhite)
	      OutDataMaster(~HZTable[cHZCode][i]); 
         else
          OutDataMaster(HZTable[cHZCode][i]); 
	   iCloumn++;
	 }

}







⌨️ 快捷键说明

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