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

📄 display.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
	pVar->LNCount=pVar->LNCount+5;
	if(pVar->LNCount+5>=pVar->maxlnnum) pVar->LNCount=pVar->maxlnnum-5;
     };
     if(pVar->KeyID==MINUSKEY)// PageUPKEY
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	if(pVar->LNCount>4) pVar->LNCount=pVar->LNCount-5;
		  else	    pVar->LNCount=0;
     }
     if(pVar->KeyID==DOWNKEY)// " V " 向下键
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	pVar->LNCount=pVar->LNCount+1;
	if(pVar->LNCount+5>=pVar->maxlnnum) pVar->LNCount=pVar->maxlnnum-5;
     }
     if(pVar->KeyID==UPKEY)// " ^ " 向上键
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	if(pVar->LNCount>0) pVar->LNCount=pVar->LNCount-1;
     };
     if(pVar->maxlnnum<5)
     {
	for(i=0;i<5;i++)
	{
		 StrBuf[i*5+4]=66;
		 StrBuf[i*5+3]=66;
		 StrBuf[i*5+2]=66;
		 StrBuf[i*5+1]=66;
		 StrBuf[i*5+0]=174;
	}
	OutString(StrBuf,0,DatLNAdr,1);
     }else
     {
	for(i=0;i<5;i++)
	{
	    switch(DatBuf[i])
	    {
	      case  0://Ua  Uab
	      case  1://Ub
	      case  2://Uc  Ucb
		      l=(long)LNLIB[ChBuf[i]].Value[DatBuf[i]];
		      l=l*5;
		      l=l/20;
		      StrBuf[5+i*6]=31;//V
		      StrBuf[4+i*6]=l%10;	 l=l/10;
		      StrBuf[3+i*6]=(l%10)+150;  l=l/10;
		      StrBuf[2+i*6]=l%10;	 l=l/10;
		      StrBuf[1+i*6]=l%10;
		      StrBuf[0+i*6]=68;
		      break;
	      case  3://Ia
	      case  4://Ib
	      case  5://Ic
		      l=(long)LNLIB[ChBuf[i]].Value[DatBuf[i]];
		      l=l*5;
		      l=l/4;
		      StrBuf[5+i*6]=10;//A
		      StrBuf[4+i*6]=l%10;	 l=l/10;
		      StrBuf[3+i*6]=l%10;	 l=l/10;
		      StrBuf[2+i*6]=l%10;	 l=l/10;
		      StrBuf[1+i*6]=(l%10)+150;  l=l/10;
		      StrBuf[0+i*6]=68;
		      break;
	      case  9://P
	      case 13://Q
		      l=(long)LNLIB[ChBuf[i]].Value[DatBuf[i]];
		      if(l>=0)
		      {
			StrBuf[0+i*6]=68;//
		      }else
		      {
			StrBuf[0+i*6]=66;// -
			l=-l;
		      }
		      l=l*5;
		      l=l/4;
		      StrBuf[5+i*6]=32;//W
		      StrBuf[4+i*6]=l%10;	 l=l/10;
		      StrBuf[3+i*6]=(l%10)+150;  l=l/10;
		      StrBuf[2+i*6]=l%10;	 l=l/10;
		      StrBuf[1+i*6]=l%10;
		      break;
	      case 14://COS
		      l=(long)LNLIB[ChBuf[i]].Value[DatBuf[i]];
		      if(l>=0)
		      {
			StrBuf[0+i*6]=68;//
		      }else
		      {
			StrBuf[0+i*6]=66;// -
			l=-l;
		      }
		      StrBuf[5+i*6]=68;//
		      StrBuf[4+i*6]=l%10;	 l=l/10;
		      StrBuf[3+i*6]=l%10;	 l=l/10;
		      StrBuf[2+i*6]=l%10;	 l=l/10;
		      StrBuf[1+i*6]=(l%10)+150;
		      break;
	    }
	}//for
	OutString(StrBuf,0,DatLNAdr,1);
     }
  };//open
}

