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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2307|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

DS18b20溫度計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:129825 發(fā)表于 2017-4-13 19:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于ds18b20的溫度計(jì):
【實(shí)驗(yàn)57】溫度計(jì)DS18B20.zip (20.04 KB, 下載次數(shù): 12)

  1. /*********************************************************************************
  2. * 【編寫(xiě)時(shí)間】: 2014年3月5日
  3. * 【作    者】: 清翔電子:03
  4. * 【版    本】: 1.0
  5. * 【實(shí)驗(yàn)平臺(tái)】: QX-MCS51 單片機(jī)開(kāi)發(fā)板
  6. * 【外部晶振】: 11.0592mhz       
  7. * 【主控芯片】: STC89C52
  8. * 【編譯環(huán)境】: Keil μVisio3       
  9. * 【程序功能】: 實(shí)時(shí)采集當(dāng)前環(huán)境溫度值,并顯示于數(shù)碼管上                                                                                           
  10. * 【使用說(shuō)明】:
  11. *  說(shuō)明:免費(fèi)開(kāi)源,不提供源代碼分析.
  12. **********************************************************************************/

  13. #include <reg52.h>
  14. #define uchar unsigned char
  15. #define uint unsigned int
  16. sbit DS=P2^2;           //define interface
  17. uint temp;             // variable of temperature
  18. uchar flag1;            // sign of the result positive or negative
  19. sbit dula=P2^6;
  20. sbit wela=P2^7;
  21. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  22.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  23. unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
  24.                         0x87,0xff,0xef};

  25. void delay(uint count)      //delay
  26. {
  27.   uint i;
  28.   while(count)
  29.   {
  30.     i=200;
  31.     while(i>0)
  32.     i--;
  33.     count--;
  34.   }
  35. }
  36. void dsreset(void)       //send reset and initialization command
  37. {
  38.   uint i;
  39.   DS=0;
  40.   i=103;
  41.   while(i>0)i--;
  42.   DS=1;
  43.   i=4;
  44.   while(i>0)i--;
  45. }

  46. bit tmpreadbit(void)       //read a bit
  47. {
  48.    uint i;
  49.    bit dat;
  50.    DS=0;i++;          //i++ for delay
  51.    DS=1;i++;i++;
  52.    dat=DS;
  53.    i=8;while(i>0)i--;
  54.    return (dat);
  55. }

  56. uchar tmpread(void)   //read a byte date
  57. {
  58.   uchar i,j,dat;
  59.   dat=0;
  60.   for(i=1;i<=8;i++)
  61.   {
  62.     j=tmpreadbit();
  63.     dat=(j<<7)|(dat>>1);   //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里
  64.   }
  65.   return(dat);
  66. }

  67. void tmpwritebyte(uchar dat)   //write a byte to ds18b20
  68. {
  69.   uint i;
  70.   uchar j;
  71.   bit testb;
  72.   for(j=1;j<=8;j++)
  73.   {
  74.     testb=dat&0x01;
  75.     dat=dat>>1;
  76.     if(testb)     //write 1
  77.     {
  78.       DS=0;
  79.       i++;i++;
  80.       DS=1;
  81.       i=8;while(i>0)i--;
  82.     }
  83.     else
  84.     {
  85.       DS=0;       //write 0
  86.       i=8;while(i>0)i--;
  87.       DS=1;
  88.       i++;i++;
  89.     }

  90.   }
  91. }

  92. void tmpchange(void)  //DS18B20 begin change
  93. {
  94.   dsreset();
  95.   delay(1);
  96.   tmpwritebyte(0xcc);  // address all drivers on bus
  97.   tmpwritebyte(0x44);  //  initiates a single temperature conversion
  98. }

  99. uint tmp()               //get the temperature
  100. {
  101.   float tt;
  102.   uchar a,b;
  103.   dsreset();
  104.   delay(1);
  105.   tmpwritebyte(0xcc);
  106.   tmpwritebyte(0xbe);
  107.   a=tmpread();
  108.   b=tmpread();
  109.   temp=b;
  110.   temp<<=8;             //two byte  compose a int variable
  111.   temp=temp|a;
  112.   tt=temp*0.0625;
  113.   temp=tt*10+0.5;
  114.   return temp;
  115. }

  116. void display(uint temp)                        //顯示程序
  117. {
  118.    uchar A1,A2,A2t,A3;
  119.    A1=temp/100;
  120.    A2t=temp%100;
  121.    A2=A2t/10;
  122.    A3=A2t%10;
  123.    dula=0;
  124.    P0=table[A1];                //顯示百位
  125.    dula=1;
  126.    dula=0;

  127.    wela=0;
  128.    P0=0xfe;
  129.    wela=1;
  130.    wela=0;
  131.    delay(1);

  132.    dula=0;
  133.    P0=table1[A2];                //顯示十位
  134.    dula=1;
  135.    dula=0;

  136.    wela=0;
  137.    P0=0xfd;
  138.    wela=1;
  139.    wela=0;
  140.    delay(1);

  141.    dula=0;
  142.    P0=table[A3];                //顯示個(gè)位
  143.    dula=1;
  144.    dula=0;

  145.    wela=0;
  146.    P0=0xfb;
  147.    wela=1;
  148.    wela=0;
  149.    delay(1);
  150. }


  151. void main()
  152. {
  153. uchar a;
  154.   do
  155.   {
  156.     tmpchange();
  157.         for(a=10;a>0;a--)
  158.           {   
  159.                   display(tmp());
  160.           }
  161.   } while(1);
  162. }
復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情综合色综合啪啪五月 | 亚洲精品中文在线观看 | 一级aaaa毛片 | 99久久国产综合精品麻豆 | 精品一区二区在线观看 | 99pao成人国产永久免费视频 | 久久香焦 | 久久精品屋 | 日日夜精品视频 | 五月天天丁香婷婷在线中 | 九九免费在线视频 | 久久久久高清 | 狠狠色综合久久丁香婷婷 | 日韩视频一区二区 | 日韩三级免费网站 | 成人av在线播放 | 伊人中文字幕 | 中文字幕亚洲一区二区三区 | 国产精品久久久久久久久图文区 | 在线一区观看 | 男人的天堂在线视频 | 少妇一区二区三区 | 成人高清在线 | 日韩精品999| 欧洲一级视频 | 亚洲一区二区精品视频 | 精品欧美乱码久久久久久 | 国产ts人妖一区二区三区 | 久久久婷婷 | 欧美精品在线一区 | 99久久婷婷国产综合精品首页 | 久久精品亚洲 | 久久久精品 | 无码日韩精品一区二区免费 | 欧美午夜精品理论片a级按摩 | 精品成人在线观看 | 欧美一区在线视频 | 欧美一级毛片久久99精品蜜桃 | 国产精品99久久久久久大便 | 亚洲每日更新 | 国产精品178页 |