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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DS18B20能讀數據但數據錯誤【已解決】

[復制鏈接]
跳轉到指定樓層
樓主
ID:70481 發表于 2014-12-17 00:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. 程序分享出來給需要的人作參考
  2. #include<reg52.h>
  3. #define uint        unsigned int
  4. #define uchar        unsigned char

  5. sbit        DQ=P2^2;     //DS18B20單總線
  6. sbit        dula=P2^6;   //控制數碼管段選的鎖存器
  7. sbit        wela=P2^7;   //控制數碼管位選的鎖存器
  8. sbit rs=P3^5;        
  9. sbit lcden=P3^4;
  10. sbit s1=P3^0;
  11. sbit s2=P3^1;
  12. sbit s3=P3^2;
  13. sbit rd=P3^7;
  14. sbit wr=P3^6;

  15. void        delay(int us)
  16. {
  17.         int s;
  18.         for(s=0;s<us;s++);
  19. }
  20. void delay1(uint z)
  21. {
  22.         uint x,y;
  23.         for(x=z;x>0;x--)
  24.                 for(y=110;y>0;y--);
  25. }



  26. void write_com(uchar com)
  27. {
  28.         rs=0;
  29.         lcden=0;
  30.         P0=com;
  31.         delay1(5);
  32.         lcden=1;
  33.         delay1(5);
  34.         lcden=0;        
  35. }

  36. void write_date(uchar date)
  37. {
  38.         rs=1;
  39.         lcden=0;
  40.         P0=date;
  41.         delay1(5);
  42.         lcden=1;
  43.         delay1(5);
  44.         lcden=0;        
  45. }
  46. void init()
  47. {
  48.     wr=0;
  49.     dula=0;
  50.         wela=0;
  51.         lcden=0;

  52.         write_com(0x38);
  53.         write_com(0x0c);
  54.         write_com(0x06);
  55.         write_com(0x01);
  56.         write_com(0x80);
  57. }

  58. uchar        reset()
  59. {
  60.         uchar presence;
  61.         DQ=0;
  62.         delay(29);
  63.         DQ=1;
  64.         delay(3);
  65.         presence=DQ;
  66.         delay(25);
  67.         return(presence);
  68. }

  69. uchar        read_bit()
  70. {
  71.         uchar        i;
  72.         DQ=0;
  73.         DQ=1;
  74.         for(i=0;i<3;i++);
  75.         return(DQ);
  76. }
  77. void write_bit(char bitval)
  78. {
  79.         DQ=0;
  80.         if(bitval==1)DQ=1;
  81.         delay(5);
  82.         DQ=1;
  83. }

  84. uchar read_byte()
  85. {
  86.         uchar i;
  87.         uchar value=0;
  88.         for(i=0;i<8;i++)
  89.         {
  90.                 if(read_bit())value|=0x01<<i;
  91.                 delay(6);
  92.         }
  93.         return(value);
  94. }

  95. void        write_byte(char val)
  96. {
  97.         uchar i;
  98.         uchar temp;
  99.         for(i=0;i<8;i++)
  100.         {
  101.                 temp=val>>i;
  102.                 temp&=0x01;
  103.                 write_bit(temp);
  104.         }
  105.         delay(5);
  106. }
  107. uint        get_tmp()
  108. {
  109.         uchar a,b,temp;
  110.         float tt;
  111.         reset();
  112.         write_byte(0xcc);//SkipROM
  113.         write_byte(0x44);//開始轉換
  114.         delay(31);
  115.         reset();
  116.         write_byte(0xcc);
  117.         write_byte(0xbe);
  118.         a=read_byte();
  119.         b=read_byte();
  120.         temp=b;
  121.   temp<<=8;             //two byte  compose a int variable
  122.   temp=temp|a;
  123.   tt=temp*0.0625;
  124.   temp=tt*10+0.5;
  125.         return(temp);        
  126. }
  127. void display(uchar num)
  128. {
  129.         uchar bai,shi,ge;
  130.         bai=num/100;
  131.         shi=(num%100)/10;
  132.         ge=(num%100)%10;

  133.         write_com(0x80);
  134.         write_date(0x30+bai);
  135.         write_com(0x81);
  136.         write_date(0x30+shi);
  137.         write_com(0x82);
  138.         write_date(0x30+ge);
  139. }

  140. void        main()
  141. {
  142.         uchar a;
  143.         uint tmp;
  144.         init();
  145.         while(1)
  146.         {
  147.                 for(a=28;a>0;a--)
  148.                 {        
  149.                         tmp=get_tmp();
  150.                         display(tmp);
  151.                         delay(60);

  152.                 }
  153.                
  154.         }        

  155. }
復制代碼


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

使用道具 舉報

沙發
ID:70481 發表于 2014-12-17 00:22 | 只看該作者
把轉換時間調長一點

問題解決了,謝謝朋友了。
回復

使用道具 舉報

板凳
ID:141524 發表于 2016-10-7 08:53 | 只看該作者
你好, 請問我可以用ds18b20 ID 測試器測出ID,不過我有客戶說ID 是錯誤的,是怎么回事, 謝謝了
回復

使用道具 舉報

地板
ID:244281 發表于 2018-1-18 00:23 | 只看該作者
你好,這個地方為什么要加0x30
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一本一道久久a久久精品综合蜜臀 | 亚洲综合中文字幕在线观看 | 一区二区三区回区在观看免费视频 | 一区二区三区四区电影 | 在线国产99| 国产欧美精品一区二区色综合朱莉 | 激情av免费看 | 黄色片在线免费看 | 毛片免费观看 | 日韩中字幕| 欧美一二三区 | 午夜免费看视频 | 中文字字幕一区二区三区四区五区 | 日韩电影在线一区 | 超碰97人人人人人蜜桃 | 国产999精品久久久久久 | 激情的网站 | 亚洲视频一区 | 日韩亚洲一区二区 | 中文字幕精品视频 | 成人中文网 | 亚洲热在线视频 | 操一草| 国产精品小视频在线观看 | 久久精品视频免费看 | 草樱av | 久久美国 | 午夜视频在线免费观看 | 成年人在线视频 | 久久久精品久 | 产真a观专区 | 国产福利在线小视频 | 中文字幕 欧美 日韩 | 成人h视频在线 | 欧美大片黄| 日韩欧美在线视频一区 | 欧美一级全黄 | 亚洲精品一二三区 | 日韩欧美中文 | 成年人在线视频 | 免费精品在线视频 |