找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9811|回復(fù): 13
收起左側(cè)

LCD1602顯示的單總線4路ds18B20溫度監(jiān)測系統(tǒng)

  [復(fù)制鏈接]
ID:76686 發(fā)表于 2015-4-11 21:23 | 顯示全部樓層 |閱讀模式
本帖最后由 dzdiy 于 2015-4-11 21:42 編輯

      LCD1602顯示的單總線4路ds18B20溫度監(jiān)測系統(tǒng),溫度測量范圍-55~125度,單片機使用的是AT89C51,測試測量結(jié)果由LCD1602進行顯示,溫度精確到小數(shù)點后一位。LCD1602顯示的單總線4路ds18B20溫度監(jiān)測系統(tǒng)程序資料包中含有C語言源程序,仿真文件。LCD1602顯示的單總線4路ds18B20溫度監(jiān)測系統(tǒng)是一個不錯的多路溫度監(jiān)測系統(tǒng)。需要源程序的就自己下載LCD1602顯示的單總線4路ds18B20溫度監(jiān)測系統(tǒng)程序資料,資料附后。
       下載: 單總線掛接4路ds18B20溫度監(jiān)測系統(tǒng).zip (271.41 KB, 下載次數(shù): 260)
        相關(guān)程序:http://www.torrancerestoration.com/bbs/dpj-33277-1.html



