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

標題: 51單片機實現多路DS18B20溫度測量-proteus仿真 [打印本頁]

作者: hesheng    時間: 2013-8-16 21:34
標題: 51單片機實現多路DS18B20溫度測量-proteus仿真


源碼和仿真文件下載: 多路DS18B20測量.zip (72.04 KB, 下載次數: 1260)

作者: 游俠(單片機開    時間: 2013-10-21 15:35
很好 學習  學習  謝謝,給大家放出樓主的源碼 省點黑幣:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int

  7. sbit RS=  P2^0  ;                                                        //液晶顯示引腳定義
  8. sbit RW=  P2^1  ;
  9. sbit EN=  P2^2  ;
  10. uint  t=0,dian=0;
  11. uchar LCD_LINE_ONE[16]={"tp1:           "};                //定義顯示屏幕
  12. uchar LCD_LINE_TWO[16]={"tp2:           "};
  13. //uchar LCD_LINE_THR[16]={"                "};

  14. int Tm;
  15. int  fushu=0 ;
  16. sbit DQ= P3^3;                                                                                  
  17. static unsigned char get_serial[]={                  //獲取的八個DS18B20內部RAM64位序列號
  18.    224, 0,0,0,  184,  197, 50, 40,
  19.    215, 0,0,0,  184,  197, 51, 40
  20.   //  82, 0,0,0,  184,  197, 52, 40
  21. // 101, 0,0,0,  184,  197,  53,40,
  22.   //60, 0,0,0,  184,  197,  54,40,
  23.    //11, 0,0,0,  184,  197,  55,40,
  24.     //47, 0,0,0,  184,  197,  56,40,
  25.          //185, 0,0,0,  184,  197,  49,40,
  26. };
  27. void delay( ms )                                          //用于液晶顯示的延時函數
  28. {
  29.           int i ;
  30.           while(ms--)
  31.           {
  32.                for(i=0 ;i<5 ;i++ )  ;

  33.           }
  34. }

  35. uchar Read_LCD_State()                                  //讀取液晶顯示的狀態
  36. {
  37.         uchar state;
  38.         RS=0;RW=1;EN=1;delay(1);
  39.         state=P0;
  40.         EN = 0;delay(1);
  41.         return state;
  42. }
  43. void LCD_Busy_Wait()                                 //如果忙則等待函數
  44. {
  45.         while((Read_LCD_State()&0x80)==0x80);
  46.         delay(5);
  47. }

  48. void Write_LCD_Zhilin(uchar zl)                          //液晶顯示寫指令函數
  49. {
  50.         LCD_Busy_Wait();
  51.         RS=0;RW=0;
  52.         EN=0;
  53.         P0=zl;
  54.         EN=1;
  55.         delay(1);
  56.         EN=0;       
  57. }
  58. void Write_LCD_shuju(uchar date)             //液晶顯示寫數據函數
  59. {
  60.         LCD_Busy_Wait();
  61.         RS=1;RW=0;
  62.         EN=0;
  63.         P0=date;
  64.         EN=1;
  65.         delay(1);
  66.         EN=0;       
  67. }
  68. void LCD_INIT()                                //液晶顯示初始化
  69. {
  70.     Write_LCD_Zhilin(0x38);          // 顯示模式設置
  71.         delay(1);                                  
  72.         Write_LCD_Zhilin(0x01);          // 顯示清屏
  73.         delay(1);                                 
  74.         Write_LCD_Zhilin(0x06);          // 光標移動設置
  75.         delay(1);
  76.         Write_LCD_Zhilin(0x0c);          // 開及光標設置
  77.         delay(1);
  78. }
  79. void Display_LCD_String(uchar p,uchar *s)                  //液晶顯示寫入函數
  80. {
  81.         uchar i;
  82.         Write_LCD_Zhilin(p|0x80)        ;    //寫地址高位為一
  83.         //Write_LCD_Zhilin(0x40|0x80)        ;
  84.         for(i=0;i<16;i++)
  85.         {
  86.                 Write_LCD_shuju(s[i]);
  87.                 delay(1);        
  88.         }
  89. }
  90. /***************************************************************************************/
  91. void delays(int us)                                           //用于DS18B20的延時函數
  92. { int s;
  93. for ( s=0; s<us; s++);
  94. }
  95. void rst(void)                                                //DS18B20初始化
  96. {
  97. DQ = 1;
  98. delays(2);
  99. DQ = 0;
  100. delays(30); //精確延時 480~960us
  101. DQ = 1;
  102. delays(8);
  103. }
  104. void write(unsigned char ku)                //DS18B20寫函數
  105. {
  106. int i=0;
  107.      for (i=0;i<8;i++)
  108.     {
  109.                 DQ=0;
  110.                 DQ =ku&0x01;
  111.                 delays(3);
  112.                 DQ=1;
  113.                 ku>>=1;
  114.     }
  115. }
  116. void match_rom(unsigned char *rom)          //DS18B20匹配ROM函數
  117. {
  118. unsigned char i;
  119. rst();                                                          //初始化
  120. write(0x55);                                          //匹配ROM
  121. for(i=8;i>0;i--)
  122. {
  123.           write(*(rom+i-1));
  124. }

  125. }
  126. unsigned int read(void)                          //DS18B20讀函數,每次讀16位
  127. {
  128.         int i=0;
  129.         unsigned int u=0;
  130.     for (i=0;i<16;i++)
  131.     {
  132.                 DQ=0;
  133.                 u>>=1;
  134.                 DQ=1;
  135.                 if(DQ) u|=0x8000;
  136.                 delays(4);
  137.      }
  138.     return (u);
  139. }
  140. int  read0(unsigned char *seria)        //讀取對應溫度值并轉換函數
  141. {
  142.      int temperature ;
  143.     unsigned int tp;
  144.     unsigned int lsb;
  145.     rst();                                  //初始化
  146.     write(0xCC);                  //跳過RAM
  147.         write(0x44);                  //溫度轉換
  148.         rst();                                  //再次初始化
  149.         write(0xCC);
  150.         match_rom(seria);    //匹配ROM函數調用
  151.                  write(0xBE);         //讀取存儲器指令
  152.         tp=read();                         //讀取溫度值
  153.         if((tp&0xf800)==0xf800)                //判斷正負數
  154.             {
  155.                      fushu=1 ;
  156.                       tp=~tp+1 ;
  157.                     lsb=(unsigned int)(tp*6.25);
  158.                         dian=lsb%100;                  //取小數部分
  159.                
  160.                      temperature=lsb/100;

  161.                 }
  162.      else
  163.             {
  164.                     fushu=0;
  165.                     lsb=(unsigned int)(tp*6.25);
  166.                         dian=lsb%100;  
  167.                
  168.                      temperature=lsb/100;

  169.              }
  170.      return(temperature);
  171. }
  172. /*****************************************************************************************/
  173. void main()
  174. {
  175.       uint i ;
  176.           LCD_INIT();
  177.           EA=0 ;                 //使用DS18B20禁止任何中斷
  178.           while(1)
  179.          {          
  180.               for(i=0;i<2;i++)
  181.                   {       
  182.                       Tm=read0(get_serial+i*8);
  183.                                 if(i==0)                                   //判斷是第幾個的數據
  184.                                 {
  185.                                            if(fushu==0)                                           //判斷是否加負號
  186.                                                 sprintf(LCD_LINE_ONE+5," %d", Tm);
  187.                                            if(fushu==1)
  188.                                                     sprintf(LCD_LINE_ONE+5,"-%d", Tm);
  189.                                        sprintf(LCD_LINE_ONE+10,".%d",dian);                //加入小數部分
  190.                                            Display_LCD_String(0x00,LCD_LINE_ONE);
  191.                                  }
  192.                                 if(i==1)
  193.                                 {  
  194.                                        if(fushu==0)       
  195.                                                  sprintf(LCD_LINE_TWO+5," %d", Tm);
  196.                                            if(fushu==1)
  197.                                                      sprintf(LCD_LINE_TWO+5,"-%d", Tm);
  198.                                        sprintf(LCD_LINE_TWO+10,".%d",dian);
  199.                                            Display_LCD_String(0x40,LCD_LINE_TWO);
  200.                                 }

  201.                   }

  202.                
  203.          }
  204. }


復制代碼



作者: jldqc    時間: 2013-11-1 11:46
51黑有你更精彩!!

作者: 一縷塵埃    時間: 2013-11-28 11:08
我是初學者。就是想看看模擬量是怎樣處理的。
作者: Higaye    時間: 2013-12-13 17:22
樓主呀你去哪了  緊急問題啊  求聯系我  TEL:18583834210
作者: ·FEELing·    時間: 2013-12-16 16:37
{:soso_e100:}
作者: 星河    時間: 2013-12-19 14:12
很不錯
作者: icos    時間: 2013-12-23 13:48
看看唄!
作者: 雨蝶的傷    時間: 2014-1-30 22:42
這里真的好學習啊...我在這里安家了
作者: 5_18。    時間: 2014-3-17 11:39
好好學習
作者: 5_18。    時間: 2014-3-17 17:44
很好,每一次都是小小的進步
作者: 小新灬    時間: 2014-3-18 14:43
樓主威武
作者: txwp    時間: 2014-3-26 11:44
很好 學習  學習  謝謝
作者: zhangxiaoljs    時間: 2014-3-28 19:54
頂。。。。。。。。。。。。。。。
作者: yxz1140    時間: 2014-3-28 22:41
不錯!學習學習,謝謝。。
作者: bstele    時間: 2014-4-17 14:09
好好學習
作者: xiaoq560    時間: 2014-4-17 20:40
買板的時候沒買DS18B20芯片,先用仿真的試試程序
作者: han1234xiang    時間: 2014-4-22 22:56
很好 學習  學習  謝謝
作者: deng5168    時間: 2014-4-23 12:16
謝謝樓主分享!
作者: tayirvb    時間: 2014-4-24 12:52
下載 看一看 謝謝
作者: a651738901    時間: 2014-4-28 21:08
謝謝樓主慷慨,學習了!
作者: yuhandede00    時間: 2014-5-16 17:04

作者: zuoziji1314    時間: 2014-5-29 12:47
謝謝分享,看到這個感覺會好好學習的 !
作者: sccdy    時間: 2014-5-29 18:25
很好,每一次都是小小的進步
作者: 周安松    時間: 2014-6-1 21:38
51hei(51黑)論壇有你更精彩
作者: cjhk    時間: 2014-6-3 13:19
很好的東西   是哦以匪淺
作者: cjhk    時間: 2014-6-3 13:20
這玩意確實需要花時間好好鉆研鉆研   
作者: liangbangyong    時間: 2014-6-9 16:41
很好,謝謝!學習,學習!
作者: ekun2006    時間: 2014-6-14 18:15
贊一個
作者: botao258    時間: 2014-6-28 18:21
好東西
作者: 拉風一生    時間: 2014-7-4 09:13
我也來加入
作者: 王子公司法    時間: 2014-8-8 10:12
請問,如何獲取的八個DS18B20內部RAM64位序列號
作者: wjhg1026    時間: 2014-9-29 17:01


我用的是LCD1602做的實物,可是25.6度怎么有亂碼?

請樓主指點一下,謝謝!我QQ:175283992

作者: longwu4231    時間: 2014-9-29 17:11
很好 學習  學習
作者: gxkgsch    時間: 2014-9-30 11:01
還不錯
作者: dafeng201009    時間: 2014-9-30 11:37
很好 學習  學習  謝謝
作者: dafeng201009    時間: 2014-9-30 11:39
很好 學習  學習  謝謝
作者: wjhg1026    時間: 2014-10-4 17:15


用了3個18B20 做出來的,27.18后面一個亂碼,其它2個18B20讀出來也有亂碼,(26.50度那個想辦法隱藏掉了,其它的解決不了。)不知道怎么去掉。高手指點一下。
uchar LCD_LINE_TWO[16]={"      M       "};

作者: 雪中梅花    時間: 2014-11-12 14:37
謝謝樓主的奉獻
作者: denminshen    時間: 2014-11-25 14:52
我連一個18b20的顯示都還沒有弄好哦,樓主真牛,有空下載學習學習!
作者: kenweijie136    時間: 2014-12-7 00:56
學習學習
作者: 華一電子    時間: 2014-12-8 11:19
學習  學習  謝謝
作者: hclin    時間: 2014-12-8 21:16
Good Job !!!
作者: dzljp    時間: 2014-12-9 01:52
很好
學習學習
作者: mycookie    時間: 2014-12-9 10:17
多路DS18B20,非常需要研究研究,感謝樓主
作者: 超級口水哥    時間: 2015-1-13 15:52
正在研究多18b20的電路呢
作者: abczzy2012    時間: 2015-1-16 21:42
學習了。。。。
作者: rich3524    時間: 2015-2-5 14:01
謝謝分享
作者: 安裝阿斯    時間: 2015-3-13 14:29
挺好的!初學者怎么實現八路都工作呢?在這基礎怎么實現上下限報警?大神求指導
作者: 安裝阿斯    時間: 2015-3-13 15:45
怎么解決八路的上下限報警?求指導
作者: al.456    時間: 2015-3-18 20:20
這個不錯,支持一下
作者: zengmiao    時間: 2015-3-24 17:03
很好,要是多一些就更強大了
作者: uva2015    時間: 2015-4-1 17:51
不錯的資料,謝謝。
作者: yangfengyougu    時間: 2015-4-1 19:26
很好 ,學習 , 學習 , 謝謝
作者: qq704661078    時間: 2015-4-5 00:51
我來看看!!
作者: 916117435    時間: 2015-4-18 10:28
#在這里快速回復#很好 學習  學習  謝謝
作者: hlywhp    時間: 2015-4-28 16:28
學習中,謝謝
作者: hlywhp    時間: 2015-4-28 16:28
謝謝共享
作者: 康師佛    時間: 2015-4-28 19:58
很好 學習  學習  謝謝
作者: 康師佛    時間: 2015-4-28 19:58
很好 學習  學習  謝謝1111
作者: Jameszuo    時間: 2015-4-29 08:54
樓主 有心人啊  
作者: goer.lu    時間: 2015-6-4 14:57
好東西,謝謝樓主,問下樓主,ROM的64位序列號是提前測出來的對嗎。。。。
作者: 見人無敵55    時間: 2015-6-11 21:28
真心不錯 想看一下
作者: zgs660429    時間: 2015-6-29 22:20
多路18b20沒有弄過,學習一下,謝謝你。
作者: 咕咕咕    時間: 2015-7-2 15:03
好好好,樓主威武
作者: 咕咕咕    時間: 2015-7-2 15:11
感謝樓主啦,哈哈哈
作者: 咕咕咕    時間: 2015-7-3 10:48
真實太感謝了
作者: 咕咕咕    時間: 2015-7-3 10:49
程序只有兩個
作者: 咕咕咕    時間: 2015-7-3 10:49
美中不足啊
作者: 愛生活,愛折騰    時間: 2015-9-6 17:44
頂看看什么東西
作者: semnn    時間: 2015-9-17 09:29
最近正在搞這個,來看看學習下啊
作者: gemxie    時間: 2015-10-18 14:24
好東西啊,學習了。。
作者: xingxing1024    時間: 2015-10-22 08:58
很好 學習  學習  謝謝
作者: nan100610    時間: 2016-3-30 21:15
大感謝樓主的分享
作者: bixiang54    時間: 2016-4-5 16:22
謝謝分享
作者: bh4djj    時間: 2016-4-8 16:09
好資料,
謝謝了.
作者: tanzhishui1    時間: 2016-5-2 18:23
贊!我寫的老出不來,這回可以參考了
作者: haoshijie    時間: 2016-5-3 16:46
非常感謝
作者: huanggm    時間: 2016-5-5 14:43
項目需要,參考一下,謝謝!
作者: 朱小虎    時間: 2016-5-18 19:37
樓主啊,有沒有測18b20的64位rom編碼的程序啊?
作者: weimada    時間: 2016-5-21 09:44
謝謝...多點共享
作者: 瀟哥哥    時間: 2016-5-22 20:14
謝謝樓主了的幫助
作者: 瀟哥哥    時間: 2016-5-22 20:19
想嘻嘻嘻嘻嘻嘻想
作者: yqs138168    時間: 2016-8-18 11:04
RE: 51單片機實現多路DS18B20溫度測量-proteus仿真 [修改]
作者: yqs138168    時間: 2016-8-18 11:08
#在這里快源碼和仿真文件下載:   多路DS18B20測量.zip (72.04 KB, 下載次數: 646) 速回復#
作者: zongtong    時間: 2016-12-25 05:26
謝謝分享,正想做這個呢
作者: douyiyi427    時間: 2017-2-1 14:38
非常好,謝謝樓主分享
作者: 哈哈啊    時間: 2017-2-28 21:26
頂一下
作者: 陌上花開123    時間: 2017-4-12 20:39
這個程序可以跑出來嗎,我顯示錯誤好多啊
作者: 陌上花開123    時間: 2017-4-12 20:40
wjhg1026 發表于 2014-10-4 17:15
用了3個18B20 做出來的,27.18后面一個亂碼,其它2個18B20讀出來也有亂碼,(26.50度那個想辦法隱藏掉 ...

你好我想問一下你那個ds18b20的溫度測量做出來了嗎,可以發一下程序嗎
作者: 陌上花開123    時間: 2017-4-12 20:59
大神我想問一下這個程序編譯的時候為什么我顯示錯誤好多啊,是我電腦問題嗎
作者: 陌上花開123    時間: 2017-4-12 21:29
yqs138168 發表于 2016-8-18 11:04
RE: 51單片機實現多路DS18B20溫度測量-proteus仿真 [修改]

你好我為什么下載不了呢,可以再分享一下嗎
作者: 陽光明媚    時間: 2017-4-14 13:59
怎么不能運行
作者: llxl    時間: 2017-5-4 09:37
謝謝樓主分享!
作者: logicvhdl    時間: 2017-11-2 09:26
很好的東西,值得珍藏
作者: Acousitc    時間: 2018-4-6 15:07
謝謝樓主!看了很多 受益匪淺!
作者: twpsuperman    時間: 2018-4-28 10:11
怎么獲取的DS18B20內部RAM64位序列號啊?求解,謝謝
作者: shiwenyu    時間: 2018-4-28 21:40
好東西,要好好學習才行啊
作者: 陌沫xrz    時間: 2018-5-13 08:53
準備下載下來試試
作者: w963135423    時間: 2018-5-14 15:33
剛好用到,太感謝了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品美女在线观看 | 国产成人精品久久二区二区91 | 黑人中文字幕一区二区三区 | 亚洲国产成人精品女人久久久 | 黄色国产视频 | 三级欧美 | 中文字幕久久精品 | 在线成人www免费观看视频 | 国产精品无码久久久久 | av在线电影网 | 欧美精品一二三区 | 亚洲一区二区久久久 | 成人在线电影在线观看 | 密色视频 | 日韩小视频在线 | 欧美成人一区二区 | 久久国产视频网站 | 黑人巨大精品欧美一区二区一视频 | 午夜日韩精品 | 91久久伊人| 国产一级网站 | 欧美日韩国产一区二区三区不卡 | 国产精品视频网 | 国产欧美一区二区三区国产幕精品 | 中文字幕在线剧情 | 亚洲人成人一区二区在线观看 | 国产成人高清视频 | 国产福利91精品一区二区三区 | 国产精品成人一区 | 精品亚洲一区二区 | 精品一二三区在线观看 | 久久久五月天 | 国产欧美在线 | 欧美在线综合 | 久久欧美高清二区三区 | 伊人精品在线 | 国产高清精品一区二区三区 | av免费成人 | 成人av播放 | 亚洲精品日韩在线观看 | 99精品久久 |