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

📄 lcd.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 2 页
字号:
		  TL++;
	       }
	       break;
   case 0x85:  Y=Y%8; //12点阵
	       Z=Y*128+X;
	       ZL=Z+128;
	       T=CHAR*24;
	       TL=T+12;
	       for(i=0;i<12;i++)
	       {
		  LcdBuf[Z]=~ (HZ_12[T]|0x01);
		  LcdBuf[ZL]=~ HZ_12[TL];
		  Z++;
		  T++;
		  ZL++;
		  TL++;
	       }
	       break;
   default:    break;
  }
}
/*
void InitLcd(void)
{
 LcdCmd(0x3e); //关显示器
 delay(40);
 LcdCmd(0x3f); //开显示器
 delay(40);	//			  Y
 LcdCmd(0x3f); //开显示器
 delay(40);	//			  Y
 LcdCmd(0xc0); //定义显示起始行为0	  ^
 delay(40);	//			  |
 LcdCmd(0xb8); //设定Y地址为0(0—8)	  |
 delay(40);	//			  |
 LcdCmd(0x40); //设定X地址为0 ( 0—63)  -------------> X
 delay(40);
 LcdClr();
}
*/

void OutString(unsigned int  *STRING, unsigned int tt,const unsigned char *Adr,unsigned int TYPE)/*字符串输出*/
{
  unsigned char XX,YY,Len,i;
  Len=*Adr; Adr=Adr+1;
  STRING=STRING+tt;
  for(i=0;i<Len;i++)
  {
   XX=*Adr;  Adr=Adr+1;
   YY=*Adr;  Adr=Adr+1;
   LcdPutc(XX,YY,*STRING,TYPE);STRING=STRING+1;
  }
}
void OutStringCur(unsigned int	*STRING, unsigned int dt,const unsigned char *Adr,unsigned int at,unsigned int tt,unsigned int TYPE)/*字符串输出*/
{
  unsigned char XX,YY,Len,i;
  Len=tt; Adr=Adr+1+at;
  STRING=STRING+dt;
  for(i=0;i<Len;i++)
  {
   XX=*Adr;  Adr=Adr+1;
   YY=*Adr;  Adr=Adr+1;
   LcdPutc(XX,YY,*STRING,TYPE);STRING=STRING+1;
  }
}

void OutStringCurxy(UINT *STRING, UINT dt,const unsigned char *Adr,UINT at,UINT dy,UINT tt,UINT TYPE)/*字符串输出*/
{
  unsigned char XX,YY,Len,i;
  Len=tt; Adr=Adr+1+at;
  STRING=STRING+dt;
  for(i=0;i<Len;i++)
  {
   XX=*Adr;  Adr=Adr+1;
   YY=*Adr;  Adr=Adr+1;
   LcdPutc(XX,YY-dy,*STRING,TYPE);STRING=STRING+1;
  }
}

void MAP(UINT X1,UINT Y1,UINT X2,UINT Y2,const unsigned char *Table)
{
 unsigned int n,i,j,m;


 for(j=Y1;j<=Y2;j++)
 {
   n=(X2-X1+1)*(j-Y1);
   m=j*128+X1;
   for(i=X1;i<=X2;i++)
   {
       LcdBuf[m+i-X1]=Table[n+i-X1];
   };
 };
}


void DspMenu(unsigned int num,unsigned int tt,unsigned int AdrNum,unsigned int Type)/*显示菜单*/
{//num-菜单序号 tt-菜单字符串起始位置	AdrNum-菜单字符串输出地址
  OutString((unsigned int *)Menu[num],tt,MenuAdr[AdrNum],Type);/* Type=2=HZK16 ,Type=1=ASC8 */
}

void DspMenuCur(unsigned int num,unsigned int dt,unsigned int AdrNum,unsigned int at,unsigned int tt,unsigned int Type)/*显示菜单*/
{//num-菜单序号 dt-菜单字符串起始位置	AdrNum-菜单字符串输出地址
 //at-菜单字符串输出地址起始位置
 //tt-菜单字符串输出长度
  OutStringCur((unsigned int *)Menu[num],dt,MenuAdr[AdrNum],at,tt,Type);/* Type=2=HZK16 ,Type=1=ASC8 */
}

