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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自己做的基于單片機的溫度檢測系統(tǒng)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51090 發(fā)表于 2014-10-13 14:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1.     該溫度檢測系統(tǒng)可直接測溫,測溫范圍為-125-+125度,還可以時時對不同時刻的溫度進行手動采樣,待采樣完成后,可以將采樣溫度一一讀出,也可進行定時采樣,例如間隔1秒采樣溫度一次,采樣開始有指示燈亮,采樣結(jié)束指示燈滅,停止采樣,一一讀出數(shù)據(jù)。
  2.   源程序
  3.           #include<reg51.h>
  4. #include <intrins.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit lcdrs=P1^1;
  8. sbit lcdrw=P1^2;
  9. sbit lcden=P1^3;
  10. sbit DQ = P3^7;
  11. sbit JL=P3^0;
  12. sbit DT=P3^1;
  13. sbit DS=P3^2;
  14. sbit LED=P3^3;
  15. uchar code table0[]=" RUI LOVE YING";
  16. uchar unm,temp,temp1,temp2,temp3,kk=0,s,tt=0;
  17. uchar temp00,temp01,temp02,temp03,temp04,temp05,temp06,temp07,temp08,temp09;
  18. uchar xs00,xs01,xs02,xs03,xs04,xs05,xs06,xs07,xs08,xs09;
  19. /*************精確延時函數(shù)*****************/
  20. void delay(unsigned char i)
  21. {
  22. while(--i);
  23. }
  24. /******************************************
  25. 此延時函數(shù)針對的是12Mhz的晶振
  26. delay(0):延時518us 誤差:518-2*256=6
  27. delay(1):延時7us   (原帖寫"5us"是錯的)
  28. delay(10):延時25us    誤差:25-20=5
  29. delay(20):延時45us    誤差:45-40=5
  30. delay(100):延時205us 誤差:205-200=5
  31. delay(200):延時405us 誤差:405-400=5
  32. *******************************************/
  33. /*****************DS18B20******************/
  34. void Init_Ds18b20(void)     //DS18B20初始化send reset and initialization command
  35. {
  36. DQ = 1;                     //DQ復(fù)位,不要也可行。
  37. delay(1);                  //稍做延時
  38. DQ = 0;                    //單片機拉低總線
  39. delay(250);                //精確延時,維持至少480us
  40. DQ = 1;                    //釋放總線,即拉高了總線
  41. delay(100);                //此處延時有足夠,確保能讓DS18B20發(fā)出存在脈沖。
  42. }
  43. uchar Read_One_Byte()       //讀取一個字節(jié)的數(shù)據(jù)read a byte date
  44.                             //讀數(shù)據(jù)時,數(shù)據(jù)以字節(jié)的最低有效位先從總線移出
  45. {
  46. uchar i   = 0;
  47. uchar dat = 0;
  48. for(i=8;i>0;i--)
  49. {
  50.    DQ = 0;                  //將總線拉低,要在1us之后釋放總線
  51.                            //單片機要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會有效。
  52.    _nop_();                 //至少維持了1us,表示讀時序開始
  53.    dat >>= 1;               //讓從總線上讀到的位數(shù)據(jù),依次從高位移動到低位。
  54.    DQ = 1;                  //釋放總線,此后DS18B20會控制總線,把數(shù)據(jù)傳輸?shù)娇偩上
  55.    delay(1);                 //延時7us,此處參照推薦的讀時序圖,盡量把控制器采樣時間放到讀時序后的15us內(nèi)的最后部分
  56.    if(DQ)                   //控制器進行采樣
  57.    {
  58.     dat |= 0x80;            //若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進行處理,保持為0
  59.    }      
  60.    delay(10);               //此延時不能少,確保讀時序的長度60us。
  61. }
  62. return (dat);
  63. }
  64. void Write_One_Byte(uchar dat)
  65. {
  66. uchar i = 0;
  67. for(i=8;i>0;i--)
  68. {
  69.    DQ = 0;                        //拉低總線
  70.    _nop_();                       //至少維持了1us,表示寫時序(包括寫0時序或?qū)?時序)開始
  71.    DQ = dat&0x01;                 //從字節(jié)的最低位開始傳輸
  72.                                  //指令dat的最低位賦予給總線,必須在拉低總線后的15us內(nèi),
  73.                                  //因為15us后DS18B20會對總線采樣。
  74.    delay(10);                     //必須讓寫時序持續(xù)至少60us
  75.    DQ = 1;                        //寫完后,必須釋放總線,
  76.    dat >>= 1;
  77.    delay(1);
  78. }
  79. }

  80. uint Get_Tmp()                   //獲取溫度get the temperature
  81. {
  82. uchar a,b;
  83. Init_Ds18b20();                //初始化
  84. Write_One_Byte(0xcc);          //忽略ROM指令
  85. Write_One_Byte(0x44);          //溫度轉(zhuǎn)換指令
  86. Init_Ds18b20();                 //初始化
  87. Write_One_Byte(0xcc);          //忽略ROM指令
  88. Write_One_Byte(0xbe);          //讀暫存器指令
  89. a = Read_One_Byte();           //讀取到的第一個字節(jié)為溫度LSB
  90. b = Read_One_Byte();           //讀取到的第一個字節(jié)為溫度MSB
  91. temp1 = b<<4;
  92. temp3=(a&0xf0)>>4;
  93. temp=temp1+temp3;
  94. temp2=(a&0x0f)*0.0625*100;
  95. return temp;
  96. }
  97. void delay1(int z)
  98. {
  99. int x,y;
  100.   for(x=z;x>0;x--)
  101.    for(y=110;y>0;y--) ;
  102. }
  103. void writen_com(uchar com)
  104. {
  105. lcdrs=0;
  106. P2=com;
  107. delay1(5);
  108. lcden=1;
  109. delay1(5);
  110. lcden=0;
  111. }

  112. void writen_date(uchar date)
  113. {
  114. lcdrs=1;
  115. P2=date;
  116. delay1(5);
  117. lcden=1;
  118. delay1(5);
  119. lcden=0;
  120. }
  121. void writen_sfm(uchar add,uchar date)
  122. {
  123.    uchar bai,shi,ge;
  124.    bai=date/100;
  125.    shi=date%100/10;
  126.    ge=date%10;
  127.    writen_com(0x80+0x40+add);
  128.    writen_date(0x30+bai);
  129.    writen_date(0x30+shi);
  130.    writen_date(0x30+ge);
  131. }
  132. void writen_sfm1(uchar add,uchar date)
  133. {
  134.    uchar shi,ge;

  135.    shi=date/10;
  136.    ge=date%10;
  137.    writen_com(0x80+0x40+add);
  138.    writen_date(0x30+shi);
  139.    writen_date(0x30+ge);
  140. }
  141. void main();

  142. void xianshi_temp()
  143. {
  144.   if(DT ==0)
  145.    {
  146.     delay(5);
  147. if(DT==0)
  148.   {
  149.    while(!DT);
  150.    writen_com(0x01);
  151.    writen_com(0x38);
  152.       writen_com(0x0c);
  153.       writen_com(0x06);
  154.    writen_com(0x80);
  155.       writen_date('0');
  156.       writen_com(0x80+0x40+0x05);
  157.       writen_date('.');
  158.    while(DT)
  159.    {
  160.   writen_sfm1(6,xs00);
  161.         writen_sfm(2,temp00);
  162.    }
  163. if(DT ==0)
  164.     {
  165.     delay(5);
  166. if(DT==0)
  167.   {
  168.    while(!DT);
  169.    writen_com(0x01);
  170.    writen_com(0x38);
  171.       writen_com(0x0c);
  172.       writen_com(0x06);
  173.    writen_com(0x80);
  174.       writen_date('1');
  175.       writen_com(0x80+0x40+0x05);
  176.       writen_date('.');
  177.    while(DT)
  178.    {
  179.   writen_sfm1(6,xs01);
  180.         writen_sfm(2,temp01);
  181.    }
  182.   if(DT ==0)
  183.     {
  184.     delay(5);
  185. if(DT==0)
  186.   {
  187.    while(!DT);
  188.    writen_com(0x01);
  189.    writen_com(0x38);
  190.       writen_com(0x0c);
  191.       writen_com(0x06);
  192.    writen_com(0x80);
  193.       writen_date('2');
  194.       writen_com(0x80+0x40+0x05);
  195.       writen_date('.');
  196.    while(DT)
  197.    {
  198.   writen_sfm1(6,xs02);
  199.         writen_sfm(2,temp02);
  200.    }
  201.   if(DT ==0)
  202.     {
  203.     delay(5);
  204. if(DT==0)
  205.   {
  206.    while(!DT);
  207.    writen_com(0x01);
  208.    writen_com(0x38);
  209.       writen_com(0x0c);
  210.       writen_com(0x06);
  211.    writen_com(0x80);
  212.       writen_date('3');
  213.       writen_com(0x80+0x40+0x05);
  214.       writen_date('.');
  215.    while(DT)
  216.    {
  217.   writen_sfm1(6,xs03);
  218.         writen_sfm(2,temp03);
  219.    }
  220.   if(DT ==0)
  221.     {
  222.     delay(5);
  223. if(DT==0)
  224.   {
  225.    while(!DT);
  226.    writen_com(0x01);
  227.    writen_com(0x38);
  228.       writen_com(0x0c);
  229.       writen_com(0x06);
  230.    writen_com(0x80);
  231.       writen_date('4');
  232.       writen_com(0x80+0x40+0x05);
  233.       writen_date('.');
  234.    while(DT)
  235.    {
  236.   writen_sfm1(6,xs04);
  237.         writen_sfm(2,temp04);
  238.    }
  239. if(DT ==0)
  240.     {
  241.     delay(5);
  242. if(DT==0)
  243.   {
  244.    while(!DT);
  245.    writen_com(0x01);
  246.    writen_com(0x38);
  247.       writen_com(0x0c);
  248.       writen_com(0x06);
  249.    writen_com(0x80);
  250.       writen_date('5');
  251.       writen_com(0x80+0x40+0x05);
  252.       writen_date('.');
  253.    while(DT)
  254.    {
  255.   writen_sfm1(6,xs05);
  256.         writen_sfm(2,temp05);
  257.    }
  258.     if(DT ==0)
  259.     {
  260.     delay(5);
  261. if(DT==0)
  262.   {
  263.    while(!DT);
  264.    writen_com(0x01);
  265.    writen_com(0x38);
  266.       writen_com(0x0c);
  267.       writen_com(0x06);
  268.    writen_com(0x80);
  269.       writen_date('6');
  270.       writen_com(0x80+0x40+0x05);
  271.       writen_date('.');
  272.    while(DT)
  273.    {
  274.   writen_sfm1(6,xs06);
  275.         writen_sfm(2,temp06);
  276.    }
  277.     if(DT ==0)
  278.     {
  279.     delay(5);
  280. if(DT==0)
  281.   {
  282.    while(!DT);
  283.    writen_com(0x01);
  284.    writen_com(0x38);
  285.       writen_com(0x0c);
  286.       writen_com(0x06);
  287.    writen_com(0x80);
  288.       writen_date('7');
  289.       writen_com(0x80+0x40+0x05);
  290.       writen_date('.');
  291.    while(DT)
  292.    {
  293.   writen_sfm1(6,xs07);
  294.         writen_sfm(2,temp07);
  295.    }
  296.     if(DT ==0)
  297.     {
  298.     delay(5);
  299. if(DT==0)
  300.   {
  301.    while(!DT);
  302.    writen_com(0x01);
  303.    writen_com(0x38);
  304.       writen_com(0x0c);
  305.       writen_com(0x06);
  306.    writen_com(0x80);
  307.       writen_date('8');
  308.       writen_com(0x80+0x40+0x05);
  309.       writen_date('.');
  310.    while(DT)
  311.    {
  312.   writen_sfm1(6,xs08);
  313.         writen_sfm(2,temp08);
  314.    }
  315.    if(DT ==0)
  316.     {
  317.     delay(5);
  318. if(DT==0)
  319.   {
  320.    while(!DT);
  321.    writen_com(0x01);
  322.    writen_com(0x38);
  323.       writen_com(0x0c);
  324.       writen_com(0x06);
  325.    writen_com(0x80);
  326.       writen_date('9');
  327.       writen_com(0x80+0x40+0x05);
  328.       writen_date('.');
  329.    while(DT)
  330.    {
  331.   writen_sfm1(6,xs09);
  332.         writen_sfm(2,temp09);
  333.    }
  334.    if(DT ==0)
  335.         {
  336.       delay(5);
  337.    if(DT==0)
  338.     {
  339.      while(!DT);
  340.   s=0;
  341.   main();
  342. }}}}}}}}}}}}}}}}}}}}}}
  343. }
  344. void record_temp()
  345. {
  346. if(JL == 0)
  347.   {
  348.    delay(5);
  349.     if(JL == 0)
  350.   {
  351.    while(!JL);
  352.    switch(s)
  353.    {
  354.     case 0:temp00=Get_Tmp(),xs00=temp2;break;
  355.     case 1:temp01=Get_Tmp(),xs01=temp2;break;
  356.     case 2:temp02=Get_Tmp(),xs02=temp2;break;
  357.     case 3:temp03=Get_Tmp(),xs03=temp2;break;
  358.     case 4:temp04=Get_Tmp(),xs04=temp2;break;
  359.     case 5:temp05=Get_Tmp(),xs05=temp2;break;
  360.     case 6:temp06=Get_Tmp(),xs06=temp2;break;
  361.     case 7:temp07=Get_Tmp(),xs07=temp2;break;
  362.     case 8:temp08=Get_Tmp(),xs08=temp2;break;
  363.     case 9:temp09=Get_Tmp(),xs09=temp2;break;
  364.    }
  365.    s++;
  366.    if(s==10)
  367.        s=0;
  368.   }
  369.   }
  370. }
  371. void init()
  372. {
  373. temp00=temp01=temp02=temp03=temp04=temp05=temp06=temp07=temp08=temp09=0;
  374. xs00=xs01=xs02=xs03=xs04=xs05=xs06=xs07=xs08=xs09=0;
  375. s=0;
  376. LED=1;
  377. lcden=0;
  378. lcdrw=0;
  379. writen_com(0x38);
  380. writen_com(0x0c);
  381. writen_com(0x06);
  382. writen_com(0x80);
  383. for(unm=0;unm<14;unm++)
  384. {
  385. writen_date(table0[unm]);
  386. }
  387. writen_com(0x80+0x40+0x05);
  388. writen_date('.');
  389. }
  390. void main()
  391. {TMOD=0X01;          //定時器工作方式設(shè)定
  392. TH0=(65536-50000)/256;       //設(shè)定定時初值50MS
  393. TL0=(65536-50000)%256;
  394. EA=1;           //開總中斷
  395. ET0=1;           //開定時器0中斷
  396. TR0=1;
  397. init();
  398. while(1)
  399. {
  400. xianshi_temp();
  401. record_temp();
  402. writen_sfm1(6,temp2);
  403. writen_sfm(2,Get_Tmp());
  404. }
  405. }
  406. void time0() interrupt 1       //定時器0
  407. {
  408.   if(DS==0)
  409.   {
  410.    delay(5);
  411.    if(DS==0)
  412.    {
  413.     LED=0;
  414. if(tt==4)
  415. {
  416.   tt=0;
  417.   switch(s)
  418.    {
  419.     case 0:temp00=Get_Tmp(),xs00=temp2;break;
  420.     case 1:temp01=Get_Tmp(),xs01=temp2;break;
  421.     case 2:temp02=Get_Tmp(),xs02=temp2;break;
  422.     case 3:temp03=Get_Tmp(),xs03=temp2;break;
  423.     case 4:temp04=Get_Tmp(),xs04=temp2;break;
  424.     case 5:temp05=Get_Tmp(),xs05=temp2;break;
  425.     case 6:temp06=Get_Tmp(),xs06=temp2;break;
  426.     case 7:temp07=Get_Tmp(),xs07=temp2;break;
  427.     case 8:temp08=Get_Tmp(),xs08=temp2;break;
  428.     case 9:temp09=Get_Tmp(),xs09=temp2;break;
  429.    }
  430.    s++;
  431.    if(s==10)
  432.        {s=0;
  433.     LED=1;
  434.     while(!DS);
  435.     }}}}
  436. TH0=(65536-50000)/256;
  437. TL0=(65536-50000)%256;
  438. Get_Tmp();
  439. tt++;
  440. }
