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

📄 24lc02.c

📁 温湿度变送器的下位机代码
💻 C
📖 第 1 页 / 共 2 页
字号:
uchar read1byte(void)
{
	uchar  rdata = 0x00,i;
    uchar flag;
    
	for(i = 0;i < 8;i++)
	{
		SDA_H;
		delay();
		SCL_H;
        SDA_in;
		delay();
		flag = SDA_val;
		rdata <<= 1;
		if(flag)	rdata |= 0x01;
        SDA_out;
		SCL_L;
		delay();
	}

	return rdata;
}
/*******************************************
函数名称:readNbyte
功    能:从IIC总线读取N个字节的数据
参    数:inbuffer--读取后数据存放的首地址
          n--数据的个数
返回值  :无
********************************************/
void readNbyte(uchar * inbuffer,uchar n)
{
	uchar i;
    
	for(i = 0;i < n;i++)
	{
		inbuffer[i] = read1byte();
		if(i < (n-1))	mack();
		else            mnack();
	}
	 
	stop();
}



/*******************************************
函数名称:Write_1Byte
功    能:向EEPROM中写入1个字节的数据
参    数:Wdata--写入的数据
          dataaddress--数据的写入地址
返回值  :写入结果:1--成功,0--失败
********************************************/
uchar Write_1Byte(uchar dataaddress,uchar wdata)
{
	start();
	write1byte(deviceaddress);
	if(check()) 
        write1byte(dataaddress);
	else 
        return 0;
	if(check()) 
        write1byte(wdata);
	else 
        return 0;
	if(check())	    stop();
	else            return 0;
    
    delay_10ms();       //等待EEPROM完成内部写入
	return 1; 
}
/*******************************************
函数名称:Write_NByte
功    能:向EEPROM中写入N个字节的数据
参    数:outbuf--指向写入数据存放首地址的指针
          n--数据个数,最大不能超过8,由页地址
             决定其最大长度
          dataaddress--数据写入的首地址
返回值  :写入结果:1--成功,0--失败
********************************************/
uchar WriteEEPROM (uchar dataaddress,uchar * outbuf,uchar n)

//uchar Write_NByte(,,)
{
	uchar  flag; 
    
	start();
	write1byte(deviceaddress);                  //写入器件地址
	if(check() == 1) 
        write1byte(dataaddress);                //写入数据字地址
	else 
        return 0;
	if(check()) 
        flag=writeNbyte(outbuf,n);
	else 
        return 0;
    delay_10ms();       //等待EEPROM完成内部写入
	if(flag)    return 1;
	else        return 0;

}
/*******************************************
函数名称:Read_1Byte_currentaddress
功    能:从EEPROM的当前地址读取1个字节的数据
参    数:无
返回值  :读取的数据
********************************************/
uchar Read_1Byte_currentaddress(void)
{
	uchar temp;
    
	start();
	write1byte((deviceaddress|0x01));
	if(check())	
        temp = read1byte();
	else 
        return 0;
	mnack();
	stop();
	return temp;
}
/*******************************************
函数名称:Read_NByte_currentaddress
功    能:从EEPROM的当前地址读取N个字节的数据
参    数:readbuf--指向保存数据地址的指针
          n--读取数据的个数
返回值  :读取结果:1--成功,0--失败
********************************************/
uchar Read_NByte_currentaddress(uchar * readbuf,uchar n)
{   
    start();
	write1byte((deviceaddress|0x01));
	if(check()) 
        readNbyte(readbuf,n);
	else 
        return 0;
    
	return  1;
}

/*******************************************
函数名称:Read_1Byte_Randomaddress
功    能:从EEPROM的指定地址读取1个字节的数据
参    数:dataaddress--数据读取的地址
返回值  :读取的数据
********************************************/
uchar Read_1Byte_Randomaddress(uchar dataaddress)
{
	uchar temp;
    
	start();
	write1byte(deviceaddress);
	if(check())	
        write1byte(dataaddress);
	else 
        return 0;
	if(check()) 
	{
		start();
		write1byte((deviceaddress|0x01));
	}
	else    
        return 0;
	if(check())	
        temp = read1byte();
	else 
        return 0;

	mnack();
	stop();
	return temp;
}
/*******************************************
函数名称:Read_NByte_Randomaddress
功    能:从EEPROM的指定地址读取N个字节的数据
参    数:readbuf--指向保存数据地址的指针
          n--读取数据的个数
          dataaddress--数据读取的首地址
返回值  :读取结果:1--成功,0--失败
********************************************/
//void  ReadEEPROM(unsigned int wOffset,unsigned char *str,unsigned char count)      //"Sequential READ
//uchar Read_NByte_Randomaddress(uchar * readbuf,uchar n,uchar dataaddress)

