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

📄 lm4229.h

📁 LM4229电子书阅读器
💻 H
📖 第 1 页 / 共 2 页
字号:
    write_line(x1,y1,x2,y1,flag);
	write_line(x2,y1,x2,y2,flag);
	write_line(x2,y2,x1,y2,flag);
	write_line(x1,y2,x1,y1,flag);
}
//===============================================================
//===============================================================
//			LM4229在指定位置画矩形面
//		   顶点(x1,y1)(x1,y2)(x2,y1)(x2,y2)
//		  	 	flag:0-擦除 1-显示
//=================================================================
   void write_rectarea(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag)
{
    unsigned char temp;
	unsigned char i;
    if(x1>x2)
	{
	    temp=x1;x1=x2;x2=temp; 
		temp=y1;y1=y2;y2=temp;
     }

	 for(i=0;i<=x2-x1;i++)
	 {
	    write_line(x1+i,y1,x1+i,y2,flag);
	 }

}
//========================================================================
//========================================================================
//				   在指定位置写汉字	  (16*16)
//			 flag:1-显示,0-反色显示  n: 显示个数
//	
//
//========================================================================
void write_hz(uchar x,uchar y,uchar n,uchar *hz_tab,uchar flag)
{
  uint place;
  uchar i,j,m;
  place=x*30+y;

 for(m=0;m<n;m++)  
 {
  for(i=0;i<16;i++)        //b行数据
  {
    write_data(place&0xff);   //写地址低8位
    write_data(place/256);    //写地址高8位
    write_com(0x24);  //设置地址
    write_com(0xb0);  //设置数据自动写
    for(j=0;j<2;j++)    //2列数据
    
	{ if(flag)
	  write_data(*(hz_tab+2*i+j));
	  else if(!flag)
	  write_data(~*(hz_tab+2*i+j));
	 }
    write_com(0xb2);    //自动复位
    place=place+30;     //换行
  }
  place=x*30+y+2*(m+1);//地址偏移
}
}
//==============================================================

//================================================================
//================================================================
//===============================================================
//         指定位置向LCD写入指定字符
//		    字符在自制的字库表中
//		  用来显示基本的操作界面比较方便
//            x:0-120,y:0-29
//================================================================
void write_ASK(uchar x,uchar y,uchar *cha,uchar flag)
{
  uint place,i=0;
  uchar length,c1,c2,j,k;
  for(length=0;cha[length]!=0;length++);
   do
    {
      c1=cha[i];      //取字符串的ASCII码
      c2=cha[i+1];
      place=x*30+y;
      if(c1<=128)        //#####小于128为字符,大于128为汉字
       {
        for(k=0;k<16;++k)     //字符设置为16*8
        {
          write_data(place&0xff);   //写入地址高位
          write_data(place/256);    //写入地址低位
          write_com(0x24);          //地址设置
          write_com(0xb0);          //设置数据自动写
         if(flag)
		  write_data(ASC_MSK[(c1-0x20)*16+k]); /*---例如:0的ASCII码为0x30,
          在ASC_MSK中的位置为0x10*16 ---16字节字码依次写入LCD---*/
         else
		  write_data(~(ASC_MSK[(c1-0x20)*16+k]));
		  write_com(0xb2);          //自动复位
          place=place+30;
        }
        if(y>28)            //y>28时候需要换行
          {x=x+16;y=0;}
        else                //否则,不换行,继续写下一个字符
          {y++;}
           i++;
      }
     else                   //#####c1大于128为汉字
      {
        for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)  //找到汉字
         {
           if(c1==GB_16[j].Index[0]&&c2==GB_16[j].Index[1])
           break;            //汉字找到则跳出   
         }
        if(j<sizeof(GB_16)/sizeof(GB_16[0]))   //------如果汉字在子码表内
         {
          for(k=0;k<16;k++)     //字符设置为16*8
           {
            write_data(place&0xff);   //写入地址高位
            write_data(place/256);    //写入地址低位
            write_com(0x24);          //地址设置
            write_com(0xb0);          //设置数据自动写
            if(flag)
			{write_data(GB_16[j].Msk[k*2]);
			 write_data(GB_16[j].Msk[k*2+1]);} //16*16,每行2字节
            else
			{write_data(~GB_16[j].Msk[k*2]);
			 write_data(~GB_16[j].Msk[k*2+1]);} //16*16,每行2字节

			write_com(0xb2);                 //自动复位
            place=place+30;                  //下一行
           }
         }
        else             //-----没找到对应汉字则涂黑
         {
          for(k=0;k<16;k++)     //字符设置为16*8
           {
            write_data(place&0xff);   //写入地址高位
            write_data(place/256);    //写入地址低位
            write_com(0x24);          //地址设置
            write_com(0xb0);          //设置数据自动写
            write_data(0x00);
		   	write_data(0x00); 
            write_com(0xb2);             //自动复位
            place=place+30;              //下一行
           }
         }
        if(y>27)      //-------换行
         {x+=16;y=0;}
        else          //--------不用换行,则下一个字
         {y+=2;}
         i+=2;
      } 
    }
   while(i<length);
}
//========================================================================
//========================================================================	   


