久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3440|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

這是ds18b20部分的代碼,lcd顯示總是幾千的數(shù)值,請(qǐng)有心人指正!!!謝謝!!!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:503877 發(fā)表于 2019-4-5 10:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 不好不壞 于 2019-4-5 11:10 編輯

void init_ds18b20()
{
        u8 i;
        bit flag;
        do
        {
        dq=1;
        _nop_();
        dq=0;
        i=103;
        while(i>0)i--;//延時(shí)
        dq=1;
        flag=dq;
        i=4;
        while(i>0)i--;
        }while(flag);
}
bit read_onebit()
{
                u8 i;
                u8 onebit;
                dq=0;
                i++;
                dq=1;
                i++;
                onebit=dq;
                i=8;while(i>0)i--;//延時(shí)
        return onebit;
}
u8 read_onebyte()
{
        u8 dat=0,a,k;
        for(a=0;a<8;a++)
        {
        k=read_onebit();
        dat=(k<<7)|(dat>>1);//循環(huán)把讀到的低位放在低位
        }
        return dat;
}
void write_onebyte(u8 dat)
{
        u8 d=0,i;        
        bit testbit;
        for(d=8;d>0;d--)
        {
                dq=dat&0x01;                //從dat最低位開始傳送
                dat>>=1;                                //移除已經(jīng)傳送的最低位
                if(testbit==1)                //寫1
                {
                        dq=0;
                        _nop_();        
                        _nop_();
                        dq=1;
                        i=8;while(i>0)i--;//延時(shí)
                }
                else                        //寫0
                {
                        dq=1;
                        i=8;while(i>0)i--;
                        dq=0;
                        i++;i++;
                }
        }
}
float get_temp()
{
        u8 a,b;
        u16 temp;float tmp;
        init_ds18b20();                //初始化
        write_onebyte(0xcc);        //忽略ROM指令
        write_onebyte(0x64);
        delay_ms(10);

        init_ds18b20();                        //再度初始化
        write_onebyte(0xcc);        //忽略ROM指令
        write_onebyte(0x00);
        delay_ms(10);

        init_ds18b20();                //初始化
        write_onebyte(0xcc);        //忽略ROM指令
        write_onebyte(0x44);        //溫度轉(zhuǎn)換指令+
        delay_ms(800);

        init_ds18b20();                //初始化
        write_onebyte(0xcc);        //忽略ROM指令
        write_onebyte(0xbe);        //讀暫存器指令


        a=read_onebyte();                //第一個(gè)字節(jié)是LSB,低八位
        b=read_onebyte();                //第二個(gè)字節(jié)是MSB,高八位
        temp=b;                                        //先把高八位b裝進(jìn)temp,一定是進(jìn)入到temp低八位
        temp<<=8;                                //左移8次;讓B回到原位
        temp|=a;                                        //再和A相加,
        tmp=(float)(temp*0.0625);
        return tmp;
}


psb.jpg (121.01 KB, 下載次數(shù): 97)

psb.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2019-4-5 13:22 | 只看該作者
對(duì)比一下就知道問題在哪里 ds18b20溫度LCD顯示.zip (159.01 KB, 下載次數(shù): 34)
回復(fù)

使用道具 舉報(bào)

板凳
ID:164602 發(fā)表于 2019-4-5 13:37 | 只看該作者
18B20是12位精度的話:
正數(shù)這樣轉(zhuǎn)換:temp=tp*0.0625*100+0.5;//tp是有符號(hào)實(shí)數(shù)型變量,就是讀到的溫度值,這個(gè)計(jì)算保留兩位小數(shù)

負(fù)數(shù)這樣轉(zhuǎn)換:tp=tp-1;
                      tp=~tp;
                      temp=tp*0.0625*100+0.5;
回復(fù)

使用道具 舉報(bào)

地板
ID:503877 發(fā)表于 2019-4-5 18:17 | 只看該作者
wulin 發(fā)表于 2019-4-5 13:22
對(duì)比一下就知道問題在哪里

