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

📄 dgl.c

📁 lcd208*80点阵的,ic为爱普生的D15721E,lcd驱动程序.
💻 C
字号:
#include <reg52.h>


sbit   CS=P1^0;
sbit  RES=P1^1;
sbit   A0=P1^2;
sbit  SCL=P1^3;
sbit   SI=P1^4;

unsigned char code beijing2008[192];
unsigned char code pp[350];
unsigned char code cir[200];
void Delay(unsigned int i)
{
  unsigned int c;

  while(i--)
    {
     c=1000 ;
     while(c--);      

    }

}

void SpisendData(char c)
{
  unsigned char i;

 CS=0;
 A0=1;

 for(i=0x80;i>0;i=i>>1)
   {
    SCL=0;
    SI=(i&c);
    SCL=1;
   }
 CS=1;

}

void SpisendCode(char c)
{
 unsigned char i;  

 CS=0;
 A0=0;

 for(i=0x80;i>0;i=i>>1)
   {
    SCL=0;
    SI=(i&c);
    SCL=1;
   }
 CS=1;
 
}

void LcdInitial()
{
 RES=0;
 Delay(30);
 RES=1; 
SpisendCode(0xae);Delay(1);  //display off也是reset后默认的
SpisendCode(0xa6);Delay(1);  //display normal也是reset后默认的 reverse(0xc7)
SpisendCode(0xa4);Delay(1);  //full display 也是reset后默认的 xxxxxxxxxxxxxxx
SpisendCode(0xc5);Delay(1);  //Common Output Status Select,default:normal(0xc4),now adverse(0xc5)
SpisendCode(0xa0);Delay(1);  //Column Address Set Direction:default:normal

SpisendCode(0x66);Delay(1);  //mode and dummy perial select:00,also default
SpisendData(0x00);Delay(1);

SpisendCode(0x39);Delay(1);  //Gray-scale Pattern Set 
SpisendData(0x43);Delay(1);  //选中间色*******************32

SpisendCode(0x6d);Delay(1);    //Display Line Number Set
SpisendData(0x19);Delay(1);   //total 81 lines,also default,xxxxxxxxxxxxxxx     
SpisendData(0x00);Delay(1);   //start line

SpisendCode(0xe7);Delay(1);   // MLS drive selection
SpisendData(0x0b);Delay(1);   //use default


SpisendCode(0x36);Delay(1);  //nline inverted:n=4,also default;
SpisendData(0x12);Delay(1);
SpisendCode(0xe5);Delay(1);  //n-line Inverting Drive ON/OFF,default is off(0xe4),now is on(0xe5)  xxxxxxxxx


SpisendCode(0x5f);Delay(1);   //frequence select
SpisendData(0x0);Delay(1);   //not the defalut,fcl=171khz,ffr=81hz,原0x08
SpisendCode(0xab);Delay(1);   //os on


SpisendCode(0x2b);Delay(1);  //adjust v3
SpisendData(0x07);Delay(1);  //v3:9~16
SpisendCode(0x81);Delay(1);  //v3 volume
SpisendData(0x43);Delay(1);  //alfa=larger 00xxxxxxxxxxxxxxxxxxxxx

SpisendCode(0x4e);Delay(1);  //Temperature Gradient Set :use default
SpisendData(0x00);Delay(1);  
SpisendCode(0x28);Delay(1);  //Thermal sensor ON/OFF:is off



SpisendCode(0xa2);Delay(1);  //lcd bias
SpisendData(0x00);Delay(1);  //  1/8

SpisendCode(0x25);Delay(1);  //power control,mode set
SpisendData(0x04);Delay(1);
SpisendCode(0x25);Delay(1);  //power control,mode set
SpisendData(0x06);Delay(1);
SpisendCode(0x25);Delay(1);  //power control,mode set
SpisendData(0x07);Delay(1);
}

