/*****************************************************************QQ:408732013/*****************************************************************#ifndef_MLX90615_H#define_MLX90615_HSBIT(SDA,SFR_P0,0);//SMBusonP0.0SBIT(SCL,SFR_P0,1);//andP0.1voidMLX90615Init(void);#defineEnvirChoose0;//环境温度选择,1:读取并发送环境温度,0:只读取发送目标温度//带C的为环境温度。uchar*ReadTem(void);//返回温度字符串缓冲区的指针12.34℃bitModifyAddr(ucharaddr);//写传感器网络地址bitIICA_Read(unsignedcharaddr,unsignedcharcommand,unsignedchar*p);#endif/************************************************************************************///引用外部头文件#includeMLX90615.h/************************************************************************************//************************************************************************************//常量及全局变量定义*************************************************************************************/#defineIIC_WRITE0//WRITEdirectionbit#defineIIC_READ1//READdirectionbit//ucharWritePWMBuf[3]={0xB5,0x09,0x00};//PWM温度范围//ucharWriteConfigBuf[3]={0x01,0x15,0x00};//器件配置//ucharWriteSendRateBuf[3]={0x00,0x40,0x00};//发射率ucharTemStr[10];//存放温度转化成的字符串ucharocr_8(uchar*s);bitIICA_Read(unsignedcharid,unsignedcharaddr,unsignedchar*p);voidIICA_Write(ucharaddr,ucharcommond,uchar*p);/************************************************************************************Function:Delay_us;**Description:延时程序,延时时间范围:0~65535us;**Input:times,延时时间变量;**Output:none;**Return:none;**Note:延时时间最大是65535us;************************************************************************************/voidDelay_us(unsignedinttimes){unsignedinti;for(i=0;itimes;i++){_nop_();//调用NOP,延时1us_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}/************************************************************************************Function:Delay_ms;**Description:延时程序,延时时间范围:0~65535ms;**Input:times,延时时间变量;**Output:none;**Return:none;**Note:延时时间最大是65535ms;************************************************************************************/voidDelay_ms(unsignedinttimes){unsignedinti;for(i=0;itimes;i++)Delay_us(1000);//调用延时函数,延时1ms}/************************************************************************************Function:Delay_s;**Description:延时程序,延时时间范围:0~65535s;**Input:times,延时时间变量;**Output:none;**Return:none;**Note:延时时间最大是65535s;************************************************************************************/voidDelay_s(unsignedinttimes){unsignedinti;for(i=0;itimes;i++)Delay_ms(1000);//调用延时函数,延时1s}/************************************************************************************////读取传感器温度并转化成小数////返回值为指向温度缓冲区的指针///************************************************************************************/voidMLX90615Init(void){SDA=1;//MLX90615上电初始化SCL=1;Delay_ms(1);SCL=0;Delay_ms(3);SCL=1;Delay_ms(400);}/************************************************************************************////读取传感器温度并转化成小数////返回值为指向温度缓冲区的指针///************************************************************************************/uchar*ReadTem(void){ucharReadIICBuf[3];doubleTemperature=0;/*#ifEnvirChoose{if(IICA_Read(0x00,0x26,ReadIICBuf))//读环境温度{Temperature=(ReadIICBuf[1]*256+ReadIICBuf[0])*0.02-273.15;Temperature=Temperature*100;TemStr[0]=(uchar)(Temperature/1000)+'0';TemStr[1]=((uchar)(Temperature/100))%10+'0';TemStr[2]='.';TemStr[3]=(uchar)((((uint)(Temperature))%100)/10)+'0';TemStr[4]=(uchar)(((uint)(Temperature))%10)+'0';TemStr[5]='C';TemStr[6]=0x0d;TemStr[7]=0x0a;if(IICA_Read(0x00,0x27,ReadIICBuf))//读目标温度{Temperature=(ReadIICBuf[1]*256+ReadIICBuf[0])*0.02-273.15;Temperature=Temperature*100;TemStr[8]=(uchar)(Temperature/1000)+'0';TemStr[9]=((uchar)(Temperature/100))%10+'0';TemStr[10]='.';TemStr[11]=(uchar)((((uint)(Temperature))%100)/10)+'0';TemStr[12]=(uchar)(((uint)(Temperature))%10)+'0';TemStr[13]=0x0d;TemStr[14]=0x0a;TemStr[15]=0;returnTemStr;}//读取传感器温度成功}return0;}#else//只读取目标温度{*/if(IICA_Read(0x00,0x27,ReadIICBuf))//读温度{Temperature=(ReadIICBuf[1]*256+ReadIICBuf[0])*0.02-273.15;Temperature=Temperature*100;TemStr[0]=(uchar)(Temperature/1000)+'0';TemStr[1]=((uchar)(Temperature/100))%10+'0';TemStr[2]='.';TemStr[3]=(uchar)((((uint)(Temperature))%100)/10)+'0';TemStr[4]=(uchar)(((uint)(Temperature))%10)+'0';TemStr[5]='';TemStr[6]=0x0d;TemStr[7]=0x0a;TemStr[8]=0;returnTemStr;}elsereturn0;//}//#endif}/************************************************************************************//************************************************************************************////修改LMX90615参数程序////参数addr为要写入的传感器网络地址。//地址写入成功返回1,否则返回0。//*************************************************************************************/bitModifyAddr(ucharaddr){ucharReadIICBuf[3];ucharWriteAddrBuf[3]={0x5B,0x00,0x00};//PWM温度范围WriteAddrBuf[0]=addr;IICA_Write(0x00,0x10,WriteAddrBuf);//写地址EEPROMif(IICA_Read(0x00,0x10,ReadIICBuf))//读写入的地址,判断地址是否写入{if(ReadIICBuf[0]==addr)return1;elsereturn0;}elsereturn0;}/************************************************************************************////IIC总线硬件驱动程序//******************************************************************