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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2363|回復: 10
打印 上一主題 下一主題
收起左側

單片機DS18B20的上單復位的85℃在不影響功能的前提下怎么去除?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1084388 發表于 2023-6-15 21:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
PS:如果我將轉化函數和讀溫度函數放在循環里的話(不加上begin的話,可以正常顯示,包括按鍵變化溫度值都能讀出來,只是第一次運行要跳出85℃),但是加上begin的話就只能放在循環外面,在我的認知里,DS18B20應該是轉化一次就可以讀溫度了吧,所以放在外面應該不影響溫度的顯示,但是實際的運行結果卻是只能顯示第一次的結果,如果你按鍵的話,數碼管顯示不出來。
求大佬幫幫忙

單片機源程序如下:
#include <REGX51.H>
#include <intrins.h>
#include "display.h"
#include "delay.h"
sbit DQ=P3^7;


void delay_us(unsigned char i)------------//us級延時(進入函數11us運行延時6us)
{
        while(i--);
}


bit DS18B20chushihua()-------------------//初始化
{
        bit n;
        DQ=1;
        _nop_();
        DQ=0;
        delay_us(80);
        DQ=1;
        delay_us(4);
        n=DQ;
        delay_us(20);
        DQ=1;
        _nop_();
        return n;
}


void writeDS18B20(unsigned char xdat)------------寫時序
{
        unsigned char j;
        for(j=0;j<8;j++)
        {
                DQ=0;
                _nop_();
                DQ=xdat&0x01;
                delay_us(10);
                DQ=1;
                xdat=xdat>>1;
//                _nop_();
        }
//        _nop_();
}


unsigned char readDS18B20()--------------------------//讀時序
{
        unsigned char j,rdat;
        for(j=0;j<8;j++)
        {
                rdat=rdat>>1;
                DQ=0;
                _nop_();
                DQ=1;
                _nop_();
                if(DQ==1)
                rdat=rdat|0x80;
                delay_us(10);
                DQ=1;
                _nop_();
}
        _nop_();
        return rdat;
}


void DS18B20_zhuanhua()----------------溫度轉化函數
{
                        DS18B20chushihua();
                        writeDS18B20(0xcc);
                        writeDS18B20(0x44);
}


unsigned int DS18B20_duwendu()-------------讀溫度
{
                unsigned int L;
                unsigned int H;
                unsigned int temp;


                DS18B20chushihua();
                writeDS18B20(0xcc);
                writeDS18B20(0xbe);
                L=readDS18B20();
                H=readDS18B20();
                H=(H<<8)|L;
                if((H&0xf800)==0xf800)
                        H=!H+1;
                temp=H*0.0625;
        return temp;
}


void main()------------主函數
{      
        unsigned int temp;
      
        DS18B20_zhuanhua();
        begin();------------------------//數碼管初始化----的函數(已延時800ms)
        while(1)
        {
                temp=DS18B20_duwendu();
                display_s(temp);-------------//顯示函數
        }
}      

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2023-6-15 22:10 | 只看該作者
讀到85的時候不顯示就可以了
或第一次讀到85就不顯示
回復

使用道具 舉報

板凳
ID:824490 發表于 2023-6-15 22:33 | 只看該作者
連讀3次,取平均值顯示就OK了
回復

使用道具 舉報

地板
ID:1084388 發表于 2023-6-15 22:53 | 只看該作者
lkc8210 發表于 2023-6-15 22:10
讀到85的時候不顯示就可以了
或第一次讀到85就不顯示

你理解錯了,上面說的,只是跟你說我的代碼沒問題而已。我必須要數碼管初始化----,轉化函數必放在外面,但就是為什么顯示不了按鍵后的溫度值,話說while(1)不是一直在讀溫度嗎。
回復

使用道具 舉報

5#
ID:213173 發表于 2023-6-16 06:09 | 只看該作者
菜鳥9 發表于 2023-6-15 22:53
你理解錯了,上面說的,只是跟你說我的代碼沒問題而已。我必須要數碼管初始化----,轉化函數必放在外面, ...

每次讀取溫度值之前都要發一次轉換命令
void main()//------------主函數
{      
        unsigned int temp;
       
        DS18B20_zhuanhua();
        begin();//------------------------//數碼管初始化----的函數(已延時800ms)
        while(1)
        {
                DS18B20_zhuanhua();
                temp=DS18B20_duwendu();
                display_s(temp);//-------------//顯示函數
        }
}
回復

使用道具 舉報

6#
ID:965189 發表于 2023-6-16 07:47 來自觸屏版 | 只看該作者
  begin();------------------------//數碼管初始化----的函數。這個初始化函數有問題
回復

使用道具 舉報

7#
ID:584814 發表于 2023-6-16 08:19 | 只看該作者
自己做的時候除了讀不出時顯示85其他正常。
在論壇上找的例程和自己照貓畫虎的都一樣。
回復

使用道具 舉報

8#
ID:1084388 發表于 2023-6-16 15:42 | 只看該作者
wulin 發表于 2023-6-16 06:09
每次讀取溫度值之前都要發一次轉換命令
void main()//------------主函數
{      

效果出來了,但是為什么要每次都轉化呢,我們老師也說轉化一次就行了呀,能解答一下嗎
回復

使用道具 舉報

9#
ID:213173 發表于 2023-6-16 16:35 | 只看該作者
菜鳥9 發表于 2023-6-16 15:42
效果出來了,但是為什么要每次都轉化呢,我們老師也說轉化一次就行了呀,能解答一下嗎

既然是測溫,就要不斷獲取當前溫度值。當然需要轉換操作。否則讀取的不是當前溫度值。
回復

使用道具 舉報

10#
ID:1084388 發表于 2023-6-16 17:58 | 只看該作者
wulin 發表于 2023-6-16 16:35
既然是測溫,就要不斷獲取當前溫度值。當然需要轉換操作。否則讀取的不是當前溫度值。

好的,謝謝您
回復

使用道具 舉報

11#
ID:1034262 發表于 2023-6-16 21:18 | 只看該作者
上電后多讀幾次但丟棄結果。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.奇米| 日本韩国欧美在线观看 | 精品一区二区三区在线观看国产 | 综合久久99 | 午夜爱爱毛片xxxx视频免费看 | 免费观看成人av | 中文字幕一区二区三区在线观看 | 日韩精品四区 | 精品久久一区 | 91久久综合亚洲鲁鲁五月天 | 99久久精品免费看国产四区 | 日韩免费 | 日韩国产一区二区 | 成人免费视频观看 | 国产亚洲一区二区精品 | 欧美精品一区二区三区在线 | 精品久久久久久亚洲精品 | 91精品一区二区三区久久久久久 | 成年人在线视频 | 色综合一区二区三区 | 国产99免费视频 | 国产精品亚洲一区二区三区在线 | 国产一级久久久久 | 亚洲第一av网站 | 99这里只有精品视频 | 美女张开腿露出尿口 | 欧美一区二区在线播放 | 久久国 | av网站免费在线观看 | 尤物在线 | 国内av在线| 日韩精品一区二区三区在线播放 | 久久亚洲国产 | 成人精品视频在线 | 秋霞a级毛片在线看 | 国产不卡在线播放 | 黄色国产视频 | 97久久精品午夜一区二区 | 羞羞的视频在线看 | 亚洲欧美一区二区三区国产精品 | 伊人久久免费 |