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

📄 lcddriver.c

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
  
  for(i=30;i<234;i++)
  LCD_WByte(i,2,0x03);
  for(i=30;i<234;i++)
  LCD_WByte(i,15,0xc0);

  for(j=2;j<16;j++)
  {
  LCD_WByte(30,j,0xff);
  LCD_WByte(31,j,0xff);
  }
  for(j=2;j<16;j++)
  {
  LCD_WByte(232,j,0xff);
  LCD_WByte(233,j,0xff);
  }

	if(EN_ch1<=4&&EN_ch2<=4)
	{
		temp=1;
		LCD_CAstr(4,5,"CH1",0,0);
		LCD_CAstr(4,11,"CH2",0,0);
	}
	else if(EN_ch1<=4&&EN_ch2>4)
	{
		temp=1;
		LCD_CAstr(4,8,"CH1",0,0);
	}
	else if(EN_ch1>4&&EN_ch2<=4)
	{
		temp=2;
		LCD_CAstr(4,8,"CH2",0,0);
	}
	else if(EN_ch1>4&&EN_ch2>4)
	{
		temp=5;
		LCD_CAstr(4,8,"N",0,0);
	}
   LCD_WaveData(temp,1);
   LCD_CAstr(178,0,"暂停 X0",0,0);

	EM_k1=1;
	EM_k2=1;
	EM_b1=70;
	EM_b2=110;
	EM_speed=4;

	Em_PtData=0;
	ExSramWrRdAdr=0;
	ExSramTempAdr=0;
}
void LCD_Draw(uint8 i,uint8 y)
{
        uint8 t;
        if(y<24&&y>17)
        {
           switch(y)
		   {
		   case 18:t=7;break;
           case 19:t=11;break;
		   case 20:t=19;break;
		   case 21:t=35;break;
		   case 22:t=67;break;
		   case 23:t=131;break;
		   default:break;
		   }
		   LCD_WByte(i+32,2,t);
		}
		else if(y<18)
		   LCD_WByte(i+32,2,0x07);
		else if(y>119&&y<126)
		{
		   switch(y)
		   {
		   case 120:t=0xc1;break;
		   case 121:t=0xc2;break;
		   case 122:t=0xc4;break;
		   case 123:t=0xc8;break;
		   case 124:t=0xd0;break;
		   case 125:t=0xe0;break;
		   default:break;
		   }
		   LCD_WByte(i+32,15,t);
		}
		else if(y>125)
		   LCD_WByte(i+32,15,0xe0);
		else
		   LCD_WPoint(i+32,y,1);
}
void LCD_ShowWave(void)
{
  uint8 i,j,y;

  for(j=3;j<15;j++)
  for(i=32;i<232;i++)LCD_WByte(i,j,0x00);
  for(i=32;i<232;i++)LCD_WByte(i,2,0x03);
  for(i=32;i<232;i++)LCD_WByte(i,15,0xc0);

	for(i=0;i<200;i++)
	{
		if(EN_ch1<5)
		{
			y=EM_b1-(unsigned char)(EM_k1*CH1[199-i]);
			LCD_Draw(i,y);
      }
      if(EN_ch2<5)
		{
			y=EM_b2-(unsigned char)(EM_k2*CH2[199-i]);
			LCD_Draw(i,y);
      }
   }
}
void LCD_Wave(void)
{  
		switch(EN_ch1)
		{
		case 1:CH1[Em_PtData]=AD_DataBuff[2];
		      break;
		case 2:CH1[Em_PtData]=AD_DataBuff[3];
		      break;
		case 3:CH1[Em_PtData]=AD_DataBuff[0];
		      break;
		case 4:CH1[Em_PtData]=AD_DataBuff[1];
		      break;
		case 5:break;
		default:break;
		}
		switch(EN_ch2)
		{
		case 1:CH2[Em_PtData]=AD_DataBuff[2];
		      break;
		case 2:CH2[Em_PtData]=AD_DataBuff[3];
		      break;
		case 3:CH2[Em_PtData]=AD_DataBuff[0];
		      break;
		case 4:CH2[Em_PtData]=AD_DataBuff[1];
		      break;
		case 5:break;
		default:break;
		}

        Em_PtData++;
		if(Em_PtData>199)
		{
				Em_PtData=0;
				LCD_ShowWave();
				
				if(EM_speed<4)
				{
				    if(ExSramTempAdr > 199)
				    {
					    ExSramTempAdr -= 200;
                    }
					else
					{
						ExSramTempAdr=65531;
						ExSramWrRdPag--;
					}
                }
				else if(EM_speed>3)
				{
				    if(ExSramTempAdr < 65332)
					{
				        ExSramTempAdr += 200;
                    }
					else
					{
						ExSramTempAdr=0;
						ExSramWrRdPag++;
					}
                }
                

				ExSramWrRdAdr = ExSramTempAdr;
				if(ExSramWrRdPag>ExSramEndPag||ExSramWrRdPag<ExSramStarPag)
				{
					ExSramWrRdPag=ExSramStarPag;
					ExSramWrRdAdr=0;
					LCD_ClearAll();
					LCD_Coordinate();
					hunt=72;
				}  
      }
      DisWave_En=1;

}
/******************************************************************************************/

