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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 39048|回復: 121
收起左側

51單片機實現多路DS18B20溫度測量-proteus仿真

  [復制鏈接]
ID:53125 發表于 2013-8-16 21:34 | 顯示全部樓層 |閱讀模式
1.JPG

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

評分

參與人數 2黑幣 +10 收起 理由
溯行 + 5 贊一個!
hcx227 + 5 很好 很實用的資料 謝謝分享

查看全部評分

回復

使用道具 舉報

ID:55815 發表于 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. }


復制代碼


回復

使用道具 舉報

ID:14052 發表于 2013-11-1 11:46 | 顯示全部樓層
51黑有你更精彩!!
回復

使用道具 舉報

ID:57249 發表于 2013-11-28 11:08 | 顯示全部樓層
我是初學者。就是想看看模擬量是怎樣處理的。
回復

使用道具 舉報

ID:57509 發表于 2013-12-13 17:22 | 顯示全部樓層
樓主呀你去哪了  緊急問題啊  求聯系我  TEL:18583834210
回復

使用道具 舉報

ID:57923 發表于 2013-12-16 16:37 | 顯示全部樓層
{:soso_e100:}
回復

使用道具 舉報

ID:57999 發表于 2013-12-19 14:12 | 顯示全部樓層
很不錯
回復

使用道具 舉報

ID:58142 發表于 2013-12-23 13:48 | 顯示全部樓層
看看唄!
回復

使用道具 舉報

ID:58986 發表于 2014-1-30 22:42 | 顯示全部樓層
這里真的好學習啊...我在這里安家了
回復

使用道具 舉報

ID:59748 發表于 2014-3-17 11:39 | 顯示全部樓層
好好學習
回復

使用道具 舉報

ID:59748 發表于 2014-3-17 17:44 | 顯示全部樓層
很好,每一次都是小小的進步
回復

使用道具 舉報

ID:59780 發表于 2014-3-18 14:43 | 顯示全部樓層
樓主威武
回復

使用道具 舉報

ID:34763 發表于 2014-3-26 11:44 | 顯示全部樓層
很好 學習  學習  謝謝
回復

使用道具 舉報

ID:58796 發表于 2014-3-28 19:54 | 顯示全部樓層
頂。。。。。。。。。。。。。。。
回復

使用道具 舉報

ID:55219 發表于 2014-3-28 22:41 | 顯示全部樓層
不錯!學習學習,謝謝。。
回復

使用道具 舉報

ID:60790 發表于 2014-4-17 14:09 | 顯示全部樓層
好好學習
回復

使用道具 舉報

ID:60802 發表于 2014-4-17 20:40 | 顯示全部樓層
買板的時候沒買DS18B20芯片,先用仿真的試試程序
回復

使用道具 舉報

ID:61006 發表于 2014-4-22 22:56 | 顯示全部樓層
很好 學習  學習  謝謝
回復

使用道具 舉報

ID:60394 發表于 2014-4-23 12:16 | 顯示全部樓層
謝謝樓主分享!
回復

使用道具 舉報

ID:50727 發表于 2014-4-24 12:52 | 顯示全部樓層
下載 看一看 謝謝
回復

使用道具 舉報

ID:61227 發表于 2014-4-28 21:08 | 顯示全部樓層
謝謝樓主慷慨,學習了!
回復

使用道具 舉報

ID:61924 發表于 2014-5-16 17:04 | 顯示全部樓層
回復

使用道具 舉報

ID:61771 發表于 2014-5-29 12:47 | 顯示全部樓層
謝謝分享,看到這個感覺會好好學習的 !
回復

使用道具 舉報

ID:45829 發表于 2014-5-29 18:25 | 顯示全部樓層
很好,每一次都是小小的進步
回復

使用道具 舉報

ID:47760 發表于 2014-6-1 21:38 | 顯示全部樓層
51hei(51黑)論壇有你更精彩
回復

使用道具 舉報

ID:62553 發表于 2014-6-3 13:19 | 顯示全部樓層
很好的東西   是哦以匪淺
回復

使用道具 舉報

ID:62553 發表于 2014-6-3 13:20 | 顯示全部樓層
這玩意確實需要花時間好好鉆研鉆研   
回復

使用道具 舉報

ID:62770 發表于 2014-6-9 16:41 | 顯示全部樓層
很好,謝謝!學習,學習!
回復

使用道具 舉報

ID:18916 發表于 2014-6-14 18:15 | 顯示全部樓層
贊一個
回復

使用道具 舉報

ID:46838 發表于 2014-6-28 18:21 | 顯示全部樓層
好東西
回復

使用道具 舉報

ID:63533 發表于 2014-7-4 09:13 | 顯示全部樓層
我也來加入
回復

使用道具 舉報

ID:64065 發表于 2014-8-8 10:12 | 顯示全部樓層
請問,如何獲取的八個DS18B20內部RAM64位序列號
回復

使用道具 舉報

ID:59341 發表于 2014-9-29 17:01 | 顯示全部樓層
6666.jpg

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

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

使用道具 舉報

ID:66645 發表于 2014-9-29 17:11 | 顯示全部樓層
很好 學習  學習
回復

使用道具 舉報

ID:41765 發表于 2014-9-30 11:01 來自手機 | 顯示全部樓層
還不錯
回復

使用道具 舉報

ID:66805 發表于 2014-9-30 11:37 | 顯示全部樓層
很好 學習  學習  謝謝
回復

使用道具 舉報

ID:66805 發表于 2014-9-30 11:39 | 顯示全部樓層
很好 學習  學習  謝謝
回復

使用道具 舉報

ID:59341 發表于 2014-10-4 17:15 | 顯示全部樓層
7777.JPG

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

使用道具 舉報

ID:61875 發表于 2014-11-12 14:37 | 顯示全部樓層
謝謝樓主的奉獻
回復

使用道具 舉報

ID:69408 發表于 2014-11-25 14:52 | 顯示全部樓層
我連一個18b20的顯示都還沒有弄好哦,樓主真牛,有空下載學習學習!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精彩视频 | 精品日韩一区 | 国产视频二区在线观看 | 日韩中文字幕在线观看 | 日韩一区中文字幕 | 激情欧美日韩一区二区 | 人人看人人草 | 久久精品一级 | 亚洲欧美日韩精品久久亚洲区 | 网址黄 | 国产精品一区二区av | 宅女噜噜66国产精品观看免费 | 成人区一区二区三区 | 久久国产精品免费一区二区三区 | 日韩欧美国产精品一区二区 | 久久久人 | 日日操夜夜操天天操 | 天天干狠狠操 | 成人视屏在线观看 | 欧美一二三四成人免费视频 | 亚洲三级av| 日韩精品一区二区三区中文在线 | 羞羞午夜 | 国产精品一区久久久久 | 国产成人免费在线观看 | 天堂一区二区三区 | 国产精品免费一区二区三区 | 国产欧美日韩在线观看 | 波波电影院一区二区三区 | 日日草夜夜草 | 在线观看日韩av | 中文在线一区二区 | 欧美精品v | 免费av在线网站 | 九九久久国产精品 | 久久一及片 | 欧美国产中文 | 九九热这里只有精品在线观看 | 视频一区二区在线 | 日韩有码一区 | 狠狠色狠狠色综合系列 |