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

📄 lcd.c

📁 128X64点阵LCD驱动电路及源程序。可完成点、线、圆、英文字符、汉字显示。液晶驱动芯片为12864B,开发环境为KEIL C uVersion2。
💻 C
📖 第 1 页 / 共 5 页
字号:
                {
                   if(UnPrint==0)//正常打印
                   {
                   	  TemCh=mask[yh%WZIMOSIZE]& SmallZiMo[(*(TxtBuf+i)-MDEL)][xh];
                     	if(TemCh!=0)
                          draw_pixel(xhh % MaxHdots, yhh % MaxVdots, Color);
                        else
                        {
                           if(!Color)
                             draw_pixel(xhh % MaxHdots, yhh % MaxVdots, 1);
                        }
                   }
                   else //清除打印
                   {
                   	  TemCh=mask[yh%WZIMOSIZE]& SmallZiMo[(*(TxtBuf+i)-MDEL)][xh];
                     	if(TemCh!=0)
                          draw_pixel(xhh % MaxHdots, yhh % MaxVdots, ~Color);
                   }
                   yhh++;
                }
                xhh++;
            }
        }
        /*加1列间距*/
        if(UnPrint==0)//正常打印
           B_DrawLine(xhh, Sy, xhh, Sy+7, !Color);
        else
           B_DrawLine(xhh, Sy, xhh, Sy+7, ~Color);

        xhh++;
    }
  }
}
/*
**********************************************************************
函数名: B_Print_S1
参数:
      ASCII字符数组首地址TxtBuf
      Len字符个数
      起点座标(Sx,Sy)
      Type样式(常规1、反转2、下划线4、强调8)
      Justy对齐方式(left-0、center-1、right-2、absolute-3)
      UnPrint清除  UnPrint=0 default, UnPrint=1(Un-Print)
返回值: 无
作用: 用于在屏幕指起心点处写入字符串,样式为默认样式2
      default--8X16点阵字,字符间距1列,不定宽度
**********************************************************************
*/
extern void B_Print_S1(uchar idata *TxtBuf, uchar Len,
       uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint)
{
  uchar xh, yh, xhh, yhh;
  uchar i,j;
  bit Color;
  uchar TemH;
  uchar TemL;

  if((Type&0x02)==0x02)//反转
    Color=0;
  else
    Color=1;
  //确定对齐方式
  switch(Justy)
  {
  	case 0: xhh=0;
  	        break;//左对齐
  	case 1: 
  	        if(Len*8<=128)
  	           xhh=(128-8*Len)/2;
  	        else
  	           xhh=8*Len/2;
  	        break;//居中
  	case 2: 
  	        if(8*Len<=128)
  	           xhh=128-8*Len;
  	        else
  	           xhh=8*Len;   
  	        break;//右对齐
  	case 3: xhh=Sx;
  	        break;//指定起点
  }

  for(i=0;i<Len;i++)
  {

     if(*(TxtBuf+i)==ASC_SPACE)//若字符为SPACE
     {
     	//空5列
        B_DrawRect(xhh, Sy, xhh+8, Sy+15, 1, ~Color);
     	  xhh+=8;
     }
     else
     {
        /*显示字形*/
        for(xh=0;xh<8;xh++)
        {
               TemH=DfZiMo[(*(TxtBuf+i)-MDEL)][2*xh];
               TemL=DfZiMo[(*(TxtBuf+i)-MDEL)][2*xh+1];

               /*2.如果第一列为空,则不作图,并且不移动作图位置,即为不定宽度*/
     	       if((TemH==0x00)&&(TemL==0x00))
     	       {
     	           xhh+=0;//
     	       }
     	       else
     	       {
     	           yhh=Sy;
     	           for(j=0;j<2;j++)
     	           {
     	           	      TemH=DfZiMo[(*(TxtBuf+i)-33)][2*xh+j];
                        for(yh=0;yh<8;yh++)
                        {
                            if(UnPrint==0)//正常打印
                            {
                                if((mask[yh%8]& TemH)!=0x00)
                                   draw_pixel(xhh % MaxHdots, yhh % MaxVdots, Color);
                                else
                                {
                                   if(!Color)
                                      draw_pixel(xhh % MaxHdots, yhh % MaxVdots, 1);
                                }
                            }
                            else //清除打印
                            {
                                if((mask[yh%8]& TemH)!=0x00)
                                   draw_pixel(xhh % MaxHdots, yhh % MaxVdots, ~Color);
                            }
                            yhh++;
                        }
                  }
                  xhh++;
               }
        }
        /*加1列间距*/
        if(UnPrint==0)//正常打印
            B_DrawLine(xhh,Sy,xhh,Sy+15, !Color);
        else
            B_DrawLine(xhh,Sy,xhh,Sy+15, ~Color);
        xhh++;
    }
  }
}
/*
**********************************************************************
函数名: B_Print_S2
参数:
      ASCII字符数组首地址TxtBuf
      Len字符个数
      起点座标(Sx,Sy)
      Type样式(常规1、反转2、下划线4、强调8)
      Justy对齐方式(left-0、center-1、right-2、absolute-3)
      UnPrint清除  UnPrint=0 default, UnPrint=1(Un-Print)
返回值: 无
作用: 用于在屏幕指起心点处写入字符串,样式为默认样式1
      Micro样式--5X8点阵字,字符间距1列,不定宽度
**********************************************************************
*/
extern void B_Print_S2(uchar idata *TxtBuf, uchar Len,
       uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint)
{
  uchar xh, yh, xhh, yhh;
  uchar i;
  bit Color;

  if((Type&0x02)==0x02)//反转
    Color=0;
  else
    Color=1;
  //确定对齐方式
  switch(Justy)
  {
  	case 0: xhh=0;
  	        break;//左对齐
  	case 1: 
  	        if(Len*5<=128)
  	           xhh=(128-5*Len)/2;
  	        else
  	           xhh=5*Len/2;
  	        break;//居中
  	case 2: 
  	        if(5*Len<=128)
  	           xhh=128-5*Len;
  	        else
  	           xhh=5*Len;   
  	        break;//右对齐
  	case 3: xhh=Sx;
  	        break;//指定起点
  }
  for(i=0;i<Len;i++)
  {
     if(*(TxtBuf+i)==ASC_SPACE)//若字符为SPACE
     {
     	//空5列
        B_DrawRect(xhh, Sy, xhh+5, Sy+7, 1, ~Color);
     	xhh+=5;
     }
     else
     {
         /*显示字形*/
         for(xh=0;xh<5;xh++)
         {
     	     /*2.此列为空,则不作图,并且不移动作图位置,即为不定宽度*/
     	     if(MicroZiMo[(*(TxtBuf+i)-MDEL)][xh]!=0x00)
     	     {
                yhh=Sy;
                for(yh=0;yh<WZIMOSIZE;yh++)
                {
                   if(UnPrint==0)//正常打印
                   {
                      if((mask[yh%WZIMOSIZE]& MicroZiMo[(*(TxtBuf+i)-MDEL)][xh])!=0)
                         draw_pixel(xhh % MaxHdots, yhh % MaxVdots, Color);
                      else
                      {
                         if(!Color)
                           draw_pixel(xhh % MaxHdots, yhh % MaxVdots, 1);
                      }
                   }
                   else //清除打印
                   {
                      if((mask[yh%WZIMOSIZE]& MicroZiMo[(*(TxtBuf+i)-MDEL)][xh])!=0)
                         draw_pixel(xhh % MaxHdots, yhh % MaxVdots, ~Color);
                   }
                   yhh++;
                }
                xhh++;
            }
        }
        /*加1列间距*/
        if(UnPrint==0)//正常打印
           B_DrawLine(xhh, Sy, xhh, Sy+7, !Color);
        else
           B_DrawLine(xhh, Sy, xhh, Sy+7, ~Color);
        xhh++;
    }
  }
}
/*
**********************************************************************
函数名: B_Print_S3
参数:
      ASCII字符数组首地址TxtBuf
      Len字符个数
      起点座标(Sx,Sy)
      Type样式(常规1、反转2、下划线4、强调8)
      Justy对齐方式(left-0、center-1、right-2、absolute-3)
      UnPrint清除  UnPrint=0 default, UnPrint=1(Un-Print)
返回值: 无
作用: 用于在屏幕指起心点处写入字符串,样式为默认样式4
      BigBold样式--16X32点阵字,字符间距2列,定宽度
**********************************************************************
*/
extern void B_Print_S3(uchar idata *TxtBuf, uchar Len,
       uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint)
{
  uchar xh, yh;
  uchar xhh, yhh;
  uchar i,j;
  uchar TemCh;
  bit Color;


  if((Type&0x02)==0x02)//反转
    Color=0;
  else
    Color=1;
  //确定对齐方式
  switch(Justy)
  {
  	case 0: xhh=0;
  	        break;//左对齐
  	case 1: 
  	        if(Len*16<=128)
  	           xhh=(128-16*Len)/2;
  	        else
  	           xhh=16*Len/2;
  	        break;//居中
  	case 2: 
  	        if(16*Len<=128)
  	           xhh=128-16*Len;
  	        else
  	           xhh=16*Len;   
  	        break;//右对齐
  	case 3: xhh=Sx;
  	        break;//指定起点
  }
  for(i=0;i<Len;i++)
  {
     if(*(TxtBuf+i)>='0'&&*(TxtBuf+i)<='9')
     {
         /*显示字形*/
         for(xh=0;xh<16;xh++)
         {
                yhh=Sy;
                for(j=0;j<4;j++)
                {
                     TemCh=(*(TxtBuf+i)-0x30)*4+xh/4;
                     TemCh=4*(xh%4)+j;
                     TemCh=GiantZiMo[(*(TxtBuf+i)-0x30)*4+xh/4][4*(xh%4)+j];
                     for(yh=0;yh<8;yh++)
                     {
                         if(UnPrint==0)//正常打印
                         {
                            if((mask[yh%WZIMOSIZE]& TemCh)!=0)
                               draw_pixel((xhh+xh) % MaxHdots, yhh % MaxVdots, Color);
                            else
                            {
                               if(!Color)
                                  draw_pixel((xhh+xh) % MaxHdots, yhh % MaxVdots, 1);
                            }
                         }
                         else //清除打印
                         {
                            if((mask[yh%WZIMOSIZE]& TemCh)!=0)
                               draw_pixel((xhh+xh) % MaxHdots, yhh % MaxVdots, ~Color);
                         }
                         yhh++;
                     }
                }
          }
          xhh+=16;
     }
  }
}
/*
**********************************************************************
函数名: B_Print_S4
参数:
      ASCII字符数组首地址TxtBuf
      Len字符个数
      起点座标(Sx,Sy)
      Type样式(常规1、反转2、下划线4、强调8)
      Justy对齐方式(left-0、center-1、right-2、absolute-3)
      UnPrint清除  UnPrint=0 default, UnPrint=1(Un-Print)
返回值: 无
作用: 用于在屏幕指起心点处写入字符串,样式为默认样式3
      FIXED样式--5X8点阵字,字符间距1列,定宽度
**********************************************************************
*/
extern void B_Print_S4(uchar idata *TxtBuf, uchar Len,
       uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint)
{
  uchar xh, yh, xhh, yhh;
  uchar i;
  bit Color;

  if((Type&0x02)==0x02)//反转
    Color=0;
  else
    Color=1;
  //确定对齐方式
  switch(Justy)
  {
  	case 0: xhh=0;
  	        break;//左对齐
  	case 1: 
  	        if(Len*6<=128)
  	           xhh=(128-6*Len)/2;
  	        else
  	           xhh=6*Len/2;
  	        break;//居中
  	case 2: 
  	        if(6*Len<=128)
  	           xhh=128-6*Len;
  	        else
  	           xhh=6*Len;   
  	        break;//右对齐
  	case 3: xhh=Sx;
  	        break;//指定起点
  }
  for(i=0;i<Len;i++)
  {
     if(*(TxtBuf+i)==ASC_SPACE)//若字符为SPACE
     {
     	//空5列
        B_DrawRect(xhh, Sy, xhh+5, Sy+7, 1, ~Color);
     	xhh+=5;
     }
     else
     {
         /*显示字形*/
         for(xh=0;xh<5;xh++)
         {
                yhh=Sy;
                for(yh=0;yh<WZIMOSIZE;yh++)
                {
                   if(UnPrint==0)//正常打印
                   {
                      if((mask[yh%WZIMOSIZE]& SmallZiMo[(*(TxtBuf+i)-MDEL)][xh])!=0)
                         draw_pixel(xhh % MaxHdots, yhh % MaxVdots, Color);
                      else
       

⌨️ 快捷键说明

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