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

📄 main.c~

📁 潜入市嵌入式开发 嵌入式开发
💻 C~
📖 第 1 页 / 共 5 页
字号:
	GetKey_Count_ForUse_Stop++;
 }
  if(Signed_Test)
    Test_Count++;

	if(Bit_Start_Stop)
	  Count_Start_Stop++;

  E2prom++;

  Count_Start_Machine_15s++;

  //*/
  //TH2=0xF0;
  //TL2=0x0C; 
  //RCAP2H=0xF0;
  //RCAP2L=0x0C;

 // CEX1=!CEX1;
  Number_Display++;
  //for(Number_Display=1;Number_Display<15;Number_Display++)
  {
     Set_Display(Number_Display,Value_For_Display[Number_Display]);
     //Set_Display(Number_Display,Display_Lookup_Table(9));
  }

 if(Number_Display>13)
 {
   Number_Display=0;
 }

  /////////////anytime output zhishi
     // Output_Zhishi(Temp_Output);

     //Get_KeyBoard();//read keyboard
	// key_out=Key;


    TH0=0xfc;
    TL0=0x17;

   TF0=0;     //must be cleared by soft
   if(Speed_Count>1000)//for speed test
    {
	 // Speed=(TH0*256+TL0)*Speed_Count/(1000*M);
	  Speed=TH1;
	 // Speed= (unsigned int)(  ( ((float)(Speed*256+TL0)) /(Speed_Count*5*Para_Speed_Divide) ) *1000*60  );//5 is 5ms timeUp;60 is 1 minute
                                                                            //1000 is 1000ms
	  Speed= (unsigned int)(  ( ((float)(Speed*256+TL1)) /(Para_Setting_Gear) )*60  );
      Speed=Speed-Speed/400*10;//xiuzheng
	//  Speed=Speed*256+TL0;
	  TH1=0x00;
	  TL1=0x00;
	  Speed_Count=0;

	}//*/
 }



void DeLay_ms(unsigned int t)                     //延时约 t ms
{
   unsigned int i=0;
   while(t--)
   {
   	for(i = 0; i < 68; i++)   //对于6M  延时约1ms
   	{
	}
   }
}


//unsigned char volatile xdata * Address;