uchar  ReadEEPROM(uchar dataaddress,uchar * readbuf,uchar n)      //"Sequential READ
{
	start();
	write1byte(deviceaddress);
	if(check())	
        write1byte(dataaddress);
	else 
        return 0;
	if(check()) 
	{
		start();
		write1byte(deviceaddress|0x01);
	}
	else 
        return 0;
	if(check()) 
        readNbyte(readbuf,n);
	else 
        return 0;
	
	return 1;	
}



float Varil;
void WriteSystemVar(U8 Flag)
{
      //保存设置的值
            WriteEEPROM(Mini_temperature_Addr, (unsigned char *)&envionment_variables.Mini_temperature, 4);
            ReadEEPROM(Mini_temperature_Addr, (unsigned char *)&Varil, 4);

            WriteEEPROM(Max_temperature_Addr, (unsigned char *)&envionment_variables.Max_temperature, 4);
            ReadEEPROM(Max_temperature_Addr, (unsigned char *)&Varil, 4);
                        
            WriteEEPROM(Mini_humidity_Addr, (unsigned char *)&envionment_variables.Mini_humidity, 4);
            ReadEEPROM(Mini_humidity_Addr, (unsigned char *)&Varil, 4);
            
            WriteEEPROM(Max_humidity_Addr, (unsigned char *)&envionment_variables.Max_humidity, 4);
            ReadEEPROM(Max_humidity_Addr, (unsigned char *)&Varil, 4);
            
            WriteEEPROM(Zero_temperature_Addr, (unsigned char *)&envionment_variables.Zero_temperature, 4);
            ReadEEPROM(Zero_temperature_Addr, (unsigned char *)&Varil, 4);
            
            WriteEEPROM(Zero_humidity_Addr, (unsigned char *)&envionment_variables.Zero_humidity, 4);
            ReadEEPROM(Zero_humidity_Addr, (unsigned char *)&Varil, 4);
           
                                    
            WriteEEPROM(TC_CurrentType_Addr, (unsigned char *)&envionment_variables.TC_CurrentType, 4);
            ReadEEPROM(TC_CurrentType_Addr, (unsigned char *)&Varil, 4);            
            WriteEEPROM(RH_CurrentType_Addr, (unsigned char *)&envionment_variables.RH_CurrentType, 4); 
            ReadEEPROM(RH_CurrentType_Addr, (unsigned char *)&Varil, 4);
            
            WriteEEPROM(TC_DA4mA_Addr, (unsigned char *)&envionment_variables.TC_DA4mA, 4);
            ReadEEPROM(TC_DA4mA_Addr, (unsigned char *)&Varil, 4);            
            WriteEEPROM(TC_DA20mA_Addr, (unsigned char *)&envionment_variables.TC_DA20mA, 4);
            ReadEEPROM(TC_DA20mA_Addr, (unsigned char *)&Varil, 4);
            
            WriteEEPROM(RH_DA4mA_Addr, (unsigned char *)&envionment_variables.RH_DA4mA, 4);
            ReadEEPROM( RH_DA4mA_Addr, (unsigned char *)&Varil, 4);            
            WriteEEPROM(RH_DA20mA_Addr, (unsigned char *)&envionment_variables.RH_DA20mA, 4);
            ReadEEPROM(RH_DA20mA_Addr, (unsigned char *)&Varil, 4);
            
            if(Flag == 0)
            {
                  for(U8 i = 0;i<9;i++)
            {
             
                WriteEEPROM(TCDATable_Addr+i*2, (unsigned char *)&envionment_variables.TCDATable[i], 2);
 
            }
            for(U8 i = 0;i<9;i++)
            {
              
                WriteEEPROM(RHDATable_Addr+i*2, (unsigned char *)&envionment_variables.RHDATable[i], 2);
 
            }     
            }
            
                                                  
}