/*
//========================================================================
//			   在指定位置写汉字	  (16*16)
//			 flag:1-显示,0-反色显示  n: 显示个数
//		upline:1-带上划线 0:不带上划线 downline:1-带下划线 0:不带下划线
//=========================================================================
void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag,bit upline,bit underline)
{
  uint place;
  uchar i,j,m,t;
   for (m=0;m<n;m++)
	{  	   半个汉字
	    	   
		   	
      place=x*30+y;
      for(i=0;i<16;i++)        //b行数据
    {
       write_data(place&0xff);   //写地址低8位
       write_data(place/256);    //写地址高8位
       write_com(0x24);  //设置地址
       write_com(0xb0);  //设置数据自动写
      	if(upline)
	{ 
	 if(i=0) 
	    { 
		   for(j=0;j<2;j++)    //2列数据
          {
		    if(flag)
		     {write_data(0xff);}
   	       }
		 }
	 else
		 {
		   for(j=0;j<2;j++)
		   { if(flag)
		     write_data(hz(2*i+j));
		    if(!flag)
		     write_data(~hz(2*i+j));
		    }
		 }
	}
	    if(downline)
	{ 
	 if(i=15) 
	    { 
		   for(j=0;j<2;j++)    //2列数据
          {
		    if(flag)
		     {write_data(0xff);}
   	       }
		 }
	 else
		 {
		   for(j=0;j<2;j++)
		   { if(flag)
		     write_data(hz(2*i+j));
		    if(!flag)
		     write_data(~hz(2*i+j));
		    }
		 }
	 }	 
	   write_com(0xb2);    //自动复位
       place=place+30;     //换行
    }
  }	   
}
*/		   
		   

//===================================================

/*
//--------------------------------------------
//         LM4229在指定位置显示32*32汉字
//--------------------------------------------
void write_pic(uchar x,uchar y,uchar *tab_pic)
{
 uint place;
 uchar i,n;
 place=x*30+y;

 for(n=0;n<5;n++)   //5个汉字
 {
   for(i=0;i<32;i++)   //32*32
    {
     write_data(place&0xff);
     write_data(place/256);
     write_com(0x24);  //设置地址
     write_com(0xb0);  //设置数据自动写
     write_data(~tab_pic[4*i+0+128*n]);
     write_data(~tab_pic[4*i+1+128*n]);
     write_data(~tab_pic[4*i+2+128*n]);
     write_data(~tab_pic[4*i+3+128*n]);
     write_com(0xb2);    //自动复位
     place=place+30;
    }
   place=x*30+y+4*(n+1);
 }
}
//===============================================
*/



///////////////////////////////////////////////////
//=====================================================
//	 与后面函数配合显示一个16*16完整汉字
//
//
//
//=======================================================
/*
void write_hz1(uchar x,uchar y,uchar *tab_hz)
{
  uint place;
  uchar k,temp;
  place=30*x+y;
  
  temp=tab_hz[0];
  for(k=0;k<16;k++)     //字符设置为16*8
   {
            write_data(place&0xff);   //写入地址高位
            write_data(place/256);    //写入地址低位
            write_com(0x24);          //地址设置
            write_com(0xb0);          //设置数据自动写
            
			
			write_data(tab_hz[k*2+1]);			
			delay_lcd(2);
			tab_hz[2*k]=tab_hz[2*(k+1)];			
			write_data(tab_hz[k*2]); //16*16,每行2字节	    
		
			write_com(0xb2);                 //自动复位
            place=place+30;                  //下一行
           }
 tab_hz[31]=temp;

}
*/
//========================================================================
//========================================================================
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////


⌨️ 快捷键说明

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