///Para_Pre_Oil_Zoom_k1
void Write_Para(void)//24 PARAS
{
  EEPROM_ERASE(0x3000);
  EEPROM_write(0x3000,CPU_NO);
  EEPROM_write(0x3001,Para_Setting_Gear);
  EEPROM_write(0x3002,Para_Setting_StartTime);
  EEPROM_write(0x3003,Para_Setting_StopTime);
    EEPROM_write(0x3004,Para_Setting_KeepTime);
  EEPROM_write(0x3005,Para_Setting_TemWater);
  EEPROM_write(0x3006,Para_Setting_TemOil);
  EEPROM_write(0x3007,Para_Setting_PreOil/256);
  EEPROM_write(0x3008,Para_Setting_PreOil%256);
  EEPROM_write(0x3009,Para_Setting_Speed/256);
  EEPROM_write(0x300A,Para_Setting_Speed%256);
  EEPROM_write(0x300B,Time_Minutes_Add/256);///////
  EEPROM_write(0x300C,Time_Minutes_Add%256);
  EEPROM_write(0x300D,Time_Hours_Add/256);
  EEPROM_write(0x300E,Time_Hours_Add%256);
  EEPROM_write(0x300F,Para_Setting_ReferenceSpeed_StopStart/256);
  EEPROM_write(0x3010,Para_Setting_ReferenceSpeed_StopStart%256);
  EEPROM_write(0x3011,Para_Setting_Stop_SureTime);
 
  EEPROM_write(0x3012,Para_Setting_AddTimeZero/256);
  EEPROM_write(0x3013,Para_Setting_AddTimeZero%256);
  EEPROM_write(0x3014,Para_Setting_WaterTem_K);
  EEPROM_write(0x3015,Para_Setting_WaterTem_b);
  EEPROM_write(0x3016,Para_Setting_OilTem_K);
  EEPROM_write(0x3017,Para_Setting_OilTem_b);
  EEPROM_write(0x3018,0);
 // EEPROM_write(0x300D,CPU_NO);
  /* write(0x0011, Para_Setting_Gear);
  write(0x0012, Para_Setting_StartTime);
  write(0x0013, Para_Setting_StopTime);
  write(0x0014, Para_Setting_KeepTime);
  //write(0x0015, Para_Setting_AddTimeZero);
  write(0x0016, Para_Setting_TemWater);
  write(0x0017, Para_Setting_TemOil);
  write(0x0018, Para_Setting_PreOil/256);
  write(0x0019, Para_Setting_PreOil%256);
  write(0x001a, Para_Setting_Speed/256);
  write(0x001b, Para_Setting_Speed%256);
  ////  
//  write(0x001c, Para_Setting_Frequency);
  write(0x001d, Time_Minutes_Add/256);
  write(0x001e, Time_Minutes_Add%256);
  write(0x001f, Time_Hours_Add/256);
  write(0x0020, Time_Hours_Add%256);
  write(0x0023, Para_Setting_ReferenceSpeed_StopStart/256);
  write(0x0024, Para_Setting_ReferenceSpeed_StopStart%256);
  write(0x0025, Para_Setting_Stop_SureTime);
  write(0x0026, Para_Setting_AddTimeZero/256);
  write(0x0027, Para_Setting_AddTimeZero%256);
  ///////////////////////////////
  write(0x0028, Para_Setting_WaterTem_K);
  write(0x0029, Para_Setting_WaterTem_b);
  write(0x002a, Para_Setting_OilTem_K);
  write(0x002b, Para_Setting_OilTem_b);//*/
}
 void Read_Para(void)
 {
    // read(0x0000);//read E2prom

  CPU_NO=EEPROM_read(0x3000);
 

  Para_Setting_Gear=EEPROM_read(0x3001);
  Para_Setting_StartTime=EEPROM_read(0x3002);
  Para_Setting_StopTime=EEPROM_read(0x3003);
  Para_Setting_KeepTime=EEPROM_read(0x3004);
  //Para_Setting_AddTimeZero=read(0x0015);

  Para_Setting_TemWater=EEPROM_read(0x3005);
  Para_Setting_TemOil=EEPROM_read(0x3006);
  Para_Setting_PreOil=EEPROM_read(0x3007)*256+EEPROM_read(0x3008);
  
  Para_Setting_Speed=EEPROM_read(0x3009)*256+EEPROM_read(0x300A);
  /////
 // Para_Setting_Frequency=read(0x001c);
  Time_Minutes_Add=EEPROM_read(0x300B)*256+EEPROM_read(0x300C);

  Time_Hours_Add=EEPROM_read(0x300D)*256+EEPROM_read(0x300E);


  Para_Setting_ReferenceSpeed_StopStart=EEPROM_read(0x300F)*256+EEPROM_read(0x3010);
  Para_Setting_Stop_SureTime=EEPROM_read(0x3011);//


  Para_Setting_AddTimeZero=EEPROM_read(0x3012)*256+EEPROM_read(0x3013);

  Para_Setting_WaterTem_K=EEPROM_read(0x3014);//水温k
  Para_Setting_WaterTem_b=EEPROM_read(0x3015);//水温b

//unsigned char idata Para_Setting_WaterTem_b;//水温b
  Para_Setting_OilTem_K=EEPROM_read(0x3016);//水温k
  Para_Setting_OilTem_b=EEPROM_read(0x3017);//水温b


 }



 Get_KeyBoard()
{
    unsigned char Temp_P2;
    Temp_P2=P2;
   //////////////////////


    // T0=0;
    P2=0xff;////read key process
	P1_7=0;
	Key=P2;
	P1_7=1;
	// T0=1;
  if( (!(Key&0x01)) || (!(Key&0x02)) || (!(Key&0x04))|| ( !(Key&0x08)) || ( !(Key&0x10)) )
  {
    GetKey_Count=0;//for time
     
	Get_Key_bit=1;//has key
   // P2=0xff;////read key process
	//P1_7=0;
//	Key=P2;
//	P1_7=1;
	
  }
  else
  {
    Get_Key_bit=0;
  }

  /////////////////////
  P2= Temp_P2;
}
////////////////////////初始化各项参数
Init_Para_Setting()
{
  CPU_NO=1;
  Para_Setting_Gear=135;
  Para_Setting_StartTime=2;
  Para_Setting_StopTime=1;
  Para_Setting_KeepTime=5;
  Para_Setting_AddTimeZero=9999;
  Para_Setting_TemWater=100;
  Para_Setting_TemOil=105;
  Para_Setting_PreOil=80;
  Para_Setting_Speed=1950;
  Para_Setting_ReferenceSpeed_StopStart=500;//
  Para_Setting_Stop_SureTime=5;//

  Para_Setting_WaterTem_K=100;//水温k
  Para_Setting_WaterTem_b=50;//水温b

//unsigned char idata Para_Setting_WaterTem_b;//水温b
  Para_Setting_OilTem_K=100;//水温k
  Para_Setting_OilTem_b=50;//水温b

   Time_Minutes_Running=0;//now running time--minutes当前油机的运行分钟数   
   Time_Hours_Running=0;  //now running time--hours  当前油机的运行小时数

   Time_Minutes_Add=0;  /////add time minute油机运行累计分钟数
   Time_Hours_Add=0; 


}