void DspMenuCurxy(UINT num,UINT dt,UINT AdrNum,UINT at,UINT dy,UINT tt,UINT Type)/*显示菜单*/
{ //num-菜单序号 dt-菜单字符串起始位置	 AdrNum-菜单字符串输出地址
  //at--菜单字符串输出地址起始位置
  //tt--菜单字符串输出长度
  //dy--菜单字符串输出Y地址偏移量
  OutStringCurxy((UINT *)Menu[num],dt,MenuAdr[AdrNum],at,dy,tt,Type);/* Type=2=HZK16 ,Type=1=ASC8 */
}
/*

void atoihex(unsigned int Q,struct  Asc_st FARDATA *Temptr)
{
   Temptr->b[0]=Q%16;Q=Q/16;
   Temptr->b[1]=Q%16;Q=Q/16;
   Temptr->b[2]=Q%16;Q=Q/16;
   Temptr->b[3]=Q%16;Q=Q/16;
}

void atochex(unsigned char Q,struct  Asc_st FARDATA *Temptr)
{
   Temptr->b[0]=Q%16;Q=Q/16;
   Temptr->b[1]=Q%16;Q=Q/16;
}
*/

struct SYSTIME LoadTime(void)
{
   struct  SYSTIME   Systime;
   register unsigned long portid;
   register unsigned char value;
   unsigned int   ii[10],i;
   unsigned int   ch[2];

   ii[0]=Sys_Second;
   ii[1]=Sys_Minute;
   ii[2]=Sys_Hour;
   ii[3]=Sys_Day;
   ii[4]=Sys_Month;
   ii[5]=Sys_Year;
   ii[6]=Sys_Century;

   for(i=0;i<7;i++)
   {
       ch[0]=ii[i]%10;	ii[i]=ii[i]/10;
       ch[1]=ii[i]%10;
       switch(i)
       {
	 case  0x00:Systime.second=Sys_Second;
		    Systime.TBUF[13]=ch[0];
		    Systime.TBUF[12]=ch[1];
		    break;
	 case  0x01:Systime.minute=Sys_Minute;
		    Systime.TBUF[11]=ch[0];
		    Systime.TBUF[10]=ch[1];
		    break;
	 case  0x02:Systime.hour=Sys_Hour;
		    Systime.TBUF[9]=ch[0];
		    Systime.TBUF[8]=ch[1];
		    break;
	 case  0x03:Systime.date=Sys_Day;
		    Systime.TBUF[7]=ch[0];
		    Systime.TBUF[6]=ch[1];
		    break;
	 case  0x04:Systime.month=Sys_Month;
		    Systime.TBUF[5]=ch[0];
		    Systime.TBUF[4]=ch[1];
		    break;
	 case  0x05:Systime.year=Sys_Year;
		    Systime.TBUF[3]=ch[0];
		    Systime.TBUF[2]=ch[1];
		    break;
	 case  0x06:Systime.century=20;
		    Systime.TBUF[1]=0;
		    Systime.TBUF[0]=2;
		    break;
	 default:   break;
       }
   }

   return  (Systime);
}


void CursorGotoXy(UINT *STRING, const unsigned char *Adr,UINT TYPE)
{
  unsigned char XX,YY,Len,i;
  unsigned char *addr;
  unsigned int	*CharPtr;
  CharPtr=(unsigned int  *)STRING;
  Len=*Adr; Adr=Adr+1;addr=(unsigned char *)Adr;
  if(pVar->OldCursorOffset>=Len) pVar->OldCursorOffset=0;
  if(pVar->NewCursorOffset>=Len) pVar->NewCursorOffset=0;
  addr=addr+(pVar->OldCursorOffset)*2;
  XX=*(addr);
  YY=*(addr+1);
  CharPtr=CharPtr+pVar->OldCursorOffset;
  LcdPutc(XX,YY,*CharPtr,TYPE);

  addr=(unsigned char *)Adr;  CharPtr=(unsigned int  *)STRING;
  addr=addr+pVar->NewCursorOffset*2;
  XX=*(addr);
  YY=*(addr+1);
  CharPtr=CharPtr+pVar->NewCursorOffset;
  TYPE=TYPE+128;
  LcdPutc(XX,YY,*CharPtr,TYPE);
  pVar->OldCursorOffset=pVar->NewCursorOffset;
}