void TEMPERMenu(void)			// 温度显示
{
  int i;
  if(pVar->action==NOUSE)
  {
     LcdClr();
     DspMenu(12,0,12,3);
     pVar->action=OPEN;
  };
  if(pVar->action==OPEN)
  {  //-----OPEN
     HITESC(YC_MENU);
     i=pVar->TemperValue;
     if(i>=0)
     {
	StrBuf[0]=39;  //空格
     }else
     {
	i=-i;
	StrBuf[0]=44;  //-
     }
     StrBuf[5]=i%10; i=i/10;
     StrBuf[3]=i%10; i=i/10;
     StrBuf[2]=i%10; i=i/10;
     StrBuf[1]=i%10;
     StrBuf[4]=45;     //.
     StrBuf[6]=46;
     StrBuf[7]=12;     //C
     OutString(StrBuf,0,TemperAdr,4);
  };//open
}

int YXSTS(unsigned int yxcount)
{
    unsigned int x,y;
    int 	 i;
    unsigned char ch;
    x=(yxcount)/8;
    y=(yxcount)%8;
    ch=YXBUF[x];
    ch=ch>>y;
    ch=ch%2;
    if(ch==0)  i=0;
       else    i=0xff;
    return i;
}

void YXMenu(void)  // 遥信显示
{
  int i,n,s,j;
  unsigned int z,x,y,k;
  if(pVar->action==NOUSE)
  {
     LcdClr();
     DspMenu(13,0,13,2);
     Line(0,   0, 127,	0, 1);
     Line(0,  15, 127, 15, 1);
     Line(0,  60, 127, 60, 1);
     Line(127, 0, 127, 60, 1);
     Line(0,   0,   0, 60, 1);
     Line(32,  0,  32, 60, 1);
     Line(64,  0,  64, 60, 1);
     Line(96,  0,  96, 60, 1);
     pVar->action=OPEN;
     if(pVar->yxsum>0)
     {
	if(pVar->YXCount*10>=pVar->yxsum) pVar->YXCount=(pVar->yxsum-10)/10;
     }else
     {
       pVar->YXCount=0;
     }
     for(i=0;i<10;i++)
     {
	 s=3*i;
	 n=pVar->YXCount*10+i+1;
	 DatBuf[s+2]=n%10;  n=n/10;
	 DatBuf[s+1]=n%10;  n=n/10;
	 DatBuf[s+0]=n%10;
     }
     OutString(DatBuf,0,YXNumAdr,1);
  }
  if(pVar->action==OPEN)
  {  //-----OPEN
     HITESC(MAIN_MENU);
     if(pVar->KeyID==DOWNKEY)// " V " 向下键
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	pVar->YXCount=pVar->YXCount+1;
	if(pVar->yxsum>0)
	{
	   if(pVar->YXCount*10>=pVar->yxsum) pVar->YXCount=(pVar->yxsum-10)/10;
	}else
	{
	  pVar->YXCount=0;
	}
     }
     if(pVar->KeyID==UPKEY)// " ^ " 向上键
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	if(pVar->YXCount>0) pVar->YXCount=pVar->YXCount-1;
     };
     z=pVar->YXCount*10;
     for(i=0;i<10;i++)
     {//--------for--------
	j=YXSTS(z);
	if(j==0) StrBuf[i]=15;
	   else  StrBuf[i]=17;
	if(z+1>pVar->yxsum) StrBuf[i]=66;
	z=z+1;
     };//--------------end--of----for------------
     OutString(StrBuf,0,YXDatAdr,1);
  }; //open
}

void YKDraw(void)
{
     Line(0,   0, 127,	0, 1);
     Line(0,  15, 127, 15, 1);
     Line(0,  31, 127, 31, 1);
     Line(0,  63, 127, 63, 1);
     Line(127, 0, 127, 63, 1);
     Line(0,   0,   0, 63, 1);
     Line(32,  0,  32, 31, 1);
     Line(64,  0,  64, 31, 1);
     Line(96,  0,  96, 31, 1);
}