void ScanScreen()
{
 unsigned char i,j;
SpisendCode(0xaf);Delay(1);  //display on也是reset后默认的
SpisendCode(0xa0);Delay(1);  //Column Address Set Direction:default:normal

SpisendCode(0x6d);Delay(1);   //Display Line Number Set
SpisendData(0x13);Delay(1);   //total 19page,81 lines,also default,xxxxxxxxxxxxxxx     
SpisendData(0x00);Delay(1);   //start line
SpisendCode(0x84);Delay(1);   //display data input directon select:comlumn优先

for(i=0;i<20;i=i+4)             //页的地址,共20pages,when use gray mode
  {
         SpisendCode(0xb1);  //page address write commond
	 SpisendData(i);;     //page address 
         SpisendCode(0x13);  //column address write commond
	 SpisendData(0);     //column address   
    for(j=0;j<208;j++)         //column address 
       {	
	 SpisendCode(0x1d);;   //data write commond
	 SpisendData(0x00);   //data 
	 }	
	 
	 
         SpisendCode(0xb1);  //page address write commond
	 SpisendData(i+1);;     //page address 
         SpisendCode(0x13);  //column address write commond
	 SpisendData(0);     //column address   
   for(j=0;j<208;j++)         //column address 
       {	
	 SpisendCode(0x1d);;   //data write commond
	 SpisendData(0x55);   //data 
	 }
	 
	 		 
       SpisendCode(0xb1);  //page address write commond
	 SpisendData(i+2);;     //page address 
         SpisendCode(0x13);  //column address write commond
	 SpisendData(0);     //column address   
   for(j=0;j<208;j++)         //column address 
       {	
	 SpisendCode(0x1d);;   //data write commond
	 SpisendData(0xaa);   //data 
	 }	
	 
	 	  
         SpisendCode(0xb1);  //page address write commond
	 SpisendData(i+3);;     //page address 
         SpisendCode(0x13);  //column address write commond
	 SpisendData(0);     //column address   
   for(j=0;j<208;j++)         //column address 
       {	
	 SpisendCode(0x1d);;   //data write commond
	 SpisendData(0xff);   //data 
	 }	

 }

}

void ClearScreen()
{
  unsigned char i,j;

SpisendCode(0xaf);Delay(1);  //display on也是reset后默认的
SpisendCode(0xa0);Delay(1);  //Column Address Set Direction:default:normal

SpisendCode(0x6d);Delay(1);   //Display Line Number Set
SpisendData(0x13);Delay(1);   //total 19page,81 lines,also default,xxxxxxxxxxxxxxx     
SpisendData(0x00);Delay(1);   //start line
SpisendCode(0x84);Delay(1);   //display data input directon select:comlumn优先

for(i=0;i<20;i++)             //页的地址,共20pages,when use gray mode
  { 
     SpisendCode(0xb1);  //page address write commond
     SpisendData(i);     //page address 
     SpisendCode(0x13);  //column address write commond
     SpisendData(0);     //column address  
  for(j=208;j>0;j--)    
     {	
      
	 SpisendCode(0x1d);   //data write commond
	 SpisendData(0x00);   //data 
     }
  }

}
//
char Half_Char(char c)
{
 char a1,a2,a3,a4;
//c为一个字节的第四位,扩展成一个灰度的字节
 if(c&0x08)a1=3;
 else a1=0;
 if(c&0x04)a2=3;
 else a2=0;
 if(c&0x02)a3=3;
 else a3=0;
 if(c&0x01)a4=3;
 else a4=0;

 a4=(a1<<6)+(a2<<4)+(a3<<2)+a4;

 return a4;
}
//=================================
char Grayhalf_Char(char c,unsigned char graymode)
{
 char a1,a2,a3,a4;
//c为一个字节的第四位,扩展成一个灰度的字节
 if(c&0x08)a1=graymode;
 else a1=0;
 if(c&0x04)a2=graymode;
 else a2=0;
 if(c&0x02)a3=graymode;
 else a3=0;
 if(c&0x01)a4=graymode;
 else a4=0;

 a4=(a1<<6)+(a2<<4)+(a3<<2)+a4;

 return a4;
}
//===========================================
void Display_Char()
{
 unsigned char i,j,temp;

SpisendCode(0xaf);Delay(1);  //display on也是reset后默认的
SpisendCode(0xa0);Delay(1);  //Column Address Set Direction:default:normal

SpisendCode(0x6d);Delay(1);   //Display Line Number Set
SpisendData(0x13);Delay(1);   //total 19page,81 lines,also default,xxxxxxxxxxxxxxx     
SpisendData(0x00);Delay(1);   //start line
SpisendCode(0x85);Delay(1);   //display data input directon select:page优先

for(i=0;i<96;i++)             //列的地址,共96列,when use gray mode
  {   
     SpisendCode(0x13);  //column address write commond
     SpisendData(i);     //column address  

     SpisendCode(0xb1);  //page address write commond
     SpisendData(0);     //page address  
     for(j=0;j<2;j++)    //page
     { 
     
	 temp=Half_Char(beijing2008[i*2+j]&0x0f);
	 SpisendCode(0x1d);   //data write commond
	 SpisendData(temp);   //data 
// Delay(100);
	 temp=Half_Char((beijing2008[i*2+j]&0xf0)>>4);
	 SpisendCode(0x1d);   //data write commond
	 SpisendData(temp);   //data 
//	  Delay(100);
     }
  }

}

