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

📄 jkb.c

📁 此程序是一底层开发驱动代码,里面包括了I2C芯片(MAX5417)及1 wire sensor、AD驱动的源代码!稍作改动就能用于自己的产品开发中!
💻 C
📖 第 1 页 / 共 3 页
字号:
		 return(u);
         break;
       case  2:
	     u=y*(390.26-18.49)+18.49;
	     return(u);
         break;
       case 3:
         //Read_Temperature();
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-5e-6)*r*r*r+0.014*r*r+48.293*r+379.36;//将冷端温度值转换成毫伏值
	     u=y*(69536+8096)-8096;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
         break;
       case 4:
         //Read_Temperature();                                                                                                 
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-7e-6)*r*r*r+10132*r*r+35.297*r+454.93;//将冷端温度值转换成毫伏值
	     u=y*(54807+6458)-6458;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
         break;
       case 5:
         //Read_Temperature();
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-3e-5)*r*r*r+0.0471*r*r+38.526*r-22.551;//将冷端温度值转换成毫伏值
	     u=y*(20689+6258)-6258;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
	     break;
	   case 6:
         //Read_Temperature();
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-3e-5)*r*r*r+0.0481*r*r+56.392*r+282.86;//将冷端温度值转换成毫伏值
	     u=y*(76358+9835)-9835;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
	     break;
	   case 7:
         Read_Temperature();
		 lenduanzhi();
	     r=lenduan;//将冷端温度值转换成毫伏值
	     u=y;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
	     break;
	   case 8:
         //Read_Temperature();
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-9e-7)*r*r*r+0.0036*r*r+6.8411*r-26.969;//将冷端温度值转换成毫伏值
	     u=y*(18612+236)-236;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
	     break;
	   case 9:
         //Read_Temperature();
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-1e-6)*r*r*r+0.0067*r*r-0.7424+46.959;//将冷端温度值转换成毫伏值
	     u=y*13814;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
	     break;
	   case 10:
         //Read_Temperature();
		 //lenduanzhi();
	     //r=lenduan;
		 r= GetTempValue();
		 r=(-9e-9)*r*r*r+(2e-5)*r*r+0.0253*r+0.1641;//将冷端温度值转换成毫伏值
	     u=y*(47.502+4.345)-4.345;//求出热端毫伏值
	     u=u+r;//进行冷端补偿
	     return(u);
	     break;
	   default:
	   break;
    }
}

//-----------------------------------------------------------------------------
//CU50温度值计算
//-----------------------------------------------------------------------------
float cu50(float r)
{
  float wendu;
  wendu=4.6673*r-233.29;
  return(wendu);
  }

//-----------------------------------------------------------------------------
//cu100温度值计算
//-----------------------------------------------------------------------------
float cu100(float r)
{
   float wendu;
   wendu=2.3337*r-233.29;
   return(wendu);
 }

//-----------------------------------------------------------------------------
//PT100温度值计算
//-----------------------------------------------------------------------------
float pt100(float r)
{
  float wendu;
  wendu=(1e-6)*r*r*r+0.0007*r*r+2.3782*r-245.55;
  return(wendu);
  }

//-----------------------------------------------------------------------------
//J型热电偶温度值计算
//-----------------------------------------------------------------------------
float dj(float r)
{
    float wendu;
    wendu=(6e-13)*r*r*r-(9e-8)*r*r+0.0206*r-9.356;
	return(wendu);
  }
//-----------------------------------------------------------------------------
//K型热电偶温度值计算
//-----------------------------------------------------------------------------
float dk(float r)
{
   float wendu;
   wendu=(3e-12)*r*r*r-(2e-7)*r*r+0.0285*r-15.743;
   return(wendu);
 }
//-----------------------------------------------------------------------------
//T型热电偶温度值计算
//-----------------------------------------------------------------------------
float dt(float r)
{
  float wendu;
  wendu=(3e-11)*r*r*r-(1e-6)*r*r*r+0.292*r+0.8784;
  return(wendu);
 }

//-----------------------------------------------------------------------------
//E型热电偶温度值计算
//-----------------------------------------------------------------------------
float de(float r)
{
  float wendu;
  wendu=(1e-12)*r*r*r-(2e-7)*r*r+0.0184*r-16.133;
  return(wendu);
 }

//-----------------------------------------------------------------------------
//R型热电偶温度值计算
//-----------------------------------------------------------------------------
float dr(float r)
{
  float wendu;
  wendu=r;
  //printf("温度值=    ",wendu);
  return(wendu);
 }

//-----------------------------------------------------------------------------
//S型热电偶温度值计算
//-----------------------------------------------------------------------------
 float ds(float r)
{
  float wendu;
  wendu=(9e-11)*r*r*r-(4e-6)*r*r+0.1297*r+11.023;
  return(wendu);
 }

//-----------------------------------------------------------------------------
//B型热电偶温度值计算
//-----------------------------------------------------------------------------
 float db(float r)
{
  float wendu;
  wendu=(3e-17)*r*r*r-(7e-15)*r*r+10*r-10;
  return(wendu);
 }

//-----------------------------------------------------------------------------
//N型热电偶温度值计算
//-----------------------------------------------------------------------------
 float dn(float r)
{
  float wendu;
  wendu=0.007*r*r*r-0.5649*r*r+39.132*r-19.054;
  return(wendu);
} 