部分程序源碼預(yù)覽(完整版本請下載本帖附件):
  1. /*******************************************************************
  2. **函數(shù)功能:ds18b20的驅(qū)動函數(shù)                                                                          **
  3. **創(chuàng)建人:xingyuegu                                                                                                  **
  4. **創(chuàng)建日期:2006-7-12                                                                                          **
  5. **版本:1.0                                                                                                                  **
  6. **修改日期:2006-10-30                                                                                            **
  7. **版本:2.0                                                                                                                  **
  8. *******************************************************************/
  9. #include <reg51.h>
  10. #include <intrins.h>
  11. #define uchar unsigned char
  12. #define uint  unsigned int
  13. void serial_set(void);
  14. void process(unsigned char,unsigned char);
  15. char volatile xiaoshu_temp[5],zhen_temp[4];                 //
  16. bit flag;
  17. bit dot_dis=1;
  18. sbit DQ=P1^0;
  19. //sbit DQ=P2^3;
  20. extern unsigned char temp[5];
  21. /*************************************************************
  22. **功能:延時600us                                                                                        **
  23. **參數(shù):無                                                                                               **
  24. *************************************************************/
  25. void delay600us(void)
  26. {
  27.         uchar i;
  28.         for(i=0;i<255;i++);

  29. }
  30. /*************************************************************
  31. **功能:延時60us                                                                                        **
  32. **參數(shù):無                                                                                               **
  33. *************************************************************/
  34. void delay60us(void)
  35. {
  36.         uchar i;
  37.         for(i=0;i<20;i++);
  38. }
  39. /*************************************************************
  40. **功能:延時18us                                                                                        **
  41. **參數(shù):無                                                                                               **
  42. *************************************************************/
  43. /*void delay15us(void)
  44. {
  45.         uchar i;
  46.         for(i=0;i<2;i++);
  47. }*/
  48. /*************************************************************
  49. **功能:復(fù)位脈沖                                                                                        **
  50. **參數(shù):bool                                                                                               **
  51. *************************************************************/
  52. bit resetpulse(void)
  53. {
  54.         
  55.         DQ=0;
  56.         delay600us();                         //延時500us
  57.         DQ=1;
  58.         delay60us();                        // 延時60us
  59.         return(DQ);                                 //讀取P1.0的狀態(tài)
  60. }
  61. /*************************************************************
  62. **功能:ds18b20的初始化                                                                                **
  63. **參數(shù):無                                                                                               **
  64. *************************************************************/
  65. void ds18b20_init(void)
  66. {
  67.         while(1)
  68.         {
  69.                 if(!resetpulse())          //收到ds18b20的應(yīng)答信號
  70.                 {        
  71.                         //printf("reset successful!");

  72.                         //delay240us();        //延時240us
  73.                         DQ=1;
  74.                         delay600us();        //延時240us
  75.                         break;               
  76.                 }
  77.                 else
  78.                         resetpulse();         //否則再發(fā)復(fù)位信號
  79.         }
  80. }

  81. /*************************************************************
  82. **功能:向ds18b20寫命令                                                                                **
  83. **參數(shù):無                                                                                               **
  84. *************************************************************/
  85. void ds18b20_writecommand(uchar command)
  86. {        

  87.         uchar   i;
  88.         for(i=0;i<8;i++)
  89.         {
  90.                 if((command & 0x01)==0)
  91.                 {
  92.                         DQ=0;                                        //寫0
  93.                         delay60us();                        //延時60us
  94.                         _nop_();
  95.                         _nop_();
  96.                         _nop_();
  97.                         _nop_();
  98.                         _nop_();
  99.                         _nop_();
  100.                         DQ=1;                                   
  101.                         _nop_();
  102.                         _nop_();

  103.                 }
  104.         
  105.                 else                                                //寫1
  106.                 {
  107.                          DQ=0;
  108.                         _nop_();
  109.                         _nop_();                                //延時2us
  110.                         DQ=1;
  111.                         delay60us();                        //延時60us
  112.                         _nop_();
  113.                         _nop_();
  114.                         _nop_();
  115.                         _nop_();
  116.                 }
  117.                 command=_cror_(command,1); // 右移1位
  118.          }
  119.   
  120.   
  121. }

  122. /*************************************************************
  123. **功能:讀ds18b20數(shù)據(jù)                                                                                **
  124. **參數(shù):返回讀到的數(shù)據(jù)                                                                                **
  125. *************************************************************/
  126. uchar ds18b20_readdata(void)
  127. {
  128.         uchar readdata;
  129.         uchar i;
  130.         for(i=0;i<8;i++)
  131.         {
  132.                 DQ=0;
  133.                 _nop_();
  134.                 _nop_();
  135.                 _nop_();
  136.                 DQ=1;                  //釋放總線
  137.                 //delay15us();        注意不需要
  138.                 if(DQ==0)           //如果讀到的是0
  139.                 {
  140.                         readdata=readdata&0x7f;
  141.                         delay60us();
  142.                 }
  143.                 else                        //讀到的是1
  144.                 {
  145.                         readdata=readdata|0x80;
  146.                         delay60us();
  147.                 }
  148.                 if(i<7)
  149.                
  150.                 readdata=_cror_(readdata,1);
  151.         }
  152.         return readdata;
  153. }

  154. /*************************************************************
  155. **功能:溫度處理函數(shù)                                                                                        **
  156. **參數(shù):無返回                                                                                                **
  157. *************************************************************/
  158. void temperature_process(uchar low,uchar high)
  159. {
  160.         uint temp1,temp2,temp3;
  161.         if(high&0x80)//判斷正負
  162.         {
  163.         flag=1;

  164.         temp3=temp3|high;
  165.         temp3=temp3&0x00ff;
  166.         temp3=temp3<<8;
  167.         temp1=temp3;

  168.         temp1=temp1|low;
  169.         
  170.         temp1=(temp1^0xffff);
  171.         temp1=temp1+1;         //取反加1
  172.         low=temp1&0x000f;
  173.         high=temp1>>4;
  174.                 process(high,low);
  175.         }
  176.         else
  177.         {

  178.                 flag=0;                 //zhen
  179.                 temp1=high;
  180.                 temp2=low;
  181.                 temp1=temp1<<4;
  182.                 temp2=temp2>>4;
  183.                 temp3=temp1|temp2;
  184.                 high=temp3;
  185.                 low=low&0x0f;
  186.                 process(high,low);
  187.         
  188.         }
  189. }
  190. /*************************************************************
  191. **功能:數(shù)值處理函數(shù)                                                                                        **
  192. **參數(shù):無返回                                                                                                **
  193. *************************************************************/
  194. void process(unsigned char high,unsigned char low)
  195. {
  196.          uint temp1;
  197.          uchar i;
  198.          temp1=low*625;
  199.          xiaoshu_temp[0]=temp1/1000+'0';
  200.          //xiaoshu_temp[1]=temp1/100%10+'0';
  201.          //xiaoshu_temp[2]=temp1%100/10+'0';
  202.          //xiaoshu_temp[3]=temp1%10+'0';
  203.          xiaoshu_temp[1]='\0';
  204.          dot_dis=1;
  205.                 //if(xiaoshu_temp[3]=='0')
  206.                 //{
  207.                 //        xiaoshu_temp[3]='\0';
  208.                 //        if(xiaoshu_temp[2]=='0')
  209.                 //                {
  210.                 //                        xiaoshu_temp[2]='\0';
  211.                 //                        if(xiaoshu_temp[1]=='0')
  212.                 //                        {
  213.                 //                                xiaoshu_temp[1]='\0';
  214.                                                 if(xiaoshu_temp[0]=='0')
  215.                                                 {
  216.                                                         xiaoshu_temp[0]='\0';
  217.                                                         dot_dis=0;
  218.                                                 }
  219.                                                 else
  220.                                                         dot_dis=1;
  221.                                                 
  222.                                                         
  223.                         //                }
  224.                 //                }
  225.                                        
  226.         //        }
  227.         
  228.          
  229.          zhen_temp[0]=high/100+'0';
  230.          zhen_temp[1]=high%100/10+'0';
  231.          zhen_temp[2]=high%10+'0';
  232.          zhen_temp[3]='\0';
  233.          for(i=0;i<2;i++)
  234.                 if(zhen_temp[0]=='0')
  235.                         {
  236.                         zhen_temp[0]=zhen_temp[1];
  237.                         zhen_temp[1]=zhen_temp[2];
  238.                         zhen_temp[2]='\0';
  239.                         }
  240.                 else
  241.                         break;
  242. }
  243. /****************************************/
  244. //serial_set func
  245. void serial_set(void)
  246. {
  247.         
  248.         SCON=0x50;
  249.         TMOD=TMOD&0x0f;
  250.         TMOD=TMOD|0x20;
  251.         TH1=0xfd;
  252.         TL1=0xfd;

  253.         TR1=1;
  254.         TI=1;  //用PRINTF時,TI要置1
  255. }


  256. /*************************************************************
  257. **功能:序列號匹配子程序                                                                                **
  258. **參數(shù):無返回                                                                                                **
  259. *************************************************************/
  260. bit match_rom(uchar *rom)
  261. {
  262.         uchar i;
  263.         ds18b20_init();
  264.         ds18b20_writecommand(0x55);
  265.         for(i=8;i>0;i--)
  266.         {
  267.                 ds18b20_writecommand(*(rom+i-1));
  268.         //        rom++;
  269.         }
  270.         return 1;
  271. }        
  272.                
