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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2935|回復: 1
收起左側

基于單片機的DS18B20液晶顯示的溫度測溫

[復制鏈接]
ID:144543 發表于 2016-11-23 10:30 | 顯示全部樓層 |閱讀模式
包括proteus仿真和程序
QQ圖片20161123102821.png
0.png
資料下載:
LCD1602溫度測量.rar (71.36 KB, 下載次數: 69)

程序源碼:
  1. /*******************************************
  2. 程序功能:利用單線制DS18B20溫度傳感器
  3.           LED數碼管顯示當前的溫度值
  4. ********************************************/
  5. #include <reg51.h>                 //DS18B20溫度傳感器程序
  6. #include "LCD1602.h"
  7. #include "stdio.h"


  8. sbit DQ=P3^6; //數據傳輸線接單片機的相應的引腳
  9. unsigned char tempL=0; //設全局變量
  10. unsigned char tempH=0;

  11. unsigned int sdata =0;
  12. unsigned long value;
  13.   float m ;
  14. float temper=0;
  15. bit  fg=1;        //溫度正負標志

  16. //******************延時子程序 *******************************

  17. //這個延時程序的具體延時時間是time=i*8+10,適用于小于2ms的延時

  18. //************************************************************
  19. void delay(unsigned char i)
  20. {
  21. for(i;i>0;i--);
  22. }


  23. //***********************************************************

  24. //                     延時子程序

  25. //************************************************************
  26. void Delay1ms(unsigned int count)
  27. {
  28.         unsigned int i,j;
  29.         for(i=0;i<count;i++)
  30.         for(j=0;j<120;j++);
  31. }




  32. //*****************************初始化程序 *********************************//

  33. Init_DS18B20(void)
  34. {
  35. unsigned char x=0;
  36. DQ=1; //DQ先置高
  37. delay(8); //稍延時
  38. DQ=0; //發送復位脈沖
  39. delay(80); //延時(>480us)
  40. DQ=1; //拉高數據線
  41. delay(5); //等待(15~60us)
  42. x=DQ; //用X的值來判斷初始化有沒有成功,18B20存在的話X=0,否則X=1
  43. delay(20);
  44. }


  45. //**********讀一個字節************//

  46. ReadOneChar(void)  //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
  47. {
  48. unsigned char i=0; //每個讀周期最短的持續時間為60us,各個讀周期之間必須有1us以上的高電平恢復期
  49. unsigned char dat=0;
  50. for (i=8;i>0;i--) //一個字節有8位
  51. {
  52. DQ=1;
  53. delay(1);
  54. DQ=0;
  55. dat>>=1;
  56. DQ=1;
  57. if(DQ)
  58. dat|=0x80;
  59. delay(4);
  60. }
  61. return(dat);
  62. }



  63. //*********************** **寫一個字節**************************//

  64. WriteOneChar(unsigned char dat)
  65. {
  66.   unsigned char i=0; //數據線從高電平拉至低電平,產生寫起始信號。15us之內將所需寫的位送到數據線上,
  67.   for(i=8;i>0;i--) //在15~60us之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。
  68.   {
  69.    DQ=0; //在開始另一個寫周期前必須有1us以上的高電平恢復期。
  70.    DQ=dat&0x01;
  71.    delay(5);
  72.    DQ=1;
  73.    dat>>=1;
  74.   }
  75.   delay(4);
  76. }


  77. //讀溫度值(低位放tempL;高位放tempH;)
  78. ReadTemperature(void)
  79. {
  80. Init_DS18B20(); //初始化
  81. WriteOneChar(0xcc); //跳過讀序列號的操作
  82. WriteOneChar(0x44); //啟動溫度轉換
  83. delay(125); //轉換需要一點時間,延時
  84. Init_DS18B20(); //初始化
  85. WriteOneChar(0xcc); //跳過讀序列號的操作
  86. WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
  87. tempL=ReadOneChar(); //讀出溫度的低位LSB
  88. tempH=ReadOneChar(); //讀出溫度的高位MSB

  89.   if(tempH>0x7f)      //最高位為1時溫度是負
  90.     {
  91.          tempL=~tempL;         //補碼轉換,取反加一
  92.         tempH=~tempH+1;      
  93.          fg=0;            //讀取溫度為負時fg=0
  94.     }
  95.   temper= ((tempH*256) +tempL)*0.0625;

  96. }






  97. //**************************** //主程序


  98. main()
  99. {
  100.    unsigned int value = 0;
  101.    unsigned char buffer[40];
  102.   
  103.    while (1)
  104.     {
  105.       
  106.                 LCD_Initial();
  107.              GotoXY(0,0);
  108.              Print("  temperature");
  109.        
  110.              while(1)
  111.               {  
  112.                    ReadTemperature() ;
  113.                    GotoXY(3,1);  
  114.                     if (fg==1)
  115.                         {
  116.                       sprintf(buffer,"+%6.3f",temper);
  117.                       Print(buffer);
  118.                       Delay1ms(200);
  119.                          }

  120.                          if (fg==0)
  121.                         {
  122.                       sprintf(buffer,"-%6.3f",temper);
  123.                       Print(buffer);
  124.                       Delay1ms(200);
  125.                          }
  126.               }            
  127.         }
  128. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:301302 發表于 2018-4-3 09:54 | 顯示全部樓層
感謝樓主的分享,DS18B20調好幾天了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.一区二区 | 欧美精品一区三区 | 国产免费又色又爽又黄在线观看 | .国产精品成人自产拍在线观看6 | 欧美日韩高清在线一区 | 免费高潮视频95在线观看网站 | 免费一级淫片aaa片毛片a级 | 天天人人精品 | 欧美一级免费 | 欧美视频二区 | 国精久久 | av黄色在线播放 | 色婷婷国产精品综合在线观看 | 欧美黄a | 亚洲综合网站 | 欧美精品一区二区三区蜜桃视频 | 欧美日韩免费一区二区三区 | 欧美福利在线 | 免费的色网站 | 国家一级黄色片 | 久久天天综合 | 色偷偷噜噜噜亚洲男人 | 久久久久中文字幕 | 草久网 | 国产精品一区二区三区四区五区 | 国产精品美女久久久久久久网站 | 四虎影视免费观看 | 国产情侣啪啪 | 国产精品久久久一区二区三区 | 成人免费在线电影 | 狠狠的干狠狠的操 | 日韩黄| 亚洲免费三区 | 一区二区三区四区在线视频 | 色综合久 | 亚洲成人三区 | 亚洲第一av | 中文字幕欧美日韩一区 | 久久国产精品一区二区 | 久久一区二区视频 | 在线观看亚洲精品 |