void LCD_RunError(void)
{
   uint8 i=4;

   
   if(ErrorRege&0x0001)
   {
      LCD_CAstr(16,i,"缺相A",0,0);
	   i=i+2;
	   HisFlash(1);
	   if(EN_ErrorRec == 1 && Star_EN == 1)
	   RecType=3;
   }
   if(ErrorRege&0x0002)
   {
      LCD_CAstr(16,i,"缺相B",0,0);
	  i=i+2;
	  HisFlash(2);
	  if(EN_ErrorRec == 1 && Star_EN == 1)
	  RecType=3;
   }
   if(ErrorRege&0x0004)
   {
      LCD_CAstr(16,i,"缺相C",0,0);
	  i=i+2;
	  HisFlash(3);
	  if(EN_ErrorRec == 1 && Star_EN == 1)
	  RecType=3;
   }
   if(ErrorRege&0x0008)
   {
      LCD_CAstr(16,i,"投励失败",0,0);
	  i=i+2;
	  HisFlash(4);
	  if(EN_ErrorRec == 1 && Star_EN == 1)
	  RecType=4;
   }
   if(ErrorRege&0x0010)
   {
      LCD_CAstr(16,i,"失控",0,0);
	  i=i+2;
	  HisFlash(5);
	  if(EN_ErrorRec == 1 && Star_EN == 1)
	  RecType=5;
   }
   if(ErrorRege&0x0020)
   {
      LCD_CAstr(16,i,"失步",0,0);
	  i=i+2;
	  HisFlash(6);
	  if(EN_ErrorRec == 1 && Star_EN == 1)
	  RecType=6;
   }
   if(ErrorRege&0x0040)
   {
      LCD_CAstr(16,i,"失步再整步",0,0);
	  i=i+2;
	  HisFlash(7);
   }
   if(ErrorRege&0x0080)
   {
      LCD_CAstr(16,i,"再整步失败",0,0);
	  i=i+2;
	  HisFlash(8);
   }
   if(ErrorRege&0x0100)
   {
      LCD_CAstr(16,i,"遥调失败",0,0);
	  i=i+2;
	  HisFlash(9);
   }
   if(ErrorRege&0x0200)
   {
      LCD_CAstr(16,i,"通信失败",0,0);
	  i=i+2;
	  HisFlash(10);
   }
   if(ErrorRege&0x0400)
   {
      LCD_CAstr(16,i,"PT断线",0,0);
	  i=i+2;
	  HisFlash(11);
	  if(EN_ErrorRec == 1 && Star_EN == 1)
	  RecType=7;
   }
   if(ErrorRege&0x0800)
   {
      LCD_CAstr(16,i,"CT断线",0,0);
	  i=i+2;
	  HisFlash(12);
   }
   if(ErrorRege&0x1000)
   {
      LCD_CAstr(16,i,"切换失败",0,0);
		i=i+2;
	  HisFlash(13);
   }
	if(ErrorRege&0x2000)
   {
      LCD_CAstr(16,i,"机柜很热",0,0);
	   HisFlash(14);
   }
   if(ErrorRege&0x4000)
   {
      LCD_CAstr(16,i,"快熔熔断",0,0);
	   HisFlash(15);
   }
	if(ErrorRege&0x8000)
   {
      LCD_CAstr(16,i,"KQ误开通",0,0);
	   HisFlash(16);
   }
	
}
/////////////////////////////////////////////////////////////////////////////
void LCD_RunPage(void)
{
   uint8 i,j;
   
   for(i=0;i<240;i++)
   {
   LCD_WByte(i,0,0x40);
   LCD_WByte(i,3,0x02);
   }
   LCD_CAstr(2,1,"``",0,0);
   LCD_CAstr(22,1,"LZK-3G",0,1);
   LCD_CAstr(74,1,"同步电动机励磁装置",0,0);
   LCD_CAstr(222,1,"<<",0,0);

   for(i=167;i<233;i++)
   {
   LCD_WByte(i,3,0x82);
   LCD_WByte(i,12,0x01);
   }
   for(i=4;i<12;i++)
   {
   LCD_WByte(167,i,0xff);
   LCD_WByte(232,i,0xff);
   }
  
   switch(PictrRege)
   {
   case 0x00:
   case 0x01:
	       for(j=4;j<12;j++)
          for(i=168;i<232;i++)
          LCD_WByte(i,j,Static[(j-4)*64+i-168]);
          break;
   case 0x03:
	       for(j=4;j<11;j++)
          for(i=168;i<232;i++)
          LCD_WByte(i,j,Swave[(j-4)*64+i-168]);
          break;
   
   default:break;
   }
	LCD_Clock();

   switch(page)
   {
   case 1:
	       LCD_CAstr(16,4,"励磁电压:",0,0);
          LCD_CAstr(16,6,"励磁电流:",0,0);
		    LCD_CAstr(16,8,"触发角度:",0,0);
          LCD_CAstr(16,10,"功率因树:",0,0);
		    LCD_CAstr(16,12,"运行模式:",0,0);
		    break;
   case 2:
	       LCD_CAstr(16,4,"视在功率:",0,0);
          LCD_CAstr(16,6,"有功功率:",0,0);
		    LCD_CAstr(16,8,"无功功率:",0,0);
          LCD_CAstr(16,10,"定子电压:",0,0);
		    LCD_CAstr(16,12,"定子电流:",0,0);
		    break;
   case 3:
	       LCD_RunError();
	       break;
   default:break;
   }
	  
}
/////////////////////////////////////////////////////////////////////////////
void LCD_RunData(void)
	{
	   if(page==1)
	   {
	      switch(Data_Num)
			{
			case 1:
			       LCD_Num(96,4,EM_ExcVoltData,0,"V   ");
			       break;
			case 2:
			       LCD_Num(96,6,EM_ExcCurrData,0,"A   ");
					 break;
			case 3:
			       LCD_Num(96,8,EM_AngleData,0,"^   ");
					 break;
			case 4:
			       LCD_CAstr(96,10,"0.",0,0);
			       LCD_Num(112,10,EM_PowFacData,0," ");
					 break;
			case 5:
					switch(EM_ModeCMD)
					{
					case 0:LCD_CAstr(96,12,"恒压",0,0);
					       break;
					case 1:LCD_CAstr(96,12,"恒流",0,0);
					       break;
					case 2:LCD_CAstr(96,12,"恒角度",0,0);
					       break;
					case 3:LCD_CAstr(96,12,"功率因树",0,0);
					       break;
					case 4:LCD_CAstr(96,12,"恒无功",0,0);
					       break;
					default:break;
					}
					break;
            case 6:
			        switch(RTU_MaOrSlave)
					{
					case 0:LCD_CAstr(168,13,"主",0,0);
					       break;
					case 1:LCD_CAstr(168,13,"从",0,0);
					       break;
                    default:break;
					}
					break;
			default:break;
	      }
	   }
	   else if(page==2)
	   {
	      switch(Data_Num)
			{
			case 1:
			       LCD_Num(96,4,EM_SumPowData,0,"KVA  ");
			       break;
			case 2:
			       LCD_Num(96,6,EM_EffPowData,0,"KW   ");
					 break;
			case 3:
			       LCD_Num(96,8,EM_NulPowData,0,"Kvar  ");
					 break;
			case 4:
				   LCD_Num(96,10,EM_StaVoltData,0,"V   ");
					 break;
			case 5:
			       LCD_Num(96,12,EM_StaCurrData,0,"A   ");
				     break;
            case 6:
					switch(RTU_MaOrSlave)
					{
					case 0:LCD_CAstr(168,13,"主",0,0);
					       break;
					case 1:LCD_CAstr(168,13,"从",0,0);
					       break;
					default:break;
					}
					break;
			default:break;
	      }  
	   }
      Data_Num+=1;
		if(Data_Num>6)
		   Data_Num=1;
	}
