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

📄 lcd.c

📁 LCD.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
{
   unsigned char page;
   CurRow = urow;
   CurCol = ucol;
	
   switch(urow)
   {
      case 1:
             page=0;
             CurOffset=1;
             break;
      case 2:
             page=1;
             CurOffset=2;
             break;
      case 3:
             page=3;
             CurOffset=1;
             break;
      case 4:
             page=4;
             CurOffset=2;
             break;
      case 5:
             page=6;
             CurOffset=1;
             break;
   }
   SetPageCol(page,ucol);
}

void disp_char(unsigned char c)
{
   unsigned char k,j,uPage,uCol,ch_r,ch_w;
   unsigned char width;
   unsigned char len;
   uPage = GetPage();
   uCol = GetCol();
   len=sizeof(ASC_16)/sizeof(ASC_16[0]);
   for(k=0;k<len;k++)
   {
      if(c == ASC_16[k].Index[0] )
         break;
   }
   if(k<len)
   {
      if(c=='-'||c==':')
         width=ASC_CHR_WIDTH-2;
      else if(c=='|')
         width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
      else
         width=ASC_CHR_WIDTH;
		
      if(CurOffset==1) //下半部是写半个字节
      {
         for(j=0;j<width;j++)
         {
            SetPageCol(uPage,uCol+j);
            ch_w=ASC_16[k].Msk[j];
            if(uCol+j<64)
               write_LCD(LEFT,DATA,ch_w);
            else
               write_LCD(RIGHT,DATA,ch_w);
         }
         SetPageCol(uPage+1,uCol);
			
         for(j=0;j<width;j++)
         {
            SetPageCol(uPage+1,uCol+j);
            if(uCol+j<64)
               ch_r=read_LCD(LEFT);
            else
               ch_r=read_LCD(RIGHT);
            ch_r&=0xf0;
            ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;
            ch_w|=ch_r;
            SetPageCol(uPage+1,uCol+j);
            if(uCol+j<64)
               write_LCD(LEFT,DATA,ch_w);
            else
               write_LCD(RIGHT,DATA,ch_w);
         }
      }
      else //上半部是写半个字节
      {
         for(j=0;j<width;j++)
         {
            SetPageCol(uPage,uCol+j);
            if(uCol+j<64)
               ch_r=read_LCD(LEFT);
            else
               ch_r=read_LCD(RIGHT);
            ch_r&=0x0f;
            ch_w=ASC_16[k].Msk[j];
            ch_w=ch_w<<4;
            ch_w|=ch_r;
            SetPageCol(uPage,uCol+j);
            if(uCol+j<64)
               write_LCD(LEFT,DATA,ch_w);
            else
               write_LCD(RIGHT,DATA,ch_w);
         }
         SetPageCol(uPage+1,uCol);
         for(j=0;j<width;j++)
         {
            SetPageCol(uPage+1,uCol+j);
				
            ch_r=ASC_16[k].Msk[j];
            ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
            ch_r=ch_r>>4;
            ch_w=ch_w<<4;
            ch_w|=ch_r;
            SetPageCol(uPage+1,uCol+j);
            if(uCol+j<64)
               write_LCD(LEFT,DATA,ch_w);
            else
               write_LCD(RIGHT,DATA,ch_w);
         }
      }
   }
   SetPageCol(uPage,uCol+width);
}


void disp_hz(unsigned char *hz)
{
   unsigned char k,j,uPage,uCol,ch_r,ch_w;
   uPage = GetPage();
   uCol = GetCol();
   for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
   {
      if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
         break;
   }

   if(CurOffset==1)
   {
      for(j=0;j<ASC_HZ_WIDTH;j++)
      {
         SetPageCol(uPage,uCol+j);
         ch_w=GB_16[k].Msk[j];
         if(uCol+j<64)	write_LCD(LEFT,DATA,ch_w);
         else write_LCD(RIGHT,DATA,ch_w);
      }
      SetPageCol(uPage+1,uCol);

      for(j=0;j<ASC_HZ_WIDTH;j++)
      {
         SetPageCol(uPage+1,uCol+j);
         if(uCol+j<64)
            ch_r=read_LCD(LEFT);
         else
            ch_r=read_LCD(RIGHT);
         ch_r&=0xf0;
         ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
         ch_w|=ch_r;
         SetPageCol(uPage+1,uCol+j);
         if(uCol+j<64)
            write_LCD(LEFT,DATA,ch_w);
         else
            write_LCD(RIGHT,DATA,ch_w);
      }
      SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
   }

   else //汉字上半部是写半个字节
   {
      for(j=0;j<ASC_HZ_WIDTH;j++)
      {
         SetPageCol(uPage,uCol+j);
         if(uCol+j<64)
            ch_r=read_LCD(LEFT);
         else ch_r=read_LCD(RIGHT);
         ch_r&=0x0f;
         ch_w=GB_16[k].Msk[j];
         ch_w=ch_w<<4;
         ch_w|=ch_r;
         SetPageCol(uPage,uCol+j);
         if(uCol+j<64)
            write_LCD(LEFT,DATA,ch_w);
         else
            write_LCD(RIGHT,DATA,ch_w);
      }
      SetPageCol(uPage+1,uCol);
      for(j=0;j<ASC_HZ_WIDTH;j++)
      {
         SetPageCol(uPage+1,uCol+j);

         ch_r=GB_16[k].Msk[j];
         ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
         ch_r=ch_r>>4;
         ch_w=ch_w<<4;
         ch_w|=ch_r;
         SetPageCol(uPage+1,uCol+j);
         if(uCol+j<64)
            write_LCD(LEFT,DATA,ch_w);
         else
            write_LCD(RIGHT,DATA,ch_w);
      }
      SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
   }
}

void disp_str(unsigned char *p)
{
   unsigned char i=0;
   while(p[i]>0)
   {
      if(p[i] < 128)
      {	/* ASCII */
         disp_char(p[i]);
      }
      else
      {	/* 中文 */
         disp_hz(&p[i]);
         i++;
      }
      i++;
   }
}

/*************************************/
/*             绘点函数              */
/*************************************/
/* XX--(0-128) YY--(0-63) FLAG=1绘点   FLAG=0 清点 */
void GUI_Point(unsigned char xx,unsigned char yy,unsigned char flag)
{
   unsigned int y,ch;
   ch=yy%8;  //余数

   y=1;
   for(;ch!=0;)
   {
      y=y*2;
      ch--;
   }
   if(xx<64)
   {
      set_page_L(yy/8);
      set_col_addr_L(xx);
      ch=read_LCD(LEFT);
      set_col_addr_L(xx);
      if(flag)
         write_LCD(LEFT,DATA,ch|y);
      else
      {
         y=~y;
         ch&=y;
         write_LCD(LEFT,DATA,ch|y);
      }
   }
   else
   {
      set_page_R(yy/8);
      set_col_addr_R(xx-64);
      ch=read_LCD(RIGHT);
      set_col_addr_R(xx-64);
      if(flag)
         write_LCD(RIGHT,DATA,ch|y);
      else
      {
         y=~y;
         ch&=y;
         write_LCD(RIGHT,DATA,ch|y);
      }
   }
}

⌨️ 快捷键说明

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