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

📄 lcd240128.c

📁 液晶 OCM/TG240128 驱动 编程语言: C 原产品硬件ATMega128/1280 ,晶振14.7456M 软件AVR ICC7.14C 破解版 由产品源码中提取,详细的
💻 C
📖 第 1 页 / 共 2 页
字号:
  write_comm(COM_SET_AUTOWRITE);
  for(j=0;j<32;j++)
  {
    for(i=0;i<width*2;i++)
      write_auto(data1);
    for(i=0;i<width*2;i++)
      write_auto(data2);
  }
  write_comm(COM_SET_AUTORESET);
}

/**********************************************************************
* Name: 
* Desc: 在(x0,y0)处显示(8*xl) * yl点阵的图形-
*       x0(0,29), y0(0,127)
**********************************************************************/

void disp_img(unsigned int x0, unsigned int y0, unsigned int xl, unsigned int yl, const U8 *img)
{
  U16 i, j;
  U16 pos;
  const U8* pt;
  
  pos = ADDR_G + x0*width + y0;//count the address
   pt = img;
  
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      write_xd(pos+j*width+i, COM_SET_ADDRESSPOINTER);
      //write_od( pgm_read_byte(img + j*xl+i), 0xc0);
      write_od( (*pt++), COM_SET_WINCADP);
    }
  } 
}

/**********************************************************************
* Name: 
* Desc: 在addr处显示row_yl行(每行row_xl个)8xl*yl的文字
**********************************************************************/

 // disp_hanzi   (  0x03e5,     4,    32,      4个字,      1行,           wel) 
void disp_hanzi(U16 addr, U8 xl, U8 yl, U8 row_xl, U8 row_yl, const unsigned char *chn)
{
  U16 i, j, k, m;
  const U8* pt;
  
  pt = chn;
  
  for(m=0;m<row_yl;m++)
  {
    for(k=0;k<row_xl;k++)
    {
      for(j=0;j<yl;j++)
      {
        for(i=0;i<xl;i++)
        {
          write_xd(addr+m*yl*width+k*xl+j*width+i, COM_SET_ADDRESSPOINTER);
         // write_od((chn + (m*row_xl*xl*yl)+(k*xl*yl)+(j*xl)+i), 0xc0);  
          write_od((*pt++), COM_SET_WINCADP);  
                      
        }
      }
    }
  }
}

/**********************************************************************
* Name: 
* Desc: 在(x0,y0)处显示xl*yl点阵汉字
*       x0 = (0-15), y0 = (0,29)
**********************************************************************/
 
 

/**********************************************************************
* Name: 
* Desc: 显示字符
**********************************************************************/

void disp_char(U8 *ch)
{
  U16 i, j;
  write_xd(ADDR_G, COM_SET_ADDRESSPOINTER); //Set address pointer
  write_comm(COM_SET_AUTOWRITE);           //Set data auto write
  for(j=0;j<9;j++)
  {
    for(i=0;i<width;i++)
      write_auto(ch[j*width+i]);
  }
  write_comm(COM_SET_AUTORESET);  //Auto reset
}


/*****************************************************************************
* name : DispString_I()
* desc : 使用LCD内部字体
* parameter: X:line(0-15), Y:column(0-30)
*****************************************************************************/
void DispString_I(U8 x, U8 y, char *string) //use the LCD font
{
 char *pt;
 U16 pos; 

 pos = x*width + y;//计算取得显示地址

 write_xd(pos, COM_SET_ADDRESSPOINTER);//定位显示地址光标
 write_comm(COM_SET_AUTOWRITE);  //开自动写
  
 pt = string;
 while(*pt!='\0')  
  write_auto((U8)*pt++-0x20);
  
 write_comm(COM_SET_AUTORESET); //复位自动写

}

/*****************************************************************************
* name : DispString()
* desc :  use the font myself defined 
* parameters:X:line(0-15), Y:column(0-30)
*****************************************************************************/