void ReadSystemVar(U8 Flag)
{
     
  
            ReadEEPROM(Mini_temperature_Addr, (unsigned char *)&envionment_variables.Mini_temperature, 4);
            ReadEEPROM(Max_temperature_Addr, (unsigned char *)&envionment_variables.Max_temperature, 4);
            ReadEEPROM(Mini_humidity_Addr, (unsigned char *)&envionment_variables.Mini_humidity, 4);
            ReadEEPROM(Max_humidity_Addr, (unsigned char *)&envionment_variables.Max_humidity, 4);
            ReadEEPROM(Zero_temperature_Addr, (unsigned char *)&envionment_variables.Zero_temperature, 4);
            ReadEEPROM(Zero_humidity_Addr, (unsigned char *)&envionment_variables.Zero_humidity, 4);            
            ReadEEPROM(TC_CurrentType_Addr, (unsigned char *)&envionment_variables.TC_CurrentType, 4);
            ReadEEPROM(RH_CurrentType_Addr, (unsigned char *)&envionment_variables.RH_CurrentType, 4); 
            
            ReadEEPROM(TC_DA4mA_Addr, (unsigned char *)&envionment_variables.TC_DA4mA, 4);
            ReadEEPROM(TC_DA20mA_Addr, (unsigned char *)&envionment_variables.TC_DA20mA, 4);            
            ReadEEPROM(RH_DA4mA_Addr, (unsigned char *)&envionment_variables.RH_DA4mA, 4);
            ReadEEPROM(RH_DA20mA_Addr, (unsigned char *)&envionment_variables.RH_DA20mA, 4);
            if(Flag == 0)
            {
                  for(U8 i = 0;i<9;i++)
            {
               ReadEEPROM(TCDATable_Addr+i*2, (unsigned char *)&envionment_variables.TCDATable[i], 2);
                 
            }
            for(U8 i = 0;i<9;i++)
            {
               ReadEEPROM(RHDATable_Addr+i*2, (unsigned char *)&envionment_variables.RHDATable[i], 2);              
            }
            }
            
             
}

float FacVaril;
void WriteFacSystemVar()
{
      

            //保存设置的值
            WriteEEPROM(Fac_Addr + Mini_temperature_Addr, (unsigned char *)&envionment_variables.Mini_temperature, 4);
            ReadEEPROM(Fac_Addr +Mini_temperature_Addr, (unsigned char *)&FacVaril, 4);

            WriteEEPROM(Fac_Addr +Max_temperature_Addr, (unsigned char *)&envionment_variables.Max_temperature, 4);
            ReadEEPROM(Fac_Addr +Max_temperature_Addr, (unsigned char *)&FacVaril, 4);
                        
            WriteEEPROM(Fac_Addr + Mini_humidity_Addr, (unsigned char *)&envionment_variables.Mini_humidity, 4);
            ReadEEPROM(Fac_Addr + Mini_humidity_Addr, (unsigned char *)&FacVaril, 4);
            
            WriteEEPROM(Fac_Addr + Max_humidity_Addr, (unsigned char *)&envionment_variables.Max_humidity, 4);
            ReadEEPROM(Fac_Addr + Max_humidity_Addr, (unsigned char *)&FacVaril, 4);
            
            WriteEEPROM(Fac_Addr + Zero_temperature_Addr, (unsigned char *)&envionment_variables.Zero_temperature, 4);
            ReadEEPROM(Fac_Addr + Zero_temperature_Addr, (unsigned char *)&FacVaril, 4);
            
            WriteEEPROM(Fac_Addr + Zero_humidity_Addr, (unsigned char *)&envionment_variables.Zero_humidity, 4);
            ReadEEPROM(Fac_Addr + Zero_humidity_Addr, (unsigned char *)&FacVaril, 4);
            
            
            
            WriteEEPROM(Fac_Addr + TC_CurrentType_Addr, (unsigned char *)&envionment_variables.TC_CurrentType, 4);
            ReadEEPROM(Fac_Addr + TC_CurrentType_Addr, (unsigned char *)&FacVaril, 4);            
            WriteEEPROM(Fac_Addr + RH_CurrentType_Addr, (unsigned char *)&envionment_variables.RH_CurrentType, 4); 
            ReadEEPROM(Fac_Addr + RH_CurrentType_Addr, (unsigned char *)&FacVaril, 4);
            
            WriteEEPROM(Fac_Addr + TC_DA4mA_Addr, (unsigned char *)&envionment_variables.TC_DA4mA, 4);
            ReadEEPROM(Fac_Addr + TC_DA4mA_Addr, (unsigned char *)&FacVaril, 4);            
            WriteEEPROM(Fac_Addr + TC_DA20mA_Addr, (unsigned char *)&envionment_variables.TC_DA20mA, 4);
            ReadEEPROM(Fac_Addr + TC_DA20mA_Addr, (unsigned char *)&FacVaril, 4);
            
            WriteEEPROM(Fac_Addr + RH_DA4mA_Addr, (unsigned char *)&envionment_variables.RH_DA4mA, 4);
            ReadEEPROM(Fac_Addr + RH_DA4mA_Addr, (unsigned char *)&FacVaril, 4);            
            WriteEEPROM(Fac_Addr + RH_DA20mA_Addr, (unsigned char *)&envionment_variables.RH_DA20mA, 4);
            ReadEEPROM(Fac_Addr + RH_DA20mA_Addr, (unsigned char *)&FacVaril, 4);
     
            
            
}
void ReadFacSystemVar()
{
  
            ReadEEPROM(Fac_Addr + Mini_temperature_Addr, (unsigned char *)&envionment_variables.Mini_temperature, 4);
            ReadEEPROM(Fac_Addr + Max_temperature_Addr, (unsigned char *)&envionment_variables.Max_temperature, 4);
            ReadEEPROM(Fac_Addr + Mini_humidity_Addr, (unsigned char *)&envionment_variables.Mini_humidity, 4);
            ReadEEPROM(Fac_Addr + Max_humidity_Addr, (unsigned char *)&envionment_variables.Max_humidity, 4);
            ReadEEPROM(Fac_Addr + Zero_temperature_Addr, (unsigned char *)&envionment_variables.Zero_temperature, 4);
            ReadEEPROM(Fac_Addr + Zero_humidity_Addr, (unsigned char *)&envionment_variables.Zero_humidity, 4);            
            ReadEEPROM(Fac_Addr + TC_CurrentType_Addr, (unsigned char *)&envionment_variables.TC_CurrentType, 4);
            ReadEEPROM(Fac_Addr + RH_CurrentType_Addr, (unsigned char *)&envionment_variables.RH_CurrentType, 4);             
            
            ReadEEPROM(Fac_Addr + TC_DA4mA_Addr, (unsigned char *)&envionment_variables.TC_DA4mA, 4);
            ReadEEPROM(Fac_Addr + TC_DA20mA_Addr, (unsigned char *)&envionment_variables.TC_DA20mA, 4);                                  
            ReadEEPROM(Fac_Addr + RH_DA4mA_Addr, (unsigned char *)&envionment_variables.RH_DA4mA, 4);
            ReadEEPROM(Fac_Addr + RH_DA20mA_Addr, (unsigned char *)&envionment_variables.RH_DA20mA, 4);
          
 
}

