标题: DS18B20应用,模数转换显示温度 [打印本页]

作者: zny    时间: 2019-6-8 01:06
标题: DS18B20应用,模数转换显示温度

通过DS18B20的温度检测,模数转化显示相对应的温度。

仿真图,如图所示。





代码源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define out P0

  6. sbit smg1=out^4;
  7. sbit smg2=out^5;
  8. sbit DQ=P3^7;
  9. void delay5(uchar);
  10. void init_ds18b20(void);
  11. uchar readbyte(void);
  12. void writebyte(uchar);
  13. uchar retemp(void);

  14. void main(void)                                              
  15. {
  16.         uchar i,temp;
  17.         delay5(1000);
  18.         while(1)
  19.         {
  20.                  temp=retemp();       
  21.                  for(i=0;i<10;i++)                       
  22.                  {
  23.                          out=(temp/10)&0x0f;
  24.                          smg1=0;
  25.                          smg2=1;
  26.                          delay5(1000);                       
  27.                          out=(temp%10)&0x0f;
  28.                          smg1=1;
  29.                          smg2=0;
  30.                          delay5(1000);                       
  31.                  }
  32.         }
  33. }

  34. void delay5(uchar n)                       
  35. {
  36.          do
  37.          {
  38.                  _nop_();
  39.                  _nop_();
  40.                  _nop_();
  41.                  n--;
  42.          }
  43.          while(n);
  44. }

  45. void init_ds18b20(void)               
  46. {
  47.          uchar x=0;
  48.          DQ =0;   
  49.          delay5(120);
  50.          DQ =1;   
  51.          delay5(16);
  52.          delay5(80);
  53. }

  54. uchar readbyte(void)                        
  55. {
  56.         uchar i=0;
  57.         uchar date=0;
  58.         for (i=8;i>0;i--)
  59.         {
  60.                   DQ =0;
  61.                   delay5(3);       
  62.                         DQ =1;
  63.                   date>>=1;
  64.                   if(DQ)
  65.                   date|=0x80;       
  66.                   delay5(11);
  67.          }
  68.         return(date);
  69. }
  70. void writebyte(uchar dat)                        
  71. {
  72. uchar i=0;
  73. for(i=8;i>0;i--)
  74. {
  75.           DQ =0;
  76.           DQ =dat&0x01;                               
  77.           delay5(12);                                  
  78.           DQ = 1;          
  79.           dat>>=1;
  80.           delay5(5);
  81.           }
  82. }
  83. uchar retemp(void)                       
  84. {
  85.         uchar a,b,tt;
  86.         uint t;
  87.         init_ds18b20();
  88.         writebyte(0xCC);
  89.         writebyte(0x44);
  90.         init_ds18b20();
  91.         writebyte(0xCC);
  92.         writebyte(0xBE);
  93.         a=readbyte();
  94.         b=readbyte();
  95.         t=b;
  96.         t<<=8;
  97.         t=t|a;
  98.         tt=t*0.0625;
  99.         return(tt);
  100. }
复制代码

所有文件在下方,需要自取。
DS18B20应用.zip (83.46 KB, 下载次数: 16)



作者: Tumen233    时间: 2019-6-8 10:19
谢谢了 这个正好需要
作者: xingmou2000    时间: 2019-6-8 12:12
我做的能显示小数点后1位




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1