void DispString(unsigned char x, unsigned char y,  char* string)
{
 char* pt;
 const  unsigned char* p; 
 unsigned char ch;
 unsigned char  j; 
 U16 pos;
 
  pt = string;  
 
  // write_comm(COM_SET_AUTOWRITE);  //开自动写 
   pos = ADDR_G + x*width + y ; 
  
  do
  {
   
    ch = *pt++; 
    p = &ASCII8X16E[0]+((unsigned char)ch - 0x20) * 16; //8X16
    for(j=0;j<16;j++)
    {
     //for(i=0;i<8/8;i++)
     {
       write_xd(pos+j*width, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od((*p++), COM_SET_WINCADP);
      }
   }
   pos++;
  } while((*pt)!='\0'); 
   
   //字符串结束标志ch='\0'
 // write_comm(COM_SET_AUTORESET); //复位自动写
}

 
 
void DispString6X12(unsigned char x, unsigned char y,  char* string)
{
 char* pt;
 const  unsigned char* p; 
 unsigned char ch;
 unsigned char j; 
 unsigned char y1=0;
 U16 pos;
 
  pt = string;  
 
 
  pos = ADDR_G + x*width + y ; 
  // write_comm(COM_SET_AUTOWRITE);  //开自动写 
  do
  {
   // pos = ADDR_G + (x+3)*width*8 + y + y1++; 
    ch = *pt++; 
    p = &ASCII6X12E[0]+((unsigned char)ch - 0x20) * 12; //6X12
    for(j=0;j<12;j++)
    {
     //for(i=0;i<8/8;i++)
     {
       write_xd(pos+j*width, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od((*p++), COM_SET_WINCADP);
      }
   }
  pos++;
  } while((*pt)!='\0'); 
   
   
   
   
   //字符串结束标志ch='\0'
 // write_comm(COM_SET_AUTORESET); //复位自动写
}

void PDispString6X12(unsigned char x, unsigned char y,  char* string)
{
 char* pt;
 const  unsigned char* p; 
 unsigned char ch;
 unsigned char  j; 
  U16 pos;
 U8  buf;
 U8  bit;
 
  pt = string;  
 
  // write_comm(COM_SET_AUTOWRITE);  //开自动写 
 
  pos = ADDR_G + x*width + y/8 ;
  do
  {
   
   
	
	bit = y%8;
    ch = *pt++; 
    p = &ASCII6X12E[0]+((unsigned char)ch - 0x20) * 12; //8X16
    for(j=0;j<12;j++,p++)
    {
	   buf = *p >> (bit);
       write_xd(pos+j*width, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od(buf|ReadData(pos+j*width), COM_SET_WINCADP);
	   
	   if(bit)
	   { 
	     buf = *p << (8-bit);
	     write_xd(pos+j*width+1, COM_SET_ADDRESSPOINTER);	// +i/8 
         write_od(buf|ReadData(pos+j*width+1), COM_SET_WINCADP);
		 
	   }
	   
    
   }
   
   pos++;
   
  } while((*pt)!='\0'); 
   
   //字符串结束标志ch='\0'
 // write_comm(COM_SET_AUTORESET); //复位自动写
}

/*****************************************************************************
* name : DispStringP()
* desc :  use the font myself defined 
*        精确定位于每像素输出
*
* parameters:X:line(0-127), Y:column(0-239)
*****************************************************************************/

void PDispString(unsigned char x, unsigned char y,  char* string)
{
 char* pt;
 const  unsigned char* p; 
 unsigned char ch;
 unsigned char  j; 
  U16 pos;
 U8  buf;
 U8  bit;
 
  pt = string;  
 
  // write_comm(COM_SET_AUTOWRITE);  //开自动写 
 
  pos = ADDR_G + x*width + y/8 ;
  do
  {
   
   
	
	bit = y%8;
    ch = *pt++; 
    p = &ASCII8X16E[0]+((unsigned char)ch - 0x20) * 16; //8X16
    for(j=0;j<16;j++,p++)
    {
	   buf = *p >> (bit);
       write_xd(pos+j*width, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od(buf|ReadData(pos+j*width), COM_SET_WINCADP);
	   
	   if(bit)
	   { 
	     buf = *p << (8-bit);
	     write_xd(pos+j*width+1, COM_SET_ADDRESSPOINTER);	// +i/8 
         write_od(buf|ReadData(pos+j*width+1), COM_SET_WINCADP);
		 
	   }
	   
    
   }
   
   pos++;
   
  } while((*pt)!='\0'); 
   
   //字符串结束标志ch='\0'
 // write_comm(COM_SET_AUTORESET); //复位自动写
}

/**********************************************************************
* Name: Printf
* Desc: 字符格式化输出显示
**********************************************************************/
void Printf(U8 x, U8 y, char *fmt, ...)
{
   char  szString[40];
        
   va_list 	ap;
   va_start(ap, fmt);   
   vsprintf(szString, fmt, ap);   
   DispString(x, y, szString);
   va_end(ap);     
}
void Printf6X12(U8 x, U8 y, char *fmt, ...)
{
   char  szString[50];
        
   va_list 	ap;
   va_start(ap, fmt);   
   vsprintf(szString, fmt, ap);   
   DispString6X12(x, y, szString);
   va_end(ap);     
}

void PPrintP(U8 x, U8 y, char *fmt, ...)
{
   char  szString[40];
        
   va_list 	ap;
   va_start(ap, fmt);   
   vsprintf(szString, fmt, ap);   
   PDispString(x, y, szString);
   va_end(ap);     
}
void PPrintf6X12(U8 x, U8 y, char *fmt, ...)
{
   char  szString[50];
        
   va_list 	ap;
   va_start(ap, fmt);   
   vsprintf(szString, fmt, ap);   
   PDispString6X12(x, y, szString);
   va_end(ap);     
}
/*****************************************************************************
* name : WriteHz()
* desc : 显示汉字
* param: X:line(0-127)可微调间距, Y:column(0-30)不可缩,除非用点阵输出
*****************************************************************************/

void DispHz(unsigned char x, unsigned char y,unsigned char hz)
{
 const  unsigned char* p; 
 unsigned char i, j; 
// unsigned char y1=0;
 U16 pos;
  
   
    pos = ADDR_G + x*width + y; 
    p = &HZST16X16[0]+ hz* 32; //8X16
    for(j=0;j<16;j++)
    {
     for(i=0;i<2;i++)
     {
       write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od((*p++), COM_SET_WINCADP);
      }
   }
 }
 
 
 
 void DispHz12(unsigned char x, unsigned char y,unsigned char hz)
{
 const  unsigned char* p; 
 unsigned char i, j; 
// unsigned char y1=0;
 U16 pos;
  
   
    pos = ADDR_G + x*width + y; 
    p = &ST12X12[0]+ hz* 24; //
    for(j=0;j<12;j++)
    {
     for(i=0;i<2;i++)
     {
       write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od((*p++), COM_SET_WINCADP);
      }
   }
 } 
 
 
 


 
 
  void PDispHz12(unsigned char x, unsigned char y,unsigned char hz)
{
 const  unsigned char* p; 
 unsigned char i, j; 
// unsigned char y1=0;
 U16 pos;
  
   
    pos = ADDR_G + x*width + y; 
    p = &ST12X12[0]+ hz* 24; //
    for(j=0;j<12;j++)
    {
     for(i=0;i<2;i++)
     {
       write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od((*p++)|ReadData(pos+j*width+i), COM_SET_WINCADP);
      }
   }
 } 
 
 
 
/*****************************************************************************
* name: void ReDisp(U8 x0, U8 y0, U8 x, U8 y)
* decs:  redisplay the lcd 
*       x(0,16*8-1), Y(0,29)
*      while write to the lcd it will read from the lcd ram first 
*****************************************************************************/

void ReDisp(U8 x0, U8 y0, U8 x, U8 y)
{ 
   U16 pos;    
   U8  bit;
   U8  i,j;
    
  // if(x<16&&y<30)
   { 
    pos = ADDR_G + x0*width + y0 ;//绝对坐标点
  
    for(i=0;i<(x-x0);i++)
	{
	 for(j=0;j<(y-y0);j++)
      {
	    bit  = ~ReadData(pos + i*width+j);	//
        write_xd(pos + i*width+j, COM_SET_ADDRESSPOINTER);//set address pointer
        write_od(bit, COM_SET_WINCADP);       //write the data
      }
	} 	
  }
}
/*****************************************************************************
* name :  
* desc :    
* param: x:line(0-127)可微调间距, y:column(0-30)点阵输出
*****************************************************************************/

void LCD_ClrRect(U8 x0, U8 y0, U8 x, U8 y)
{
  U16 pos;    
   U8  bit;
   U8  i,j;
    
   if(x<16&&y<30)
   { 
    pos = ADDR_G + x0*width*8 + y0 ;//绝对坐标点
  
    for(i=0;i<(x-x0)*8;i++)
	{
	 for(j=0;j<(y-y0);j++)
      {
	    bit  = 0x00;	//
        write_xd(pos + i*width+j, COM_SET_ADDRESSPOINTER);//set address pointer
        write_od(bit, COM_SET_WINCADP);       //write the data
      }
	} 	
  }
}

/*****************************************************************************
* name :  
* desc : 显示坐标值
* param: y:line(0-127)可微调间距, x:column(0-30)点阵输出
*****************************************************************************/

void DispZuobiao(unsigned char x, unsigned char y,unsigned char dz)
{
 const  unsigned char* p; 
 unsigned char i, j; 
 U16 pos;


  pos = ADDR_G + y*width + x; 
  p = &Zuobiao[0]+ dz * 10; //8X16
  for(j=0;j<5;j++)
  {
     for(i=0;i<2;i++)
     {
       write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER);	// +i/8 
       write_od((*p++), COM_SET_WINCADP);
      }
   }
 }
 


//================================ The end ===================================//

⌨️ 快捷键说明

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