//-----------------------------------------------------------------------------
//SPI数据传输
//-----------------------------------------------------------------------------
void spi_send(float wendu)
{
    char   *ptr1;
    float  *ptr_wendu;
    int i;
    ptr_wendu=&wendu;
	ptr1=(char*)ptr_wendu;
    //printf("%f\n",wendu);
	for(i=0;i<4;i++)
	{
     //P3=0XEF;
	 SPIF=0;
	 SPI0DAT=*ptr1;
	 ptr1++;
     while(!SPIF);
	// P3=0XFF;
     
	}	  
}

//-----------------------------------------------------------------------------
//单通道配置
//-----------------------------------------------------------------------------
void  tongdao_init(void)
{
    int number,i;
    while(!SPIF);
    number=SPI0DAT;
	SPIF=0;
   while(!SPIF);
    i=SPI0DAT;
	SPIF=0;
   chanel_chanshu[number-1]=i;//配置通道类型
   // P3=0XEF;
	SPI0DAT=0xaa;//发送响应命令
	SPIF=0;
	//P3=0XFF;
}

//-----------------------------------------------------------------------------
//通道增益参数配置
//-----------------------------------------------------------------------------
void chan(int t)
{        int i;
    	 switch(chanel_chanshu[(t-1)*3])
			 {
			   case 0:
			        ADC0CF |=0X04;
                 i2o_write(47,0x50);//9.1K
                 for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                 i2o_write(47,0x52);
			     break;
			   case 1:
			     ADC0CF |=0X03;
				  i2o_write(47,0x50);//9.1K
              for(i=0;i<256;i++){;}
              for(i=0;i<256;i++){;}
              i2o_write(47,0x52);

                  
			     break;
			   case 2:
			     ADC0CF &=0Xfa;
				  ADC0CF |=0X02;
				  i2o_write(20,0x50);//7K    40
              for(i=0;i<256;i++){;}
              for(i=0;i<256;i++){;}
              i2o_write(20,0x52);
                                                                                                                                                         

			     break;
			   case 3:
			     ADC0CF |=0X04;
				   i2o_write(55,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(55,0x52);//10.2K

			     break;
			   case 4:
			     ADC0CF |=0X04;
				     i2o_write(70,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(70,0x52);//13.68K

			     break;
			   case 5:
			     ADC0CF |=0X04;
				     i2o_write(185,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(185,0x52);//36.25K

			     break;
			   case 6:
			     ADC0CF |=0X04;
				    i2o_write(50,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(50,0x52);//9.82K

			     break;
			   case 7:
			     ADC0CF |=0X04;
				    i2o_write(30,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(30,0x52);//7K

			     break;
			   case 8:
			      ADC0CF |=0X04;
				      i2o_write(206,0x50); 
                 for(i=0;i<256;i++);
                  i2o_write(206,0x52);//40.3K

			     break;
			   case 9:
			     ADC0CF |=0X04;
				    i2o_write(36,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(36,0x52);//7K

			     break;
			   case 10:
			     ADC0CF |=0X04;
				   i2o_write(255,0x50); 
                  for(i=0;i<256;i++){;}
                 for(i=0;i<256;i++){;}
                  i2o_write(255,0x52);//50K//只有2.2V

			     break;
			   default:
			     break;
               }
}

//-----------------------------------------------------------------------------
//FLASH写
//-----------------------------------------------------------------------------
void flash_scratch_write(unsigned dest,char *src,unsigned num)
{
   unsigned idata i;
   char  xdata  *pwrite;
   char  the_data;
   bit EA_SAVE=EA;
   pwrite=(char*)dest;
   for(i=0;i<num;i++)
   {
     the_data=*src++;
     EA=0;
     FLSCL  |=0x01;//便能FLASH写
     PSCTL  |=0x01;//PSWE=1
     PSCTL  |=0X04;//SFLE=1
     *pwrite=the_data;//写数据
     PSCTL  &=~0X04;//SFLE=0
     PSCTL  &=~0X01;//PSWE=0
     FLSCL  &=~0X01;//禁止FLASH写
     EA     =EA_SAVE;
     pwrite++;
     }
}

//-----------------------------------------------------------------------------
//FLASH读
//-----------------------------------------------------------------------------
void flash_scratch_read(unsigned src,unsigned num)
{
   unsigned idata i;
   char code *pread;
   bit EA_SAVE=EA;
   pread=(char *)src;
   for(i=0;i<num;i++)
   {
      EA=0;
      PSCTL |=0x04;
     *ptrlchar=*pread;
      PSCTL &=~0X04;
      EA=EA_SAVE;
      pread++;
      ptrlchar++;
   }
}

//-----------------------------------------------------------------------------
//FLASH擦除
//-----------------------------------------------------------------------------
void flash_scratch_erase(void)
{
   char  xdata  *pwrite;
   bit   EA_SAVE=EA;
   pwrite=(char*)0x0000;
   EA=0;
   FLSCL |=0X01;
   PSCTL |=0X01;
   PSCTL |=0X02;
   PSCTL |=0X04;
   *pwrite=0x00;
   PSCTL &=~0X04;
   PSCTL &=~0X02;
   PSCTL &=~0X01;
   FLSCL &=~0X01;
   EA=EA_SAVE;
}
     

   

⌨️ 快捷键说明

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