版主 
 
主题
回帖0
积分39546
阅读权限200
注册时间2011-5-6
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
 本帖最后由 sdf15937 于 2012-3-20 22:07 编辑  
 
关于SHT11湿度计的51程序 
keil提示是warningL16:uncaller segment ,ignored for overlay process 
             segment:?PR?_WRITE_SHT11?WENJ 
仿真的结果是有规律的乱跳
 
 
读数都是不准确的 
/*******************温湿度计驱动***************/ 
void Start_SHT11(uchar com) 
{ 
    uchar i; 
    SHT_DAT=1; 
    SHT_SCK=0; 
    for(i=0;i<12;i++) 
    { 
        SHT_SCK=1; 
        _nop_(); 
        SHT_SCK=0; 
    } 
    SHT_DAT=1; 
    SHT_SCK=1; 
    _nop_(); 
    SHT_DAT=0; 
    _nop_(); 
    SHT_SCK=0; 
    _nop_(); 
    SHT_SCK=1; 
    _nop_(); 
    SHT_DAT=1; 
    _nop_(); 
    SHT_SCK=0; 
    for(i=0;i<8;i++) 
    { 
        SHT_DAT=(bit)(com&0x80); 
        com<<=1; 
        SHT_SCK=1; 
        _nop_(); 
        SHT_SCK=0; 
    } 
    SHT_DAT=1; 
    _nop_(); 
    _nop_(); 
    i=200; 
    do{ 
        _nop_(); 
        _nop_(); 
        i-=1; 
    }while((SHT_DAT==1)&&(i!=0)); 
    SHT_SCK=1; 
    _nop_(); 
    SHT_SCK=0; 
} 
void Write_SHT11(uchar com) 
{ 
    uchar i,j; 
    SHT_DAT=1; 
    SHT_SCK=0; 
    for(i=0;i<12;i++) 
    { 
        SHT_SCK=1; 
_nop_(); 
        SHT_SCK=0; 
    } 
    SHT_DAT=1; 
    SHT_SCK=1; 
    _nop_(); 
    SHT_DAT=0; 
    _nop_(); 
    SHT_SCK=0; 
    _nop_(); 
    SHT_SCK=1; 
    _nop_(); 
    SHT_DAT=1; 
    _nop_(); 
    SHT_SCK=0; 
    j=0x06; 
    for(i=0;i<8;i++) 
    { 
        SHT_DAT=(bit)(j&0x80); 
        com<<=1; 
        SHT_SCK=1; 
        _nop_(); 
        SHT_SCK=0; 
    } 
    SHT_DAT=1; 
    _nop_(); 
    _nop_(); 
    i=200; 
    do{ 
        _nop_(); 
        _nop_(); 
i-=1; 
    }while((SHT_DAT==1)&&(i!=0)); 
    SHT_SCK=1; 
    _nop_(); 
    SHT_SCK=0; 
    for(i=0;i<8;i++) 
    { 
        SHT_DAT=(bit)(com&0x80); 
        com<<=1; 
        SHT_SCK=1; 
_nop_(); 
        SHT_SCK=0; 
    } 
    SHT_DAT=1; 
    _nop_(); 
    _nop_(); 
    i=200; 
    do{ 
        _nop_(); 
        _nop_(); 
        i-=1; 
    }while((SHT_DAT==1)&&(i!=0)); 
    SHT_SCK=1; 
    _nop_(); 
    SHT_SCK=0; 
} 
uint Read_SHT11(void) 
{ 
    uchar i; 
    uchar j; 
    uint k; 
    if(SHT_DAT==0) 
    { 
        k=0; 
j=0; 
for(i=0;i<8;i++) 
{ 
     j<<=1; 
     j|=(uchar)SHT_DAT; 
     SHT_SCK=1; 
     _nop_(); 
     SHT_SCK=0; 
} 
        SHT_DAT=0; 
_nop_(); 
        SHT_SCK=1; 
_nop_(); 
SHT_SCK=0; 
k=j; 
k*=256; 
j=0; 
        for(i=0;i<8;i++) 
{ 
     j<<=1; 
            j|=(uchar)SHT_DAT; 
     SHT_SCK=1; 
     _nop_(); 
     SHT_SCK=0; 
} 
        SHT_DAT=1; 
_nop_(); 
        SHT_SCK=1; 
_nop_(); 
SHT_SCK=0; 
k|=j; 
return(k); 
    } 
    else 
    { 
        return(0xf000); 
    } 
} 
 
 
 
 
温湿度计算与显示 
old_sec=Read1302(0x81)%16;     //湿度显示 
            if((old_sec&0x01)==0) 
            { 
                flag=0x03;    //偶数秒启动温度采集转换  
            } 
            else 
            { 
                flag=0x05;    //奇数秒启动湿度采集转换  
            } 
            Start_SHT11(flag); 
        
        temp=Read_SHT11(); 
        if(tempsht!=0xf000) 
        {   //采集成功,可以读 
            if(flag==0x03) 
            {                 //如下进行温度计算,并显示XX.X 
                f_temp=0.01; 
                f_temp*=tempsht; 
                f_temp-=40; 
                f_temp*=10; 
                tempsht=(uint)f_temp; 
     
        LCD1602_write_char(20,0,tempsht/100+0x30); //温度显示10位 
      LCD1602_write_data((tempsht%100)/10+0x30); 
       LCD1602_write_data(0x2E); 
        LCD1602_write_data((tempsht%100)%10+0x30); 
      LCD1602_write_data(3); 
                 
            } 
            else 
            {                 //如下进行湿度计算,并显示XX.X 
                f_temp=(float)tempsht; 
                f_temp*=(float)tempsht; 
                f_temp*=-2.8e-6; 
                f_temp+=((float)tempsht*0.045); 
                f_temp-=4; 
                f_temp*=10; 
                tempsht=(uint)f_temp; 
      
     LCD1602_write_char(28,0,tempsht/100+0x30); //湿度显示 1 
      LCD1602_write_data((tempsht%100)/10+0x30); 
       LCD1602_write_data(0x2E); 
        LCD1602_write_data((tempsht%100)%10+0x30); 
      LCD1602_write_data('%'); 
            } 
        } |   
 
 
 
 |