復(fù)制代碼



評分

參與人數(shù) 1黑幣 +5 收起 理由
琪亞娜時間到了 + 5 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:86129 發(fā)表于 2015-7-19 12:09 | 顯示全部樓層
怎么按照你給的電路圖制作怎么檢測不了啊,現(xiàn)在能顯示 1:-0   2:-0   3:-0  4:-0  就是不能檢測溫度 請問你知道是什么情況嗎?
回復(fù)

使用道具 舉報

ID:89505 發(fā)表于 2015-10-26 22:27 | 顯示全部樓層
下一個看看
回復(fù)

使用道具 舉報

ID:89505 發(fā)表于 2015-10-26 22:37 | 顯示全部樓層
下載的程序不對啊,沒有c文件
回復(fù)

使用道具 舉報

ID:92231 發(fā)表于 2015-11-8 20:54 來自手機 | 顯示全部樓層
想學習一下18B20多點測溫,很少有實例,不知道有否參考價值
回復(fù)

使用道具 舉報

ID:121553 發(fā)表于 2016-5-17 21:15 | 顯示全部樓層
哇哇  
回復(fù)

使用道具 舉報

ID:121557 發(fā)表于 2016-5-17 21:34 | 顯示全部樓層
好東西啊
回復(fù)

使用道具 舉報

ID:111182 發(fā)表于 2016-5-18 15:49 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:186130 發(fā)表于 2017-4-5 15:20 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:188076 發(fā)表于 2017-4-10 15:22 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報

ID:368373 發(fā)表于 2018-7-10 10:11 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報

ID:380389 發(fā)表于 2018-7-29 10:05 來自手機 | 顯示全部樓層
感謝分享,點贊
回復(fù)

使用道具 舉報

ID:453923 發(fā)表于 2018-12-29 13:57 | 顯示全部樓層
程序可以運行,但是沒有讀取rom序列號的功能,我找了好久,加了自動搜索這個功能
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表