/*===========================================
70宽x80高  700个字节,定位从134列~204,page0~19
**********************************************/
void Display_Pic()
{
 unsigned char i,j,temp;

SpisendCode(0x85);Delay(1);   //display data input directon select:page优先

for(i=0;i<70;i++)             //列的地址,共96列,when use gray mode
  {   
     SpisendCode(0x13);    //column address write commond
     SpisendData(134+i);   //column address  从134~204

     SpisendCode(0xb1);    //page address write commond
     SpisendData(0);       //page address  
   for(j=0;j<5;j++)        //20 page,now maybe 10page
     {      
	 temp=Half_Char(pp[i*5+j]&0x0f);
	 SpisendCode(0x1d);   //data write commond
	 SpisendData(temp);   //data 
// Delay(100);
	 temp=Half_Char((pp[i*5+j]&0xf0)>>4);
	 SpisendCode(0x1d);   //data write commond
	 SpisendData(temp);   //data 
//	  Delay(100);
     }
  }
}
/*===========================================
40宽x40高  200个字节,定位从0列~208,page10~19
**********************************************/   
void Display_Movecir(unsigned char k)  //cir的起始位置
{
 unsigned char i,j,temp,graymode;

SpisendCode(0x85);Delay(1);   //display data input directon select:page优先

for(i=0;i<40;i++)             //列的地址,共96列,when use gray mode
  { 
     SpisendCode(0x13);       //column address write commond
     SpisendData(k+i);        //column address  从 k~k+40,

     SpisendCode(0xb1);       //page address write commond
     SpisendData(10);          //page address  10~19
   for(j=0;j<5;j++)           //20 page,now maybe 10page
     {
	 switch(k/20)
	  {
	   case 0:graymode=1;break;
	   case 1:graymode=2;break;
       case 2:
	   case 3:
	   case 4:graymode=3;break;	  
	   }
//一个字节分2page
     SpisendCode(0xb1);       //page address write commond
     SpisendData(10+j*2);          //page address  10~19
	 temp=Grayhalf_Char(cir[i*5+j]&0x0f,graymode);
	 if(temp)
	    {
	      SpisendCode(0x1d);   //data write commond
          SpisendData(temp);   //data 	
		}
//-------------------------------------------------------
     SpisendCode(0xb1);       //page address write commond
     SpisendData(10+j*2+1);          //page address  10~19
	 temp=Grayhalf_Char((cir[i*5+j]&0xf0)>>4,graymode);
	 if(temp)
	    {
    	 SpisendCode(0x1d);   //data write commond
	     SpisendData(temp);   //data 
		}
     }
  }
}
//===================================

void Block_ClearScreen(unsigned char start,unsigned char end )   //start,end指列地址,page指10~19
{
  unsigned char i,j;

SpisendCode(0x85);   //display data input directon select:page优先

for(j=start;j<end;j++)    
  {	
     SpisendCode(0x13);  //column address write commond
     SpisendData(j);     //column address  
   for(i=10;i<20;i++)             //页的地址,共20pages,when use gray mode
     { 
     SpisendCode(0xb1);  //page address write commond
     SpisendData(i);     //page address 
      
	 SpisendCode(0x1d);   //data write commond
	 SpisendData(0x00);   //data 
     }
  }

}
//====================================
void main()
{
unsigned char k;
LcdInitial();
ClearScreen();
ScanScreen();
//ClearScreen();
Display_Char();
Display_Pic();
Block_ClearScreen(0,120);
for(k=0;k<100;k=k+20)
    {
	  Display_Movecir(k);	
 	  Display_Movecir(80-k);	
	} 

while(1);

}


unsigned char code beijing2008[192]=
{ 
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0x88,0x20,0x70,0x11,0x00,0x0E,0x00,0x00,//B0
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,//e1
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,//i2
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x00,0xC0,0x00,0x80,0x80,0x80,0x98,0x80,0x98,0x7F,0x00,0x00,0x00,0x00,//j3
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,//i4
/* (8 X 16 , 宋体 ) */

0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20,//n5
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x00,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93,0x80,0x60,0x00,0x00,//g6
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 7
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00,//28
/* (8 X 16 , 宋体 ) */

0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,//09
/* (8 X 16 , 宋体 ) */

0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,//010
/* (8 X 16 , 宋体 ) */

0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,//811
/* (8 X 16 , 宋体 ) */
};

