蒋宇智 发表于 2024-3-24 22:08:45

基于51单片机的多点温度检测网络,DS18B20传感器,代码,仿真,原理图等资料

<div class=\"vditor-preview__action\"></div><div class=\"vditor-reset\"><p><strong>设计概述</strong><br>
基于DS18B20的多点温度测量监控系统设计,以AT89C52单片机作为主控制器,不断循环读取4组DS18B20(T1、T2、T3和T4)温度数据,同时使用LCD1602液晶循环显示4组测取的温度值以及每组设定的温度上下限值,通过按键可设置每组温度报警上下限和液晶显示的模式(循环显示模式和手动切换显示模式)。</p>
<p>当前组的温度值若不在设定范围内,则蜂鸣器报警,对应的LED灯点亮;具体过程为:温度高于上限值,红色LED灯点亮;温度低于下限值,蓝色LED灯亮。</p>
<p><strong>多点测温</strong><br>
由于每个DS18B20内部均有一个独立的64位序列号,单片机通过序列号可以对一条总线上的多支DS18B20进行控制,读取他们的温度。</p>
<p>单总线本身也可以向所挂接的多个DS18B20供电,而无需额外电源。4组温度传感器的连接网络如下。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAL6eAL3DFAACS5j8-NSc685.jpg\" alt=\"传感器网络.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAL6-APHztAADik0r4soU679.jpg\" alt=\"系统框架.jpg\"></p>
<p><strong>Proteus仿真电路</strong></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAL8uAb6unAAGXmBrTGr0733.jpg\" alt=\"完整电路图.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMlqAUPyEAAHczSWR-lo931.jpg\" alt=\"多点温度操作说明.jpg\"></p>
<p>**原理图 **</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMoaAY6AIAAHfMtQCons870.jpg\" alt=\"原理图.jpg\"></p>
<p><strong>仿真结果分析</strong></p>
<p>把在KEIL里编译、调试生成的Multi_temp的hex文件导入到Proteus中的AT89C52里进行仿真,整体结果如下:</p>
<p>(1)开机LCD显示界面。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMp6ADV5KAAANP0NObag149.png\" alt=\"开机.png\"></p>
<p>(2)系统正常状态下,循环显示4组DS18B20的温度值以及各组设定的温度上下限值。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMqqAfdWZAAAMjW6sGdI079.png\" alt=\"t1.png\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMq2AQuxaAAANFMLJ_co021.png\" alt=\"t2.png\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMrCAHx5BAAAMrOlRI_c206.png\" alt=\"t3.png\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMrOAAQutAAAMoqgy6HY716.png\" alt=\"t4.png\"></p>
<p>(3)由上图可以看出T1的温度值,低于设定的温度下限值,蜂鸣器报警,且相应的LED指示灯点亮。</p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMsWAY14qAAAaqCShb3A539.png\" alt=\"报警.png\"></p>
<p>(4)用户可通过按键设置每组温度传感器的上下限值,以及从循环显示切换为手动显示。</p>
<p><strong>C代码</strong></p>
<pre><code class=\"hljs typescript vditor-linenumber\"><span class=\"hljs-built_in\">void</span> <span class=\"hljs-function\"><span class=\"hljs-title\">tmpchange2</span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">void</span></span>)</span>   
{         uchar j;
    dsreset2();<span class=\"hljs-comment\">//初始化 DS18B20 </span>
    delay_DS(<span class=\"hljs-number\">1</span>);<span class=\"hljs-comment\">//延时 </span>
        tmpwritebyte2(<span class=\"hljs-number\">0x55</span>);
                <span class=\"hljs-keyword\">for</span>(j=<span class=\"hljs-number\">0</span>;j&lt;<span class=\"hljs-number\">8</span>;j++)
        {        tmpwritebyte2(str3); }
    tmpwritebyte2(<span class=\"hljs-number\">0x44</span>); <span class=\"hljs-comment\">//发送温度转换命令 </span>
}

<span class=\"hljs-built_in\">void</span> <span class=\"hljs-function\"><span class=\"hljs-title\">tmpchange3</span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">void</span></span>)</span>   
{        uchar j;
    dsreset3();<span class=\"hljs-comment\">//初始化 DS18B20 </span>
    delay_DS(<span class=\"hljs-number\">1</span>); <span class=\"hljs-comment\">//延时 </span>
        tmpwritebyte3(<span class=\"hljs-number\">0x55</span>);
                <span class=\"hljs-keyword\">for</span>(j=<span class=\"hljs-number\">0</span>;j&lt;<span class=\"hljs-number\">8</span>;j++)
        {        tmpwritebyte3(str4); }
    tmpwritebyte3(<span class=\"hljs-number\">0x44</span>);<span class=\"hljs-comment\">//发送温度转换命令 </span>
}


<span class=\"hljs-comment\">//get the temperature获得温度</span>
uint <span class=\"hljs-function\"><span class=\"hljs-title\">tmp0</span>(<span class=\"hljs-params\"></span>)</span>                              
{
    float tt;
    uchar a,b,j;
    dsreset0();
    delay_DS(<span class=\"hljs-number\">1</span>);
       <span class=\"hljs-comment\">//发送读取数据命令</span>
   tmpwritebyte0(<span class=\"hljs-number\">0x55</span>);
                <span class=\"hljs-keyword\">for</span>(j=<span class=\"hljs-number\">0</span>;j&lt;<span class=\"hljs-number\">8</span>;j++)
        {        tmpwritebyte0(str1); }
    tmpwritebyte0(<span class=\"hljs-number\">0xbe</span>);
       <span class=\"hljs-comment\">//连续读两个字节数据          </span>
    a=tmpread0();               
    b=tmpread0();
       <span class=\"hljs-comment\">//two byte    compose a int variable </span>
       <span class=\"hljs-comment\">//两字节合成一个整型变量。</span>
    temp_DS=b;
    temp_DS&lt;&lt;=<span class=\"hljs-number\">8</span>;                        
    temp_DS=temp_DS|a;               
       <span class=\"hljs-keyword\">if</span>(temp_DS&amp;<span class=\"hljs-number\">0xf800</span>)
       {
           ZF1=<span class=\"hljs-number\">1</span>;
           temp_DS=~temp_DS+<span class=\"hljs-number\">1</span>;
       }
       <span class=\"hljs-keyword\">else</span>
       ZF1=<span class=\"hljs-number\">0</span>;
       <span class=\"hljs-comment\">//得到真实十进制温度值,因为 DS18B20        </span>
    tt=temp_DS*<span class=\"hljs-number\">0.0625</span>;               
    <span class=\"hljs-comment\">//可以精确到 0.0625 度,所以读回数据的最低位代表的是 </span>
    <span class=\"hljs-comment\">//0.0625 度。</span>
    <span class=\"hljs-comment\">//设计获取,蒋宇智QQ(2327603104)</span>
       <span class=\"hljs-comment\">//放大十倍,这样做的目的将小数点后第一位 </span>
    temp_DS=tt*<span class=\"hljs-number\">10</span>+<span class=\"hljs-number\">0.5</span>;      
    <span class=\"hljs-comment\">//也转换为可显示数字,同时进行一个四舍五入操作。 </span>
       <span class=\"hljs-comment\">//返回温度值</span>
    <span class=\"hljs-keyword\">return</span> temp_DS;         
}
uint <span class=\"hljs-function\"><span class=\"hljs-title\">tmp1</span>(<span class=\"hljs-params\"></span>)</span>                              
{
    float tt;
    uchar a,b,j;
    dsreset1();
    delay_DS(<span class=\"hljs-number\">1</span>);
                   tmpwritebyte1(<span class=\"hljs-number\">0x55</span>);
                <span class=\"hljs-keyword\">for</span>(j=<span class=\"hljs-number\">0</span>;j&lt;<span class=\"hljs-number\">8</span>;j++)
        {        tmpwritebyte1(str2); }
    tmpwritebyte1(<span class=\"hljs-number\">0xbe</span>);
       <span class=\"hljs-comment\">//连续读两个字节数据          </span>
    a=tmpread1();               
    b=tmpread1();
       <span class=\"hljs-comment\">//two byte    compose a int variable </span>
       <span class=\"hljs-comment\">//两字节合成一个整型变量。</span>
    temp_DS=b;
    temp_DS&lt;&lt;=<span class=\"hljs-number\">8</span>;
<span class=\"vditor-linenumber__rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>
<p><strong>资源内容</strong></p>
<p>(1)基于DS18B20的多点温度测量监控系统设计论文完整版;</p>
<p>(2)Proteus仿真文件;</p>
<p>(3)C程序;</p>
<p>(4)原理图;</p>
<p>(5)Visio流程图文件;</p>
<p>(6)元器件清单;</p>
<p>(7)参考资料;</p>
<p><strong>资源截图</strong></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMt6ARqaGAAAhDZGDdMw525.jpg\" alt=\"资料1.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMuKARSLtAAAZNK4IPdE585.jpg\" alt=\"资料2.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMuWAEpmpAAAfkRcsCnc407.jpg\" alt=\"资料3.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMuiAX60YAABF2Z--EbI438.jpg\" alt=\"资料4.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C5/96/wKgZomYAMuyARZ7yAAAqYTa3pOY514.jpg\" alt=\"资料5.jpg\"></p>
<p><img src=\"//file1.elecfans.com/web2/M00/C6/80/wKgaomYAMu-AUDPCAABHwC-kwEY467.jpg\" alt=\"资料6.jpg\"></p>
</div>
页: [1]
查看完整版本: 基于51单片机的多点温度检测网络,DS18B20传感器,代码,仿真,原理图等资料