/////////////////////////////////////////////////////////////////////////////
	void LCD_RunPictr(void)
	{
		/*************电机运行及录波动画****************/
		switch(PictrTemp)
		{
		case 0x01:
		      if(Mov1Up==0x00 && Mov2Up==0x00)
				   head=0;
            if(Mov1Up==0xff && Mov2Up==0xff)
               head=1;

				if(head==0)
				{
					if(Mov1Up!=0xff)
					   Mov1Up=(Mov1Up>>1)+0x80;
               if(Mov2Up!=0xff)
					   Mov2Up=(Mov2Up<<1)+0x01;
				}
				else
				{
					if(Mov1Up!=0x00)
					   Mov1Up=Mov1Up<<1;
               if(Mov2Up!=0x00)
					   Mov2Up=Mov2Up>>1;
				}
		      
				for(hunt=199;hunt<207;hunt++)
				{
				   LCD_WByte(hunt,7,Mov1Up);
					LCD_WByte(hunt,8,Mov2Up);
				}
				break;

		case 0x03:
				head++;
				if(head>16)
				{
					head=1;
					if(Mov1Up==0)
					{
					   Mov1Up=1;
					   Mov2Up=0x00;
               }
               else
					{
					   Mov1Up=0;
					   Mov2Up=0xff;
               }
            }

				LCD_WByte(167+2*(17-head),11,Mov2Up);
				LCD_WByte(198+2*head,11,Mov2Up);
				break;

		default:break;
		}
      /***********上位机通信动画*******************/
		if(Com_EN)
		{
		   Shf2UP++;
			if(Shf2UP>10)
			Shf2UP=1;
        
			LCD_WByte(226,4,0x3f);
			for(Shf1UP=0;Shf1UP<5;Shf1UP++)
			{
			   if(Shf1UP<Shf2UP && Shf2UP<6)
				   LCD_WByte(Shf1UP+227,4,0x3f);
            else if(Shf1UP>=Shf2UP && Shf2UP<6)
				   LCD_WByte(Shf1UP+227,4,0x20);
            else if(Shf1UP<(Shf2UP-5) && Shf2UP>5)
				   LCD_WByte(Shf1UP+227,4,0x20);
            else
				   LCD_WByte(Shf1UP+227,4,0x3f);
			}
		}
		else
		{
		   for(Shf1UP=226;Shf1UP<232;Shf1UP++)
			   LCD_WByte(Shf1UP,4,0x00);
		}
      /*******************双机热备图标*******************/
		if(EM_BackUp)
		{
		   for(Shf1UP=0;Shf1UP<5;Shf1UP++)
			   LCD_WByte(Shf1UP+168,4,0x1f>>Shf1UP);
		}
		else
		{
		   for(Shf1UP=0;Shf1UP<5;Shf1UP++)
			   LCD_WByte(Shf1UP+168,4,0x00);
		}
      
	}
/********************************************************************************/
	

⌨️ 快捷键说明

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