bit  Bit_OilValve_Start=0;//燃油阀输出位
bit Bit_Stop=0;//停车输出位
bit  Bit_Sign_Charging=0;//充电标志

main()
{
      unsigned char temp;



          int i;

 // unsigned char Display_Type=0;
  unsigned char Byte_Try;
 // int value;
  

  int Alarm_Tem_Oil;
  int Alarm_Tem_Water;
  int Alarm_Pre_Oil;
  int Alarm_Speed;

 // unsigned int Tem_Oil_Ave;
  //unsigned int Tem_Water_Ave;
  //unsigned int Pre_Oil_Ave;
   bit  Bit_NO_Start_15s_Setting=0;//设定和启动15s区别标志
   bit Bit_Protection_Start=1;//处于启动保护阶段
  ///////////
  bit Sign_OK_Stop=1;
  bit Bit_OK_Stop_1Time=1;
 

   unsigned int Temp_Time_Display;//显示时间的临时量

   //unsigned char Key_Sure;
     bit Bit_Sign_Key_Get=0;//是否真正获得键值
    bit  Bit_Sign_Display_Setting=0;/////*********是显现检测值还是显示设置值 
	bit  Bit_Sign_Display_Time=0;///***********时间按钮按下显示时间标志

	bit  Bit_Sign_Exit_5555=1;////*************初始进入设定参数,5555不到5S离开标志
 // P2=0;
 // initial_timer2() ;
  T0=0;
   //CLK_DIV=0x03;//1/8 clock
  initial_timer0_1();
  T0=1;

  //////////////stc5412
 // WDTRST=0x1E;//喂看门狗第一步
 // WDTRST=0xE1;//喂看门狗第二步


 //Init_Para_Setting();

 // Output_Zhishi(0x07);

  Code_Input=5555;
  //Init_Para_Setting();//初始化各个参数
  //Write_Para();//写入
  Read_Para();//读出

  Byte_Sign_First_Alarm_StartStop=0;

  Count_Start_Machine_15s=0;

  Get_Key_bit=0;
 // Bit_Sign_Running=1;






 for( i=0;i<4;i++)
      {

	    AD_init(0);
      	Tem_Oil[i]=Calculate_Tem ( GET_AD_Result() ,1);
		AD_init(1);
	    Pre_Oil[i]=Calculate_Pre (GET_AD_Result() );
		AD_init(2);
	    Tem_Water[i]=Calculate_Tem ( GET_AD_Result(),0);

      } 
       Tem_Water[4]=   (  (int)((float)(Tem_Water[0]+Tem_Water[1]+Tem_Water[2]+Tem_Water[3])/4))  ;//;//;
       Pre_Oil[4]=(int)((float)(Pre_Oil[0]+Pre_Oil[1]+Pre_Oil[2]+Pre_Oil[3])/4);
       Tem_Oil[4]= (  (int)((float)(Tem_Oil[0]+Tem_Oil[1]+Tem_Oil[2]+Tem_Oil[3])/4) ) ;//;//;
  
	   Display_Acord_Value(1,Speed,0);
	 
	   Display_Acord_Value(2, Pre_Oil[4],0);
	   Display_Acord_Value(3,Tem_Water[4],0);
	   Display_Acord_Value(4,Tem_Oil[4],0);


	//   Bit_Sign_SettingPara_Normal=1;////////******
//////////////////////////////////main while 


 while(1)
  {

   if((GetKey_Count>100))//for get key operation .......200ms
   {
	 
	  Get_KeyBoard();//read keyboard
      
  if( (Get_Key_bit) )
  {   
         Count_NoKey=0;//has keyboard operation
  
     	if(Bit_Sign_Key_Get)
	    {
			  key_out=Key;
			   if(Key==XIAOYIN)//for sound
			   {
			     Signed_Sound_Off=1;
			
				 ///////////////////////
			//	 Bit_Sign_SettingPara=1;
				}
			   else
			   {
			
			//	 Bit_Sign_SettingPara=0;
		
			   }
		
			      if(Key==SHEZHI)//for sound
			   {
			    // Signed_Sound_Off=1;
			
				 ///////////////////////
				 Bit_Sign_SettingPara=1;
				}
			   else
			   {
			
				 Bit_Sign_SettingPara=0;
		
			   }
		


			   if(Key==SHIJIAN)//for time display
			   {
		
			     Bit_Sign_DisplayTime=1;
		 	   }
			   else
			   {
		          Bit_Sign_DisplayTime=0;
			   }
			   	 if(Key==ZIJIAN)//for test system
			   {
			 	 Signed_Test=1;
				 Test_Count=0;
		         AD_init(3);
		      	 Value_Test_24v=GET_AD_Result()* Calculate_Line_k( 0,0,0X3ff,5)/0.14163  +1;
			   }
			   else
			   {
		         Signed_Test=0;
			   }
	      }
		  else
	     {
		     key_out=0xff;
			 Bit_Sign_SettingPara=0;////对于设定参数而言

		 }
	   

          if(!Bit_Sign_Key_Get)
	    {
	       Bit_Sign_Key_Get=1;
	    }


	 }//  if( (Get_Key_bit) )
	 else
	 {
         Bit_Sign_Key_Get=0;
		 key_out=0xff;
	     Bit_Sign_SettingPara=0;
	 }


  // Bit_Sign_Key_Get=1;
	  GetKey_Count=0;//for time
   /////////////anytime output zhishi
     Output_Zhishi(Temp_Output);
}///if((GetKey_Count>150))



   	if(Capture_Count>1000)//capture one time 
	{
		 for( i=0;i<4;i++)
      {

	    AD_init(0);
      	Tem_Oil[i]=Calculate_Tem ( GET_AD_Result() ,1);
		AD_init(1);
	    Pre_Oil[i]=Calculate_Pre (GET_AD_Result() );
		AD_init(2);
	    Tem_Water[i]=Calculate_Tem ( GET_AD_Result(),0);

      } 
       Tem_Water[4]=   (  (int)((float)(Tem_Water[0]+Tem_Water[1]+Tem_Water[2]+Tem_Water[3])/4))  ;//;//;
       Pre_Oil[4]=(int)((float)(Pre_Oil[0]+Pre_Oil[1]+Pre_Oil[2]+Pre_Oil[3])/4);
       Tem_Oil[4]= (  (int)((float)(Tem_Oil[0]+Tem_Oil[1]+Tem_Oil[2]+Tem_Oil[3])/4) ) ;//;//;
       //T0=0;
	   if(!Signed_Test)
	   {
		   if( (!Bit_Sign_Display_Setting) && (!Bit_Sign_Display_Time) )
			 {
	           Display_Acord_Value(1,Speed,0);
			 
			  Display_Acord_Value(2, Pre_Oil[4],0);
			 }
		   Display_Acord_Value(3,Tem_Water[4],0);
		   Display_Acord_Value(4,Tem_Oil[4],0);
	   
		 }//T0=1;
	   Capture_Count=0;
			
	   }

   /////////////////////////任何 时候都能停机
    // if( GetKey_Count_ForUse_Stop>200)
			 {
		
		    //	 if( (Key==TINGJI)&&(Key==XBYTE[0x8009])&&(Bit_NO_Start_15s_Setting==0))//for stop
		///	if( (Key==TINGJI)&&(Bit_NO_Start_15s_Setting==0))//for stop
		if( (key_out==TINGJI)&&(Bit_Sign_Running) )//for stop
			   {
			     Bit_OilValve_Start=0;//启动机组
				 Bit_Stop=1;//停机
		
		
				 Bit_Stop_Sure=1;
				 Count__Stop_Sure=0;
		
		
				 Temp_Output=Temp_Output|0x10;//jidianqi
			//	 Display_Acord_Value( 0x8000,456,0 );
			//	 Output_Sign();
			   }
			   else
			   {
				  Bit_OilValve_Start=0;//启动机组
				  Bit_Stop=0;//停机
			//	  Temp_Output=Temp_Output&0xef;
		
				  GetKey_Count_ForUse_Stop=0;
			//	  Get_Key_bit=0;
			//	  Output_Sign();
			   }
			//   XBYTE[0x8008]=Temp_Output;
		  	  
		  }
	
		
		    if(    (Bit_Stop_Sure)&&(Count__Stop_Sure>   (Para_Setting_Stop_SureTime*1000)    )   )
			 {
			     Temp_Output=Temp_Output&0xef;
			//	 XBYTE[0x8008]=Temp_Output;
				 Bit_Stop_Sure=0;
			 }

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

 // {

  //////////////**************
   ////////////////启动 过程 中 
   if(  (Bit_Protection_Start==1)&&(Bit_Sign_SettingPara==0)&&(Bit_NO_Start_15s_Setting==0) )
   {
       ///////////////**************
		  Temp_Output=Temp_Output|0x01;//lamp运行灯///////////////**************
  		 Temp_Output=Temp_Output&0xf7;//jidianqi
	     Temp_Output=Temp_Output|0x02;//lamp
      ///////////////**************
		  ////////////////////////////////
		 if( (Speed>300) )
		 { 
		  Signed_Sound_Off=0;
		  Count_Start_Machine_15s=0;
		  Get_Key_bit=0;
		  Bit_Sign_Running=1;
		   while(Count_Start_Machine_15s<15000)//15s start ,no protection
		   {
		    
		
		    if(Speed<301)
			  {
			   
				Bit_Protection_Start=1;
				Bit_Sign_Running=0;
				 break;//在此过程中必须一直保持大于300,才处于启动过程
			  }
		    //if(!Get_Key_bit)
			//  Get_KeyBoard();//read keyboard
           if((GetKey_Count>100))//for get key operation .......200ms
   {
	 
	  Get_KeyBoard();//read keyboard

⌨️ 快捷键说明

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