完全套用你的程序,顯示出負(fù)的溫度,而且整數(shù)位還在跳動(dòng),不知緣故
回復(fù)

使用道具 舉報(bào)

5#
ID:503877 發(fā)表于 2019-4-5 18:18 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2019-4-5 13:37
18B20是12位精度的話:
正數(shù)這樣轉(zhuǎn)換:temp=tp*0.0625*100+0.5;//tp是有符號(hào)實(shí)數(shù)型變量,就是讀到的溫度值 ...

試過了,還是不正常
回復(fù)

使用道具 舉報(bào)

6#
ID:503877 發(fā)表于 2019-4-5 18:28
wulin 發(fā)表于 2019-4-5 13:22
對(duì)比一下就知道問題在哪里

http://javascript:void(0)只是按照你的代碼實(shí)驗(yàn)的結(jié)果,

7#
ID:213173 發(fā)表于 2019-4-6 07:03 | 只看該作者
不好不壞 發(fā)表于 2019-4-5 18:17
完全套用你的程序,顯示出負(fù)的溫度,而且整數(shù)位還在跳動(dòng),不知緣故

軟件是建立在硬件基礎(chǔ)上的,硬件條件不同不要直接套用,否則會(huì)出錯(cuò)。
回復(fù)

使用道具 舉報(bào)

8#
ID:917252 發(fā)表于 2021-5-26 09:57 | 只看該作者
大佬們看看我的那個(gè)溫度顯示,負(fù)數(shù)部分異常怎么改呢
回復(fù)

使用道具 舉報(bào)

9#
ID:824490 發(fā)表于 2021-5-26 10:08 | 只看該作者
其實(shí)這類問題,你能在線跟蹤一下代碼,很容易發(fā)現(xiàn)問題的。
1、讀寫時(shí)序?qū)Σ粚?duì)?
2、數(shù)值轉(zhuǎn)換對(duì)不對(duì)?
3、顯示傳參對(duì)不對(duì)?
18B20的代碼還是很友善的,不行的話就多下載一些人家現(xiàn)成的代碼來改。
回復(fù)

使用道具 舉報(bào)

10#
ID:824490 發(fā)表于 2021-5-26 10:15 | 只看該作者
bit read_onebit()
{
                u8 i;
                u8 onebit;
                dq=0;
                i++;
                dq=1;
                i++;
                onebit=dq; ///????
                i=8;while(i>0)i--;//延時(shí)
        return onebit;////onebit永遠(yuǎn)是1,
}
也就是說你讀出的數(shù)值都是1 ,12位剛好是4096,與你顯示的一致?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99久久久久久动医院 | 日韩aⅴ在线观看 | 国产精品免费在线 | 成人精品国产免费网站 | 亚洲欧美日韩精品久久亚洲区 | 国产成人精品一区二区三区四区 | 粉嫩国产精品一区二区在线观看 | 国产欧美在线一区 | 亚洲精品免费在线观看 | 亚洲免费在线观看 | 欧美性久久| 国产日韩欧美一区 | 欧美一级片中文字幕 | 久久一级| 欧美日本在线观看 | 国产一区二区不卡 | 中文天堂在线一区 | 99re在线视频| 亚洲视频在线一区 | 国产精品久久午夜夜伦鲁鲁 | 亚洲成人精品一区 | 亚洲一区二区三区视频 | 国产精品永久免费视频 | 可以在线看的黄色网址 | aaaaa毛片 | 精品国产乱码久久久久久88av | 亚洲资源在线 | 日本一二三区电影 | 亚洲九色 | 国产xxxx在线 | 久久综合成人精品亚洲另类欧美 | 国产免费一区二区 | 老子午夜影院 | a a毛片| 欧美亚洲国产成人 | 91精品久久久久久久 | 日韩av资源站 | 精品国产欧美一区二区三区不卡 | 国产精品一区二区欧美黑人喷潮水 | 成人国产精品久久久 | 欧美成人精品激情在线观看 |