復(fù)制代碼


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

使用道具 舉報

沙發(fā)
ID:75107 發(fā)表于 2015-5-3 22:34 | 只看該作者
原理圖???
回復(fù)

使用道具 舉報

板凳
ID:78005 發(fā)表于 2015-5-16 16:52 | 只看該作者
無圖無真相
回復(fù)

使用道具 舉報

地板
ID:80179 發(fā)表于 2015-5-16 18:26 | 只看該作者
學(xué)習(xí)學(xué)習(xí),謝謝分享。
回復(fù)

使用道具 舉報

5#
ID:80203 發(fā)表于 2015-5-17 00:49 | 只看該作者
原理圖呢
回復(fù)

使用道具 舉報

6#
ID:79943 發(fā)表于 2015-5-17 09:40 | 只看該作者
該溫度檢測系統(tǒng)可直接測溫,測溫范圍為-125-+125度,還可以時時對不同時刻的溫度進行手動采樣,待采樣完成后,可以將采樣溫度一一讀出,也可進行定時采樣,例如間隔1秒采樣溫度一次,采樣開始有指示燈亮,采樣結(jié)束指示燈滅,停止采樣,一一讀出數(shù)據(jù)。
回復(fù)

使用道具 舉報

7#
ID:80035 發(fā)表于 2015-5-18 23:57 | 只看該作者
無圖無真相
回復(fù)