unsigned char code pp[350]=
{
0x00,0x00,0x00,0x0E,0x00,0x00,0x80,0x43,0xFF,0x00,0x00,0xF8,0xE3,0xFF,0x01,0x00,
0xFF,0xF3,0xFF,0x03,0xC0,0xFF,0xF3,0xFF,0x03,0xE0,0xFF,0xF9,0xFF,0x03,0xF0,0xF9,
0xF9,0xFF,0x07,0xF0,0xF9,0xF9,0xFF,0x07,0xF8,0xF8,0xF9,0xFF,0x07,0xF8,0xF0,0xF9,
0xFF,0x07,0xF8,0xF0,0xF9,0xFF,0x07,0xFC,0xF0,0xB9,0xFF,0x07,0xFC,0xF1,0x01,0xFF,
0x07,0xFE,0xF1,0x01,0xFE,0x07,0xFE,0xF1,0x01,0xFE,0x0F,0xFE,0xF1,0x01,0xFC,0x0F,
0xFE,0xF1,0x01,0xFC,0x0F,0xFE,0xF1,0x01,0xFC,0x0F,0xFE,0xF1,0x03,0xFC,0x0F,0xFE,
0xF1,0x03,0xFC,0x0F,0xFE,0xF1,0x7F,0xF8,0x0F,0xFE,0xF1,0xFF,0xF8,0x0F,0xFE,0xF1,
0xFF,0xF8,0x0F,0xFE,0x01,0xFF,0xF8,0x0F,0xFE,0x01,0xFE,0xF8,0x0F,0xFE,0x01,0xFC,
0xF8,0x0F,0xCE,0x01,0x7C,0xF8,0x0F,0xC6,0x01,0x00,0xF8,0x0F,0x86,0x01,0x00,0xFC,
0x0F,0x86,0x01,0x00,0xFC,0x0F,0x86,0x01,0x00,0xFC,0x03,0x86,0xF1,0x00,0xFC,0x01,
0x86,0xF1,0x00,0xFE,0x01,0x8E,0xF1,0x00,0xFE,0x00,0x8E,0x71,0x00,0xFF,0x00,0xCE,
0x01,0xC0,0x7F,0x00,0xFE,0x01,0xE0,0x7F,0x00,0xFE,0x01,0xC6,0x7F,0x00,0xFC,0x01,
0xC6,0x3F,0x00,0xFC,0x01,0xC7,0x3F,0x00,0xFC,0x01,0x87,0x3F,0x00,0xFC,0xF9,0x87,
0x1F,0x04,0xFC,0xF8,0x0F,0x0F,0x0E,0xFC,0xF8,0x0F,0x0F,0x0E,0xF8,0xFC,0x0F,0x06,
0x0F,0xF8,0xFC,0x0F,0x00,0x0F,0xF8,0xFC,0x1F,0x80,0x0F,0x78,0xFC,0x1F,0x80,0x0F,
0x78,0xFC,0x3F,0xC0,0x0F,0x78,0xFC,0x3F,0xC0,0x0F,0x70,0xFC,0x7F,0xE0,0x0F,0x70,
0xFE,0x7F,0xE0,0x07,0x30,0xFE,0xFF,0xF0,0x07,0x00,0xFE,0xFF,0xF1,0x07,0x00,0xFE,
0xFF,0xFF,0x03,0x00,0xFE,0xFF,0xFF,0x03,0x00,0xFE,0xFF,0xFF,0x01,0x00,0xFE,0xFF,
0xFF,0x03,0x00,0xFE,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,
0x01,0x00,0x80,0xFF,0xFF,0x01,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

unsigned char code cir[200]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0x03,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x78,0x00,0x1E,0x00,0x00,0x1C,
0x00,0x78,0x00,0x00,0x06,0x00,0xE0,0x00,0x00,0x03,0x00,0xC0,0x01,0x80,0x01,0x00,
0x80,0x01,0xC0,0x01,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x03,0x60,0x00,0x00,0x00,
0x06,0x60,0x00,0x00,0x00,0x0C,0x70,0x00,0x00,0x00,0x0C,0x30,0x00,0x00,0x00,0x0C,
0x30,0x00,0x00,0x00,0x0C,0x30,0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x18,0x30,
0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x18,0x30,0x00,
0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x0C,0x30,0x00,0x00,0x00,0x0C,0x70,0x00,0x00,
0x00,0x0C,0x60,0x00,0x00,0x00,0x0E,0x60,0x00,0x00,0x00,0x06,0xC0,0x00,0x00,0x00,
0x03,0xC0,0x01,0x00,0x80,0x03,0x80,0x03,0x00,0x80,0x01,0x00,0x07,0x00,0xC0,0x00,
0x00,0x0E,0x00,0x70,0x00,0x00,0x1C,0x00,0x38,0x00,0x00,0xF8,0x00,0x1F,0x00,0x00,
0xE0,0xFF,0x07,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

⌨️ 快捷键说明

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