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

📄 main.c

📁 KEILC RTX51tiny开发的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	    if (sampNum==conSampNo)   //若达到规定采样数目 
	    {
	      sampNum=0;
	      smpAvrInt=sampInt/conSampNo;
	      sampInt=0;
	      HC595Output(smpAvrInt);    //并行输出 
	      voltage=calVoltage(smpAvrInt);   //计算 
	      PValue=voltage;
		  DZHI=P0Value/PValue;     //计算D值 (比例数) 
		  if(P0Value<=PValue)
		     mValue=0;    
		  else
	         mValue=10*log10(DZHI)/dValue;
		  tmpMval=mValue*1000;	
   	      mainDisplay();
	    }
	  }
	  case 1:		  //AD采样通道为通道1
	  {
	    sampInt1=sampInt1+get(1);
        sampNum1++;   //采样个数加1; 
		selectChan0 ();   //选择AD通道为通道0 
		flagSapChan=0;
	    if (sampNum1==conSampNo)   //若达到规定采样数目 
	    {
	      sampNum1=0;
	      smpAvrInt1=sampInt1/conSampNo;
	      sampInt1=0;
	      HC595Output(smpAvrInt1);    //并行输出 
	      voltage2=calVoltage(smpAvrInt1);   //计算 
	      IValue=voltage2;
		  IZHI=IValue/I0Value;     //计算I值 (比例数) 
		  if(I0Value<=IValue)	     
            yValue=0;	
		  else  //若出现负数,赋0 
		    yValue=(1/IZHI)-(IZHI);  
		  tmpYval=yValue*1000; 	  
	      mainDisplay();
	    }
	  }
	}											
  }
}	
//移动箭头函数 
/* conArrowReturn 1    //光标位置为返回 
   conArrowReset 2    //光标位置为复位 
   conArrowSetD 3     //光标位置为设定d值 
   conArrowSetPara 4    //标定 
*/
void changeArrow()
{
  clearDispData(ArrowOriX,ArrowOriY);
  switch(ArrowState)
  {
    case conArrowReturn:
	{
	  ArrowOriX=0x0A;
	  ArrowOriY=0x30;
	  break;
	}
  	case conArrowReset:
	{
	  ArrowOriX=0x0A;
	  ArrowOriY=0x50;
	  break;
	}
	case conArrowSetD:
	{
	  ArrowOriX=0x0A;
	  ArrowOriY=0x70;
	  break;
	}
	case conArrowSetPara:
	{
	  ArrowOriX=0x0A;
	  ArrowOriY=0x90;
	  break;
	}
  }
  displayArrow(ArrowOriX,ArrowOriY);

}


//存储D值到E2PROM 	(E2PROM地址:0x28,0x00)
void saveDValue(float dValue)   
{
   unsigned char dValHi,dValLo;     //d值的高低8位 
   unsigned int  dInt;     //d值放大100倍取整 
   dInt=dValue*100;
   dValLo=dInt&(0x00FF);
   dInt>>=8;
   dValHi=dInt&(0x00FF); 
   E2PROM_Erase(0x28,0x00);
   E2PROM_Write(0x28,0x00,dValLo);
   E2PROM_Write(0x28,0x01,dValHi);  
   E2PROM_Close();
}

//读取D值
float readDValue(void) 
{
  float dValue;
  unsigned char dValHi,dValLo;     //d值的高低8位 
  dValLo=E2PROM_Read(0x28,0x00);
  dValHi=E2PROM_Read(0x28,0x01);
  E2PROM_Close();
  dValue=(dValHi*256+dValLo)/100.0;
  return(dValue);
}

//存储I0Val,P0Val到E2PROM 	(E2PROM地址:0x2A00,0x00) 
void saveI0P0Val(void)   
{
   unsigned char dValHi,dValLo;     //d值的高低8位 
   unsigned int  dInt;     //d值放大100倍取整 		
   E2PROM_Erase(0x2A,0x00);
   dInt=smpAvrInt;
   dValLo=dInt&(0x00FF);
   dInt>>=8;
   dValHi=dInt&(0x00FF); 
   E2PROM_Write(0x2A,0x00,dValLo);
   E2PROM_Write(0x2A,0x01,dValHi); 
   dInt=smpAvrInt1;
   dValLo=dInt&(0x00FF);
   dInt>>=8;
   dValHi=dInt&(0x00FF); 
   E2PROM_Write(0x2A,0x02,dValLo);
   E2PROM_Write(0x2A,0x03,dValHi); 
   E2PROM_Close();
}