void   YKMOVE(unsigned int fullfg)
{
    unsigned int TYPE,TT;
    if(fullfg!=0) { TYPE=0x85; TT=0X82;}
       else	  { TYPE=0x02; TT=0X02;}
    switch(pVar->YKCursor)
    {
     case  0x00: DspMenu(25,0,25,TYPE); //遥控选择
		 break;
     case  0x01: DspMenu(26,0,26,TYPE); //遥控取消
		 break;
     case  0x02: DspMenu(27,0,27,TYPE); //遥控执行
		 break;
     case  0x03: DspMenu(28,0,28,TT);	//遥控设置
		 break;
	default: pVar->YKCursor=0;
		 DspMenu(24,0,24,TYPE); //闭锁
		 break;
    }
}


void YKMenu(void)    // 遥控操作
{
  int i,n,s,j;
  unsigned int z,x,y,k;
  unsigned  char     ch;

  if(pVar->Letter_Flag!=0)
  {//接收到1个邮件
	 pVar->Letter_Flag=0;
	 if(pVar->Letter[5]==0xE1)
	 {
		if((pVar->Letter[6]==0xCC)||(pVar->Letter[6]==0x33))
		{
		    DspMenu(21,0,21,2);//正确
		    pVar->ykrtn=1;
		}else
		{
		    DspMenu(22,0,22,2); //错误
		    pVar->ykrtn=2;
		}
	 }else	DspMenu(23,0,23,2);  //空格
  }
  if(pVar->action==NOUSE)
  {
     LcdClr();
     DspMenu(14,0,14,2);
     pVar->action=OPEN;
     if(pVar->maxyknum!=0)
     {
       if(pVar->YKCount+1>pVar->maxyknum) pVar->YKCount=pVar->maxyknum-1;
       pVar->yksz=0;
     }else pVar->yksz=0xff;
     n=pVar->YKCount+1;
     DatBuf[2]=n%10;  n=n/10;
     DatBuf[1]=n%10;  n=n/10;
     DatBuf[0]=n%10;
     OutString(DatBuf,0,YKNumAdr,4);
     if(pVar->ykcmd==0) DspMenu(15,0,15,2); //合闸
	 else		DspMenu(16,0,16,2); //跳闸
     if(YKYXType[pVar->YXCount]==0xAA)
     {
	     if(YXSTS(pVar->YXCount)==0) DspMenu(18,0,18,2); //合位
		 else			 DspMenu(19,0,19,2); //跳位
     }else  DspMenu(20,0,20,2);//空格

     if(pVar->ykbs==0)
     {
	  DspMenu(23,0,23,2);  //空格
     }
     YKMOVE(1);
     YKDraw();
  }
  if(pVar->action==OPEN)
  {  //-----OPEN
     HITESC(MAIN_MENU);
     if(pVar->KeyID==DOWNKEY)// " V " 向下键
     {
	 pVar->KeyID=NULLKEY;
	 pVar->action=NOUSE;
	 pVar->YKCursor=pVar->YKCursor+2;
	 if(pVar->YKCursor>3) pVar->YKCursor=0;
     }
     if(pVar->KeyID==UPKEY)// " ^ " 向上键
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	if(pVar->YKCursor>=2) pVar->YKCursor=pVar->YKCursor-2;
	    else{
		       if(pVar->ykbs==0)
		       {
			   if(pVar->YKCursor==0)
			   { // 修改状态
			     YKMOVE(0);
			     pVar->action=FLASH;
			     pVar->NewCursorOffset=0;
			     pVar->OldCursorOffset=0;
			     CursorGotoXy(DatBuf,YKNumAdr,4);
			     Line(0,  31, 127, 31, 1);
			   }
		       }
		}
     };
     if(pVar->KeyID==RIGHTKEY)
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	pVar->YKCursor=pVar->YKCursor+1;
	if(pVar->YKCursor>3) pVar->YKCursor=0;
     };
     if(pVar->KeyID==PLUSKEY)
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	if(pVar->ykbs==0)
	{
		if(pVar->YKCursor==0)
		{
		  if(pVar->ykcmd==0)  pVar->ykcmd=0xff;
		     else	      pVar->ykcmd=0x00;
		}
	}
     };

     if(pVar->KeyID==LEFTKEY)
     {
	pVar->KeyID=NULLKEY;
	pVar->action=NOUSE;
	if(pVar->YKCursor>0) pVar->YKCursor=pVar->YKCursor-1;
     };
     if(pVar->KeyID==OKKEY)
     {
	pVar->KeyID=NULLKEY;
	switch(pVar->YKCursor)
	{
	  case 0x00: if(pVar->ykbs==0)//遥控选择
		     {
			pVar->ykdelay=0;
			pVar->ykbs=0xff;
			pVar->YKFlash=0xff;
			pVar->YKFlashTime=0;
			pVar->YKMTrnLetter[0]=0x08;
			pVar->YKMTrnLetter[1]=0x00;
			pVar->YKMTrnLetter[2]=0x00;
			pVar->YKMTrnLetter[3]=YkTaskNo;
			pVar->YKMTrnLetter[4]=DisplayTaskNo;
			pVar->YKMTrnLetter[5]=0xE0;
			if(pVar->ykcmd==0) pVar->YKMTrnLetter[6]=0xCC;
				else	   pVar->YKMTrnLetter[6]=0x33;
			pVar->YKMTrnLetter[7]=pVar->YKCount;
			pVar->YKMRecLetter[5]=0;
			pVar->ykrtn=0;
			TWrite(pVar->YKMTrnLetter);
			yktest[0]++;
		     }
		     break;
	  case 0x01: pVar->ykbs=0;   //遥控取消
		     pVar->ykdelay=0;
		     pVar->YKFlash=0;
		     pVar->YKFlashTime=0;
		     if(pVar->ykcmd==0) DspMenu(15,0,15,2);
			       else	DspMenu(16,0,16,2);
		     Line(0,  31, 127, 31, 1);
		     pVar->YKMTrnLetter[0]=0x08;
		     pVar->YKMTrnLetter[1]=0x00;
		     pVar->YKMTrnLetter[2]=0x00;
		     pVar->YKMTrnLetter[3]=YkTaskNo;
		     pVar->YKMTrnLetter[4]=DisplayTaskNo;
		     pVar->YKMTrnLetter[5]=0xE3;
		     pVar->YKMTrnLetter[6]=0x55;
		     pVar->YKMTrnLetter[7]=pVar->YKCount;
		     pVar->YKMRecLetter[5]=0;
		     pVar->ykrtn=0;
		     TWrite(pVar->YKMTrnLetter);
		     break;
	  case 0x02: //遥控执行
		     if(pVar->ykrtn==1)
		     {
			pVar->ykbs=0;
			pVar->ykdelay=0;
			pVar->YKFlash=0;
			pVar->YKFlashTime=0;
			pVar->YKMTrnLetter[0]=0x08;
			pVar->YKMTrnLetter[1]=0x00;
			pVar->YKMTrnLetter[2]=0x00;
			pVar->YKMTrnLetter[3]=YkTaskNo;
			pVar->YKMTrnLetter[4]=DisplayTaskNo;
			pVar->YKMTrnLetter[5]=0xE2;
			pVar->YKMTrnLetter[6]=0xAA;
			pVar->YKMTrnLetter[7]=pVar->YKCount;
			pVar->YKMRecLetter[5]=0;
			pVar->ykrtn=0;
			TWrite(pVar->YKMTrnLetter);
		     }
		     break;
	  case 0x03: //遥控设置
		     break;
	  default:
		     break;
	}
     }
     if(pVar->ykbs!=0)
     {
       if(pVar->YKFlash!=0)
       {  //遥控等待
	  pVar->YKFlashTime++;
	  if(pVar->YKFlashTime==4)
	  {
		if(pVar->ykcmd==0) DspMenu(15,0,15,2); //合闸
			 else	   DspMenu(16,0,16,2); //跳闸
		Line(0,  31, 127, 31, 1);
	  }
	  if(pVar->YKFlashTime>=8)
	  {
	     DspMenu(17,0,17,2);  //空格
	     Line(0,  31, 127, 31, 1);
	     pVar->YKFlashTime=0;
	  }
       }else
       {
	  if(pVar->ykcmd==0) DspMenu(15,0,15,2);  //合闸
		    else     DspMenu(16,0,16,2);  //跳闸
	  Line(0,  31, 127, 31, 1);
       }
     }else
     {
	  pVar->YKFlash=0;
     }
  }; //open

  if(pVar->action==FLASH)
  {//------------------FLASH-----------------------
     FlashESC();
     if(pVar->KeyID==RIGHTKEY)
     {
	 pVar->KeyID=NULLKEY;
	 pVar->NewCursorOffset++;
	 if(pVar->NewCursorOffset>2)pVar->NewCursorOffset=2;
	 CursorGotoXy(DatBuf,YKNumAdr,4);
	 Line(0,  31, 127, 31, 1);
     };
     if(pVar->KeyID==LEFTKEY)
     {
	 pVar->KeyID=NULLKEY;
	 if(pVar->NewCursorOffset>0)pVar->NewCursorOffset--;
	 CursorGotoXy(DatBuf,YKNumAdr,4);
	 Line(0,  31, 127, 31, 1);
     };
     if(pVar->KeyID==MINUSKEY)//  "-"=PageUPKEY
     {
	 pVar->KeyID=NULLKEY;
	 if(DatBuf[pVar->NewCursorOffset]!=0) DatBuf[pVar->NewCursorOffset]=DatBuf[pVar->NewCursorOffset]-1;
		  else			      DatBuf[pVar->NewCursorOffset]=0x09;
	 CursorGotoXy(DatBuf,YKNumAdr,4);
	 Line(0,  31, 127, 31, 1);
     };
     if(pVar->KeyID==PLUSKEY)// "+"=PageDown
     {
	 pVar->KeyID=NULLKEY;
	 DatBuf[pVar->NewCursorOffset]++;
	 if(DatBuf[pVar->NewCursorOffset]>9)DatBuf[pVar->NewCursorOffset]=0;
	 CursorGotoXy(DatBuf,YKNumAdr,4);
	 Line(0,  31, 127, 31, 1);
     };
     if(pVar->KeyID==DOWNKEY)
     {
	 pVar->KeyID=NULLKEY;
	 pVar->action=NOUSE;
	 pVar->YKCursor=0;
	 pVar->YKCount=DatBuf[0]*100+DatBuf[1]*10+DatBuf[2];
	 if(pVar->YKCount!=0) pVar->YKCount--;
     };
  }
}

void   YMMenu(void)    // 遥脉显示
{
  int i;
  if(pVar->action==NOUSE)
  {
     LcdClr();
     if(pVar->YMMenuCount>=1) pVar->YMMenuCount=0;
     if(pVar->YMCursorCount>1)pVar->YMCursorCount=0;
     DspMenu(29, pVar->YMMenuCount*0x05,29,3);
     DspMenuCur(29,(pVar->YMMenuCount+pVar->YMCursorCount)*0x05+1,29, (pVar->YMCursorCount*10)+2,4, 0x83);
     DspMenu(30,0,30,3);//JM30+0,Adr30, Type=3 遥脉显示
     pVar->action=OPEN;
  }
  if(pVar->action==OPEN)

⌨️ 快捷键说明

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