void InitSettting()
{
	unsigned char aucTemp[2];
          U16   DAPWM,DAPWM0;
	ReadEEPROM(140, aucTemp, 2);
         if((aucTemp[0]!=0x55) && (aucTemp[1]!=0x55) )
	//if((aucTemp[0]!=0x51) && (aucTemp[1]!=0x51) )
	{
		envionment_variables.Mini_temperature = 0.0;
		envionment_variables.Max_temperature = 50.0;
		envionment_variables.Mini_humidity = 0.0;
		envionment_variables.Max_humidity = 100.0;
		envionment_variables.Zero_temperature = 0.0;
		envionment_variables.Zero_humidity = 0.0;		                    
		envionment_variables.TC_CurrentType = 4.0;
		envionment_variables.RH_CurrentType = 4.0;								
                    
                    envionment_variables.TC_DA4mA = 999;		
		envionment_variables.TC_DA20mA = 100;
                    
                    envionment_variables.RH_DA4mA = 999;		
		envionment_variables.RH_DA20mA = 100;
                   // 985  75
                    DAPWM = 985;
                    DAPWM0 = 910/8;
                    envionment_variables.TCDATable[0] = DAPWM;//4
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[1] = DAPWM;//6
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[2] = DAPWM;//8
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[3] = DAPWM;//10
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[4] = DAPWM;//12/
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[5] = DAPWM;//14
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[6] = DAPWM;//16
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[7] = DAPWM;//16
                     DAPWM -= DAPWM0;
                    envionment_variables.TCDATable[8] = DAPWM;//18
                    
                    
                    DAPWM = 985;
                    envionment_variables.RHDATable[0] = DAPWM;//4
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[1] = DAPWM;//6
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[2] = DAPWM;//8
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[3] = DAPWM;//10
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[4] = DAPWM;//12/
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[5] = DAPWM;//14
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[6] = DAPWM;//16
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[7] = DAPWM;//16
                     DAPWM -= DAPWM0;
                    envionment_variables.RHDATable[8] = DAPWM;//18
                    
                    
		aucTemp[0]=aucTemp[1]=0x55;		                    
                    WriteSystemVar(0);
                    ReadSystemVar(0);
                    WriteEEPROM(140, aucTemp, 2);
	}
	else
	{
		ReadSystemVar(0);
	}
}





⌨️ 快捷键说明

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