[其他] ds18b20温度控制器,怎么写才能控制温度控制到小数位

[复制链接]
790|5
 楼主 | 2018-4-23 21:04 | 显示全部楼层 |阅读模式
ds18b20+lcd1602+89c52设计温度控制器,显示温度能到小数位,控制温度不能到小数,怎么改才能到小数
oid data_pros()        //数据处理函数
{
        uint8 i;              
        uint8 temp_buf[2],humi_buf[2];
        uint8 temphbuf[2],templbuf[2],humihbuf[2],humilbuf[2];
        float dio;        //测量温度值
        uint16 k;  //取小数点后两位有效数字

        tempvalue=readtemp();        //读取温度
        DHT11_Read_Data(&temp,&humi);
        temp_buf[0]=temp/10+0x30;          //LCD显示温度做准备
        temp_buf[1]=temp%10+0x30;

        humi_buf[0]=humi/10+0x30;          //LCD显示湿度做准备
        humi_buf[1]=humi%10+0x30;
       
        dio=a*0.0625;
        k=dio*10000;//取小数点后两位有效数字

        temphbuf[0]=temph/10+0x30;           //LCD显示上下限温度做准备
        temphbuf[1]=temph%10+0x30;
        templbuf[0]=templ/10+0x30;
        templbuf[1]=templ%10+0x30;

        humihbuf[0]=humih/10+0x30;           //LCD显示上下限湿度做准备
        humihbuf[1]=humih%10+0x30;
        humilbuf[0]=humil/10+0x30;
        humilbuf[1]=humil%10+0x30;

        if(mode==0)                   //测量温度,湿度显示
        {
                lcd_init_display();                          //LCD显示函数
                wrc(0x85);                                         //LCD显示温度位置
                wrd(num[tempvalue%100/10]);         //测量温度十位显示
                wrd(num[tempvalue%100%10]);         //测量温度个位显示
                wrd('.');
                wrd(num[k/1000]);  //取小数点后两位有效数字
                wrd(0xdf);
                wrd('C');                 //测量温度符号
       
                for(i=0;i<2;i++)
                {
                        wrc(0Xc5+i);           //LCD显示湿度位置
                        wrd(humi_buf[i]); //测量湿度十个位显示                  
                }       
                for(i=0;i<3;i++)
                {
                        wrc(0Xc7+i);         //LCD显示符号位置
                        wrd(str5[i]);        //测量湿度符号        %RH  
                }       
        }
        if(mode==1)                          //温度上限显示
        {
                wrc(0x80);
                for(i=0;i<6;i++)
                {
                        wrd(str6[i]);                  
                }
                wrd(temphbuf[0]);
                wrd(temphbuf[1]);                       
        }
        if(mode==2)                          //温度下限显示
        {
                wrc(0x80);
                for(i=0;i<6;i++)
                {
                        wrd(str7[i]);                  
                }
                wrd(templbuf[0]);
                wrd(templbuf[1]);                       
        }
        if(mode==3)                          //湿度上限显示
        {
                wrc(0x80);
                for(i=0;i<6;i++)
                {
                        wrd(str8[i]);                  
                }
                wrd(humihbuf[0]);
                wrd(humihbuf[1]);                       
        }
        if(mode==4)                          //湿度下限显示
        {
                wrc(0x80);
                for(i=0;i<6;i++)
                {
                        wrd(str9[i]);                  
                }
                wrd(humilbuf[0]);
                wrd(humilbuf[1]);                       
        }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-4-24 07:56 | 显示全部楼层
控制温度不能到小数,怎么改才能到小数?
对这点没有很理解?你想要如何控制呢?
| 2018-4-24 08:40 | 显示全部楼层
DS18B20只是一个检测温度的,怎么控制温度?不太明白楼主的设计方法
| 2018-4-24 09:15 | 显示全部楼层
xyz549040622 发表于 2018-4-24 07:56
控制温度不能到小数,怎么改才能到小数?
对这点没有很理解?你想要如何控制呢? ...

是显示驱动没显示

  temp_buf[0]=temp/10+0x30;          //LCD显示温度做准备
        temp_buf[1]=temp%10+0x30;

        humi_buf[0]=humi/10+0x30;          //LCD显示湿度做准备
        humi_buf[1]=humi%10+0x30;
这里只有整数部分。
没有小数点显示,和小数部分。
你加上不就行了?
| 2018-4-29 23:50 | 显示全部楼层
问题叙述 不够清晰,似乎包含2个问题:
1.使显示的精度达到小数位,这更传感器的选择有关,有的检测精度直到整数位,对于DS18B20来说起精度是可以达到的,需对检测的的小数部分加以处理来实现显示。
2.使温度的控制精度达到小数位,需适当地将小数部分也变成整数,以便进行判别对加热器进行控制。但更为重要的是加热器是有迟滞性的,只有引入PID调节或模糊控制等才能达到较高的控制精度,以确保精度可达小数位级别。
| 2018-5-18 09:16 | 显示全部楼层
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /3 下一条

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