求一个ds18b20例案,正负数都可以显示,精度到0.1的

2020-02-01 16:34发布

最简单的skip rom方案 或者给我讲一下最后接收到的两个byte的数据怎么处理就行了
谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
xiaoaf
1楼-- · 2020-02-03 19:05
void get_tem()
{
        uchar teml,temh;
        reset();
        Write_Byte(0xcc);//跳过读序列号的操作
        Write_Byte(0x44);//启动温度转换
        delay_ms(750);//750ms
        reset();
        Write_Byte(0xcc);
        Write_Byte(0xbe);//读取温度转换结果
        teml=Read_Byte();
        temh=Read_Byte();
       
        if((temh&0xf0)==0xf0)//如果是负温度
                {
                        flag_low=1;
                        temper=(~((temh)*256+(teml))+1)*6.25;
                }

        else
                temper=(temh*256+teml)*6.25;//放大100倍
}
692446
2楼-- · 2020-02-03 22:47
 精彩回答 2  元偷偷看……
xuan12321
3楼-- · 2020-02-04 01:38
请问,有没有人用cvavr做过 啊,你们是用什么来做精确延时的啊,我用自带的延时,就是读不出数据求高手帮忙看看,我发的贴不好,都没人理,只好到这边来拉人啦,求高手指点http://www.amobbs.com/thread-5509739-1-4.html
JamesErik
4楼-- · 2020-02-04 07:29
都没有人响应精度问题?
hsztc
5楼-- · 2020-02-04 13:09
前面整数部份我就不说了,我只给个最后一位小数得到的方法,结果四舍五入。

x为18B20提取的小数部份,z为输出。

z=(((unsigned char)(x*10u))+8u)>>4;

一周热门 更多>