标题: 好心人看过来 基于STC12A5A60S2的湿度传感器 [打印本页]

作者: 1149777206    时间: 2017-2-14 21:02
标题: 好心人看过来 基于STC12A5A60S2的湿度传感器
#include <reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table1[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint adc_finished,n;
float a,c;
uchar shi,ge,bai,num;
int b;
sfr ADC_CONTR=0xBC;//adc控制寄存器,不可位寻址,用或运算来设置
sfr ADC_RES=0xBD;//转换结果寄存器,高八位
sfr ADC_LOW2=0xBE;//转换结果寄存器,低两位
sfr P1ASF=0x9d;//设置p1的那一口为输入口,不可位寻址.
/*以下都是控制寄存器的各位地址*/
#define ADC_POWER 0x80;//adc电源,第7位
#define ADC_FLAG 0x10;//转换结束标志位,第4位
#define ADC_START 0x08;//转换开始,第3位
#define ADC_SPEEDLL 0x00;//速度位,第5,6位
#define ADC_SPEEDL 0x20;
#define ADC_SPEEDH 0x40;
#define ADC_SPEEDHH 0x60;
#define ADC_CHS 0x00;//输入通道为第p1.0,1,2,3三位可设置p10-p17
//位定义完成
void Delay(uint n)
{
    uchar x;

    while (n--)
    {
        x = 5000;
        while (x--);
    }
}
void adcinit()       //adc初始化函数
{         


P1ASF=0x01;          //设置p10 为ad转换输入口
ADC_CONTR=0xe0;      //打开电源,设最高速度
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
ADC_CONTR|=ADC_CHS;  //设置频道
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();_nop_();
}
float  huqushuju()                //adc转换函数,数据得到
{
adcinit();
ADC_RES=0;
ADC_LOW2=0;
ADC_CONTR|=ADC_START;//启动ad转换,置1为起动,转换结束后自动置0
_nop_();
_nop_();                         
_nop_();                  
_nop_();

adc_finished=0;
while(adc_finished==0)
{
adc_finished=ADC_CONTR&ADC_FLAG;//检测是否转换结束,没结束一直等
}

_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_(); _nop_();
a=ADC_RES*4+ADC_LOW2;
a=100-100*a/1023;
a=a*10;


ADC_CONTR=0;
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
return a;
}

void display(uchar bai,uchar shi,uchar ge)
{
          uint i,t;
        for(i=0;i<3;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0;P0=table[ge]; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; P0=table1[shi];break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0;P0=table[bai]; break;//显示第2位
                                         
                }
                  t=1000;
                  while(t--);
        }
}


void main()
{  
  while(1)
  {
   huqushuju();
     b=(int)a;
     ge=b%10;
         shi=b/10%10;
         bai=b/100;
         display(bai, shi,ge);
        }
          
}


  这是我的程序 然后上电之后发现显示的值都大于50,在干燥环境中为50.09,放到水里之后发现就增加了十几
本来干燥环境下湿度为零的,是不是程序出错了啊


作者: pyh_78    时间: 2017-2-15 10:46
干燥环境也不可能为0
作者: 1149777206    时间: 2017-2-15 18:37
接近零吧 。但是温度值只在50至65上变化
作者: 1149777206    时间: 2017-2-15 19:03
pyh_78 发表于 2017-2-15 10:46
干燥环境也不可能为0

差不多接近零吧 但是湿度值一直维持在50和65之间,这完全不合常理
作者: 捶你胸么口    时间: 2017-2-16 09:06
差不多接近零吧 但是湿度值一直维持在50和65之间,这完全不合常理
作者: yzwzfyz    时间: 2017-2-16 18:26
通常,在普通的措施下(家里所能办到的),湿度可以是5-98%RH,这已经不错了。
作者: yzwzfyz    时间: 2017-2-16 18:30
你首先确认验证一下:干、湿环境下传感器给的直接值是多少(无需变换计算),与传感器的说明书中数据对比一下。你就会找到问题出在哪了。
作者: yzwzfyz    时间: 2017-2-16 18:37
本帖最后由 yzwzfyz 于 2017-2-16 21:46 编辑

干环境:将空锅用微火空烧一会儿,锅内的环境可认为是干。
湿环境:将锅中放些水,烧开后,水面附近环境可认为是湿。
作者: chen_12580    时间: 2017-2-16 21:14
不知道为什么,很高,我的dht11响应时间也是很慢的,突然飙到很高,要经过一段时间才能显示正常
作者: 1149777206    时间: 2017-2-18 10:09
yzwzfyz 发表于 2017-2-16 18:26
通常,在普通的措施下(家里所能办到的),湿度可以是5-98%RH,这已经不错了。

但是湿度一直就是50以上 不下50就有问题了
作者: 1149777206    时间: 2017-2-18 10:10
yzwzfyz 发表于 2017-2-16 18:30
你首先确认验证一下:干、湿环境下传感器给的直接值是多少(无需变换计算),与传感器的说明书中数据对比一 ...

这类传感器并没有湿度对应的一个电阻值
作者: LJZ91896    时间: 2017-2-20 15:56
接近零
作者: 贝贝贝贝斯手    时间: 2017-2-20 21:31
正常来说应该是接近0




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1