//读取Samp值(I0Val,P0Val)到E2PROM 	(E2PROM地址:0x2A00,0x00)
void readI0P0Value(void) 
{
  unsigned char dValHi,dValLo;     //d值的高低8位 
  dValLo=E2PROM_Read(0x2A,0x00);
  dValHi=E2PROM_Read(0x2A,0x01);
  smpAvrInt=(dValHi*256+dValLo);
  dValLo=E2PROM_Read(0x2A,0x02);
  dValHi=E2PROM_Read(0x2A,0x03);
  smpAvrInt1=(dValHi*256+dValLo);
  E2PROM_Close();
  P0Value=calVoltage(smpAvrInt);
  I0Value=calVoltage(smpAvrInt1);
}

void setPara(void) _task_ task_SetPara    //任务2 
{
  unsigned char key;    //按键代码 
  float decimal;
  while (1)
  {
    WDT_CONTR=0x3C;   //喂狗 
    ctrlClr2++;	   //清屏循环控制变量加1
	if (ctrlClr2>=conTmrClr)    //若清屏循环控制达到要求 
    {
	  ctrlClr2=0;   //清屏循环控制清0 	
	  if(flagDispFace==conFaceDispSysSet)	   //若在系统设置界面 
	  {
	    LCM_Clr();  //清屏   
	    displaySysSet();
	  }
	}
    key=readKey();  //读按键	 
	if (key!=0)
	{ 	  
	  switch(key) 
	  {
		case keyUp:	  //上箭头 
		{
		  if(flagDispFace==conFaceDispSysSet)
		  {
		    if(ArrowState>conArrowReturn)
		      ArrowState--;  
		    changeArrow();
		   }
		  break;
		}
		case keyDown:   //下箭头 
		{
		  if(flagDispFace==conFaceDispSysSet)
		  {
		    if(ArrowState<conArrowSetPara)
		      ArrowState++;  
		    changeArrow();
		  }
		  break;
		}
		case key0:
		case key1:
		case key2:
		case key3:
		case key4:
		case key5:
		case key6:
		case key7:
		case key8:
		case key9:	      //数字键 
		{  
		  if(flagDispFace==conFaceDispSysSet)	   //如果在系统设置界面
		  {
		    switch (ArrowState)
  	        {
	          case conArrowReset:
		      {
		        break;
		      }
	          case conArrowSetD:
		      { 
			    fInt=fPoint1;	    //小数寄存器初始化 
                fPoint1=fPoint2;
			    switch(key)
			    {
			      case key0:
				  {
				    fPoint2=0;
				    break;
				  }
				  case key1:
				  {
				    fPoint2=1;
				    break;
				  } 
				  case key2:
				  {
				    fPoint2=2;
				    break;
				  }
                  case key3:
				  {
				    fPoint2=3;
				    break;
				  }
                  case key4:
				  {
				    fPoint2=4;
				    break;
				  }
                  case key5:
				  {
				    fPoint2=5;
				    break;
				  }

                  case key6:
				  {
				    fPoint2=6;
				    break;
				  }

                  case key7:
				  {
				    fPoint2=7;
				    break;
				  }

                  case key8:
				  {
				    fPoint2=8;
				    break;
				  }
                  case key9:
				  {
				    fPoint2=9;
				    break;
				  }		  
			  }
			  decimal=fInt+fPoint1/10.0+fPoint2/100.0;
			  dValue=decimal;
		      displayFloat2(dValue,0x12,0x70);
			  saveDValue(dValue);   //存储d值到E2PROM  
		      break;
		    }		
		   }
		  }
		  else if(flagDispFace==conFaceDispItemName)	   //如果在主界面
		  {		    
		    if(key==key1)
			{
		      P0Value=PValue;
			  saveI0P0Val();
			}
			else if(key==key2)
			{
			  I0Value=IValue;
			  saveI0P0Val();
			}
		  }
		  break;
		}
	    case keyEnt:			//若按回车键
	  	{
	      if(flagDispFace!=conFaceDispSysSet)  //如果在主界面 
	      {
	        os_delete_task(task_CalVal);
			displaySysSet();  
			ArrowState=conArrowReturn;
			changeArrow();
		    displayFloat2(dValue,0x12,0x70);
	        flagDispFace=conFaceDispSysSet;
	      }					 	
		  else if(flagDispFace==conFaceDispSysSet)	   //如果在系统设置界面 
		  {		    
		    switch (ArrowState)
  	        {
		      case conArrowReturn:
		  	  {
			    LCM_Clr();
			    displayItemName(); 	  //液晶显示 项目名称 
			    flagDispFace=conFaceDispItemName;
	            os_create_task(task_CalVal);
		        break;
			  } 
	          case conArrowReset:
		      {
		        displayInteger(ArrowState,0x00,0xCF);
			    P0Value=PValue;
				I0Value=IValue;
				saveI0P0Val();
			    displayOk(0x12,0x50);
		        break;
		      }
	          case conArrowSetD:
		      {
		        displayInteger(ArrowState,0x00,0xCF);
		        break;
		      }
  	        }
		  }	  
		}
	  }
	}
  }
}



⌨️ 快捷键说明

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