找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6883|回复: 6
收起左侧

光敏电阻和湿度传感器都通过ad转换,光照可以正常显示,湿度从大到小,什么情况?

[复制链接]
ID:215752 发表于 2017-7-3 22:44 | 显示全部楼层 |阅读模式
// ad读取函数////////////////////////////////////////////////////
uchar ad0832read(uchar channel)
{
        uchar i=0,value1=0,value2=0;               
                SCL=0;
                delay_1ms(2);
                DO=1;
            delay_1ms(2);
                CS=0;                //开始
            delay_1ms(2);
                SCL=1;                //第一个上升沿       
                   delay_1ms(2);
                SCL=0;
            delay_1ms(2);
                DO=1;
        delay_1ms(2);
                SCL=1;          //第二个上升沿
                   delay_1ms(2);
                SCL=0;
                   delay_1ms(2);
                DO=channel;
                   delay_1ms(2);
                SCL=1;         //第三个上升沿
                   delay_1ms(2);
                SCL=0;            
            delay_1ms(2);
                DO=1;
                delay_1ms(2);
                for(i=0;i<8;i++)        //从高位到低位
                {
                        SCL=1;
                        delay_1ms(2);
                        SCL=0;
                        delay_1ms(2);
                        if(DO)
                        {  
                                value1|=0x80>>i;
                                delay_1ms(2);
                        }
                                                               
                }
               
               
                for(i=0;i<8;i++)        //从低位到        高位
                {
                        if(DO)
                        {  
                          value2|=0x80<<i;
                          delay_1ms(2);
                        }
                        SCL=1;
                        delay_1ms(2);
                        SCL=0;
                        delay_1ms(2);                                               
                }       
                CS=1;
                SCL=1;
                delay_1ms(1);
                DO=1;//数据读取完成,释放总线
                delay_1ms(2);
        return (value1);

}


/********************独立按键程序*****************/
uchar key_can;         //按键值

void key()         //独立按键程序
{
        static uchar key_new;
        key_can = 20;                   //按键值还原
        P3 |= 0xf0;
        if((P3 & 0xf0) != 0xf0)                //按键按下
        {
                delay_1ms(1);                     //按键消抖动
                if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
                {                                                //确认是按键按下
                        key_new = 0;
                        switch(P3 & 0xf0)
                        {
                                case 0xe0: key_can = 4; break;           //得到k1键值
                                case 0xd0: key_can = 3; break;           //得到k2键值
                                case 0xb0: key_can = 2; break;           //得到k3键值
                                case 0x70: key_can = 1; break;           //得到k4键值
                        }
                       
                                       
                }                       
        }
        else
                key_new = 1;       
}

void main()
{
          beep = 0;                                    //开机蜂鸣器叫一声
        delay_1ms(1);
        P0 = P1 = P2 = P3 = 0xff;   //初始化IO口                          
        init_1602();                           //1602液晶初始化
        delay_1ms(750);       
        while(1)
        {
                key();                                        //独立按键程序
                if(key_can!= 0)
                {
                        key_with();                        //按键按下要执行的程序
                }
       
                 flag_250ms ++;         
                if(flag_250ms >=250)
                {               
                        flag_250ms = 0;          
                        clock_h_l();         //报警函数
                        temperature =read_temp();  //读取温度值
                        delay_1ms(2);
                        if(menu_1 == 0)
                        {
                                guangxian = ad0832read(1);
                            guangxian = guangxian * 99 / 255;
                            shidu = ad0832read(0);          //读出湿度
                            shidu=shidu * 99 / 255;
                                write_sfm2(1,8,shidu);   //显示湿度       
                                write_sfm2(2,4,temperature);           //显示温度
                                write_sfm2(2,11,guangxian);          //显示光线       
                        }
                }
                delay_1ms(1);
        }
}



回复

使用道具 举报

ID:7485 发表于 2017-7-4 09:41 | 显示全部楼层
不知道你说的是什么。
回复

使用道具 举报

ID:215752 发表于 2017-7-4 16:15 | 显示全部楼层
ahshmj 发表于 2017-7-4 09:41
不知道你说的是什么。

经过adc0832转换后,当湿度传感器放在空气中时是99%,当放在水里时是0%?为什么  
还有就是经过adc0832转换后,被单片机读取的是什么?怎么转换为百分比?
非常感谢
回复

使用道具 举报

ID:194729 发表于 2019-3-15 19:39 | 显示全部楼层
小草228 发表于 2017-7-4 16:15
**** 作者被禁止或删除 内容自动屏蔽 ****

这个问题你解决没有,我现在遇到的问题就是这样,不知道该怎样解决
回复

使用道具 举报

ID:478073 发表于 2019-3-16 07:28 | 显示全部楼层
都是一样,都是将接收到的变化的信息转换为电压变化,然后单片机用AD检测判断显示
回复

使用道具 举报

ID:521200 发表于 2019-5-21 14:57 | 显示全部楼层
楼主有实现光照显示的代码吗...蟹蟹
回复

使用道具 举报

ID:511890 发表于 2019-5-21 16:04 | 显示全部楼层
小草228 发表于 2017-7-4 16:15
**** 作者被禁止或删除 内容自动屏蔽 ****

这个只能查看你用的湿度计的数据手册才能确定。AD转换出来的是湿度计某种变化(电压、电流什么的)。所以是不一定电压大就表示湿度大,有可能是放过来也不一定。如果你是执着于要了解程序出问题的原因,只能去查湿度计的数据手册了。如果是要让湿度反过来显示,那么把得到的湿度(湿度显示前面的)做一个1-shidu/100-shidu。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表