使用道具 舉報

8#
ID:118804 發(fā)表于 2016-5-6 11:46 | 只看該作者
我試試行不行
回復(fù)

使用道具 舉報

9#
ID:611151 發(fā)表于 2019-10-4 22:17 | 只看該作者
怎么不附上實物圖啊??
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品久久二区二区91 | 天堂av中文| 日本激情一区二区 | 老外几下就让我高潮了 | 成人亚洲视频 | 91欧美| 久久国产高清 | 亚洲男人网 | 色婷婷精品国产一区二区三区 | av天天看| 亚洲精品久久久蜜桃网站 | 最新中文字幕在线 | 国产成人一区二区三区 | 日韩毛片在线视频 | 久久91av| 亚洲伊人精品酒店 | 久草网免费| 一级全黄少妇性色生活免费看 | 精品美女久久久久久免费 | 有码在线| 国产剧情一区 | 亚洲精品乱码久久久久久按摩观 | 阿v视频在线观看 | 国产日韩欧美一区 | 精品成人免费一区二区在线播放 | 欧美综合在线观看 | 久操伊人 | 亚洲国产区 | 久久中文字幕一区 | 99精品网 | 午夜精品久久久久99蜜 | 欧美男人的天堂 | 久在线精品视频 | 欧美激情 一区 | 最新中文字幕在线播放 | 91影库| 久久成人精品视频 | 婷婷激情综合 | 亚洲精品自在在线观看 | 在线观看www视频 | 欧美亚洲视频 |