void  SetSysTimer(struct SYSTIME * SysTimePtr)
{
      disable();
      outportb(DS_REGA,        0x26);	 /*Clock initialize*/
      outportb(DS_REGB,        0x8E);	 /*Clock initialize*/
      outportb(DS_SECOND,      SysTimePtr->second);
      outportb(DS_MINUTE,      SysTimePtr->minute);
      outportb(DS_HOUR,        SysTimePtr->hour);
      outportb(DS_DATE,        SysTimePtr->date);
      outportb(DS_MONTH,       SysTimePtr->month);
      outportb(DS_YEAR,        SysTimePtr->year);
      outportb(DS_CENTURY,     SysTimePtr->century);
      outportb(DS_REGB,        0x1E);	 /*Clock initialize*/
      inportb(DS_REGC);
      inportb(DS_REGD);
      enable();
}

void Line(UINT x1,UINT y1,UINT x2,UINT y2,UINT color)
{
 unsigned int  m,n,j,i,x,dx,dy,y,k;
 unsigned char	ch;

 if(x1>127)	x1=127;
 if(x2>127)	x2=127;
 if(y1>63)	y1=63;
 if(y2>63)	y2=63;
 if(color==1)
 {//color==1
	 if(x2<x1)
	 {
		  x=x2;
		  x2=x1;
		  x1=x;
	 }else
	 {
	   if(x2==x1)
	   {
	      for(i=y1;i<=y2;i++)
	      {
		     k=i%8;
		     n=(i/8)*128+x1;
		if((k==0)&&((i+7)<=y2))
		{
		   LcdBuf[n]=0xff;
		   i=i+7;
		}else
		{
			     ch=LcdBuf[n];
			     switch(k)
			     {
				 case  0x00:ch=ch | 0x01;
					    break;
				 case  0x01:ch=ch | 0x02;
					    break;
				 case  0x02:ch=ch | 0x04;
					    break;
				 case  0x03:ch=ch | 0x08;
					    break;
				 case  0x04:ch=ch | 0x10;
					    break;
				 case  0x05:ch=ch | 0x20;
					    break;
				 case  0x06:ch=ch | 0x40;
					    break;
				 case  0x07:ch=ch | 0x80;
					    break;
				 default:   break;
			     }
			  LcdBuf[n]=ch;
		  }
	      }//for
	      return;
	   }
	 }
	 if(y2<y1)
	 {
		  y=y2;
		  y2=y1;
		  y1=y;
	 }else
	 {
	   if(y2==y1)
	   {
			for(i=x1;i<=x2;i++)
			{
		     k=y1%8;
		     n=(y1/8)*128+i;
			  ch=LcdBuf[n];
			  switch(k)
			  {
			 case  0x00:ch=ch | 0x01;
				    break;
			 case  0x01:ch=ch | 0x02;
				    break;
			 case  0x02:ch=ch | 0x04;
				    break;
			 case  0x03:ch=ch | 0x08;
				    break;
			 case  0x04:ch=ch | 0x10;
				    break;
			 case  0x05:ch=ch | 0x20;
				    break;
			 case  0x06:ch=ch | 0x40;
				    break;
			 case  0x07:ch=ch | 0x80;
				    break;
			 default:   break;
		     }
		  LcdBuf[n]=ch;
	  }//for
	      return;
	   }
	 }
	 m=(y2-y1+1);
	 n=x2-x1+1;
	 if(m<=n)
	 {
		 dy=(m*128)/n;
		 y=y1*128;
		 for(i=x1;i<=x2;i++)
		 {
		     k=(y/128)%8;
		     n=(y/1024)*128+i;
		     ch=LcdBuf[n];
		     switch(k)
		     {
			 case  0x00:ch=ch | 0x01;
				    break;
			 case  0x01:ch=ch | 0x02;
				    break;
			 case  0x02:ch=ch | 0x04;
				    break;
			 case  0x03:ch=ch | 0x08;
				    break;
			 case  0x04:ch=ch | 0x10;
				    break;
			 case  0x05:ch=ch | 0x20;
				    break;
			 case  0x06:ch=ch | 0x40;
				    break;
			 case  0x07:ch=ch | 0x80;
				    break;
			 default:   break;
		     }
		     LcdBuf[n]=ch;
		     y=y+dy;
		 }
	 }else
	 {
	    dx=(n*128)/m;
		 x=x1*128;
		 for(i=y1;i<=y2;i++)
		 {
		     k=i%8;
		     n=(i/8)*128+x/128;
		     ch=LcdBuf[n];
		     switch(k)
		     {
		 case  0x00:ch=ch | 0x01;
			    break;
		 case  0x01:ch=ch | 0x02;
			    break;
		 case  0x02:ch=ch | 0x04;
			    break;
		 case  0x03:ch=ch | 0x08;
			    break;
		 case  0x04:ch=ch | 0x10;
			    break;
		 case  0x05:ch=ch | 0x20;
			    break;
		 case  0x06:ch=ch | 0x40;
			    break;
		 case  0x07:ch=ch | 0x80;
			    break;
		 default:   break;
		     }
		     LcdBuf[n]=ch;
		     x=x+dx;
		 }
	 }
 }else
 {//color==0

	 if(x2<x1)
	 {
	    x=x2;
	    x2=x1;
	    x1=x;
	 }else
	 {
	   if(x2==x1)
	   {
	      for(i=y1;i<=y2;i++)
	      {
		k=i%8;
		n=(i/8)*128+x1;
		if((k==0)&&((i+7)<=y2))
		{
		   LcdBuf[n]=0xff;
		   i=i+7;
		}else
		{
			     ch=LcdBuf[n];
			     switch(k)
			     {
				 case  0x00:ch=ch & 0xfe;
					    break;
				 case  0x01:ch=ch & 0xfd;
					    break;
				 case  0x02:ch=ch & 0xfb;
					    break;
				 case  0x03:ch=ch & 0xf7;
					    break;
				 case  0x04:ch=ch & 0xef;
					    break;
				 case  0x05:ch=ch & 0xdf;
					    break;
				 case  0x06:ch=ch & 0xbf;
					    break;
				 case  0x07:ch=ch & 0x7f;
					    break;
				 default:   break;
			     }
			  LcdBuf[n]=ch;
		  }
	      }//for
	      return;
	   }
	 }
	 if(y2<y1)
	 {
	    y=y2;
	    y2=y1;
	    y1=y;
	 }else
	 {
	   if(y2==y1)
	   {
	      for(i=x1;i<=x2;i++)
	      {
		     k=y1%8;
		     n=(y1/8)*128+i;
		     ch=LcdBuf[n];
		     switch(k)
		     {
				 case  0x00:ch=ch & 0xfe;
					    break;
				 case  0x01:ch=ch & 0xfd;
					    break;
				 case  0x02:ch=ch & 0xfb;
					    break;
				 case  0x03:ch=ch & 0xf7;
					    break;
				 case  0x04:ch=ch & 0xef;
					    break;
				 case  0x05:ch=ch & 0xdf;
					    break;
				 case  0x06:ch=ch & 0xbf;
					    break;
				 case  0x07:ch=ch & 0x7f;
					    break;
				 default:   break;
		     }
		  LcdBuf[n]=ch;
	  }//for
	      return;
	   }
	 }
	 m=(y2-y1+1);
	 n=x2-x1+1;
	 if(m<=n)
	 {
		 dy=(m*128)/n;
		 y=y1*128;
		 for(i=x1;i<=x2;i++)
		 {
		     k=(y/128)%8;
		     n=(y/1024)*128+i;
		     ch=LcdBuf[n];
		     switch(k)
		     {
				 case  0x00:ch=ch & 0xfe;
					    break;
				 case  0x01:ch=ch & 0xfd;
					    break;
				 case  0x02:ch=ch & 0xfb;
					    break;
				 case  0x03:ch=ch & 0xf7;
					    break;
				 case  0x04:ch=ch & 0xef;
					    break;
				 case  0x05:ch=ch & 0xdf;
					    break;
				 case  0x06:ch=ch & 0xbf;
					    break;
				 case  0x07:ch=ch & 0x7f;
					    break;
				 default:   break;
		     }
		     LcdBuf[n]=ch;
		     y=y+dy;
		 }
	 }else
	 {
	    dx=(n*128)/m;
		 x=x1*128;
		 for(i=y1;i<=y2;i++)
		 {
		     k=i%8;
		     n=(i/8)*128+x/128;
		     ch=LcdBuf[n];
		     switch(k)
		     {
				 case  0x00:ch=ch & 0xfe;
					    break;
				 case  0x01:ch=ch & 0xfd;
					    break;
				 case  0x02:ch=ch & 0xfb;
					    break;
				 case  0x03:ch=ch & 0xf7;
					    break;
				 case  0x04:ch=ch & 0xef;
					    break;
				 case  0x05:ch=ch & 0xdf;
					    break;
				 case  0x06:ch=ch & 0xbf;
					    break;
				 case  0x07:ch=ch & 0x7f;
					    break;
				 default:   break;
		     }
		     LcdBuf[n]=ch;
		     x=x+dx;
		 }
	 }
 }
}

⌨️ 快捷键说明

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