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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ds18b20溫度采集上位機(vc)和下位機(單片機)程序源碼

  [復制鏈接]
跳轉到指定樓層
樓主




上位機程序,用vc寫的,帶有源代碼

ds18b20溫度采集下位機程序(51單片機)
  1. #include<at89x51.h>
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit  DQ=P3^2;         
  6. unsigned int j=0;   
  7. uchar flag,a;                                                
  8.                     
  9.                                           //  延時子函數
  10. //**************************************************************/
  11. void delay(uint t)
  12. {        for (; t>0 ; t--)  ;
  13. }


  14. /************************************************************
  15. /* 產生復位脈沖初始化DS18B20 */
  16. void  ow_reset(void)
  17. {  char presence=1;
  18.    while(presence)
  19.    {
  20.       while(presence)
  21.      {
  22.         DQ=1;_nop_();_nop_();//從高拉倒低
  23.             DQ=0;                                       
  24.             delay(50);           //550 us
  25.             DQ=1;                                       
  26.             delay(6);            //66 us
  27.              presence=DQ;         //presence=0 復位成功,繼續下一步
  28.      }
  29.      delay(45);            //延時500 us
  30.      presence=~DQ;         
  31.    }
  32.    DQ=1;                   //拉高電平
  33. }
  34.               

  35. /************************************************************
  36. 向 1-WIRE 總線上寫一個字節**數據線從高電平拉至低電平,產生寫起始信號。
  37.              15ms之內將所需寫的位送到數據線上
  38. **************************************************************/
  39. void write_byte(uchar val)
  40. {
  41.   uchar i;
  42.   for (i=8; i>0; i--) //在15~60ms之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。           
  43.   {
  44.     DQ = 1;_nop_(); _nop_();  //在開始另一個寫周期前必須有1Us以上的高電平恢復期。               
  45.            DQ = 0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //5us
  46.         DQ = val&0x01;   //最低位移出
  47.         delay(6) ;  //66us
  48.         val = val/2; //右移1位
  49.   }
  50.         delay(1);
  51. }
  52. /************************************************************
  53. //讀1字節 //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
  54. **************************************************************/
  55. uchar read_byte (void)
  56. {
  57.   uchar i;
  58.   uchar value = 0;
  59.   for(i = 8;i>0;i--)
  60.   {        
  61.           DQ = 1;         // 給脈沖信號
  62.     _nop_(); _nop_();
  63.           value>>= 1;
  64.           DQ = 0;          // 給脈沖信號
  65.           _nop_(); _nop_(); _nop_(); _nop_();_nop_(); //4us
  66.           DQ = 1; _nop_();_nop_();_nop_();_nop_();_nop_();//5us
  67.           if(DQ)
  68.      {        value|= 0x80 ; }                                          
  69.                  delay(13); //66us 注意延時的長短,如果是delay(6) 會造成LED閃爍
  70.   }                                                                                                
  71.   DQ = 1;
  72.   return(value)        ;
  73. }



  74.   
  75. void Setting_DS18B20(void)
  76. {
  77.    ow_reset();
  78.   write_byte(0xCC);    // 跳過讀序號列號的操作
  79.   write_byte(0x4e);
  80.   
  81.   write_byte(0x64);   //100不使用DS18B20本身的溫度告警設置,為進行轉換精度設定,湊兩個寫寄存器操作
  82.   write_byte(0x8a);   //-10
  83.   write_byte(0x7f);   //設置DS18B20 為12位轉換精度         R1,R0的值決定轉換精度         R1=R0=1對應12位
  84. }

  85. /*--------------------------------------------------------------------------------------
  86.                               讀取溫度并完成轉化,
  87. -----------------------------------------------------------------------------------------*/
  88.    Read_Temperature()
  89. {
  90.     uchar tplsb,tpmsb;                // 溫度值低位、高位字節
  91.     uchar flag=0;
  92.    // unsigned int j=0; //暫存計算得溫度的整數部分
  93.     float tt;
  94.     ow_reset();
  95.     write_byte(0xCC); // 跳過讀序號列號的操作
  96.     write_byte(0x44); // 啟動溫度轉換
  97.     ow_reset();
  98.     write_byte(0xCC); //跳過讀序號列號的操作
  99.     write_byte(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  100.    
  101.     tplsb=read_byte();         // 溫度值低位字節(其中低4位為二進制的“小數”部分)
  102.     tpmsb=read_byte();          // 高位值高位字節(其中高5位為符號位
  103.     //轉換溫度

  104.     j=tpmsb;
  105.     j<<=8;
  106.     j+=tplsb;          //寫為j=j|tplsb;也可以。// 兩字節合成一個整型變量。
  107.         if(tpmsb>7)
  108.         {        
  109.                 j=(j^0xffff);//異或
  110.         j=j+1;        //如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際 溫度。
  111.     }
  112.     tt=(j*0.0625);
  113.   
  114.               
  115.         
  116.    return tt;
  117. }




  118. /*------------------------------------------------------------------------
  119.                                                         主函數
  120. --------------------------------------------------------------------*/




  121. void main()
  122. {  Setting_DS18B20();   
  123.   TMOD=0x20;
  124.   TH1=0xfd;
  125.   TL1=0xfd;
  126.   TR1=1;
  127.   REN=1;
  128.   SM0=0;
  129.   SM1=1;
  130.   EA=1;
  131.   ES=1;
  132.   while(1)
  133.   {           if(flag==1)
  134.      {         ES=0;
  135.             flag=0;
  136.             SBUF=Read_Temperature();

  137.            while(!TI);
  138.            TI=0;
  139.                 ES=1;
  140.                  
  141.          
  142.          }
  143.   
  144.   }        

  145. }
  146. void ckzd() interrupt 4
  147. {
  148.          RI=0;
  149.          P0=SBUF;
  150.          a=SBUF;
  151.          flag=1;
  152.          if(a=='b')P1=~P1;
  153.          else P1=0xff;

  154.         
  155. }

復制代碼



18b20溫度傳感器測試程序,包涵上位機源程序很下位機源程序,將18b20采集的溫度值發送給上位機顯示

18B20upanddown.rar (4.93 MB, 下載次數: 228)

評分

參與人數 2黑幣 +15 收起 理由
abcymda + 10
dcs + 5 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:56331 發表于 2016-7-1 15:51 | 只看該作者
下載看看,不錯
回復

使用道具 舉報

板凳
ID:135860 發表于 2016-8-3 11:20 | 只看該作者
學習學習了
回復

使用道具 舉報

地板
ID:96218 發表于 2016-12-23 21:09 | 只看該作者
不錯學習一下
回復

使用道具 舉報

5#
ID:185829 發表于 2017-5-17 16:23 | 只看該作者
下載學習一下,謝謝
回復

使用道具 舉報

6#
ID:218141 發表于 2017-7-8 17:05 | 只看該作者
謝謝大佬Orz
回復

使用道具 舉報

7#
ID:161033 發表于 2018-1-15 22:20 | 只看該作者
感謝分享,先下來學習。
回復

使用道具 舉報

8#
ID:260557 發表于 2018-5-9 09:26 | 只看該作者
贊一個!
回復

使用道具 舉報

9#
ID:734666 發表于 2020-4-24 10:32 | 只看該作者
上位機的呢?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 爱爱免费视频 | 国产精品视频一二三 | 中文一区二区 | 色婷婷久久 | 欧美一区二区三区在线观看 | 91视频网 | 一级免费毛片 | 国产h视频| 国产精品久久久久久av公交车 | www.99久久.com| 精品国产一区二区三区久久久蜜月 | 欧美日韩一区二区三区四区五区 | 亚洲成人精品在线 | 国产一区999| www.亚洲视频 | 国产一级免费在线观看 | 成人国产一区二区三区精品麻豆 | 天天爽综合网 | 中文字幕国产一区 | 欧美一二三| 欧美一区二区三区的 | 99re国产 | 免费一区二区三区 | 午夜激情在线 | 午夜男人天堂 | 一级视频黄色 | 国产精品美女久久久久久久久久久 | 亚洲免费在线观看 | 日韩中文字幕 | 日韩成人在线免费观看 | 四虎影院新地址 | 给我免费的视频在线观看 | 精品久久久一区 | 婷婷久久一区 | 国产欧美一区二区三区日本久久久 | 91亚洲国产亚洲国产 | 色天天综合 | 亚洲成人网在线观看 | 国产999精品久久久 日本视频一区二区三区 | 在线精品亚洲欧美日韩国产 | 成人精品在线视频 |