标题: DS18B20头文件和零部件配置,很好用的 [打印本页]

作者: 丶LW丶    时间: 2017-5-12 23:57
标题: DS18B20头文件和零部件配置,很好用的
这里是一些常用的头文件和零部件配置。很好用的,大家可以试试。


单片机源程序如下:
  1. #include <STC12C5A60S2.H>
  2. #include "ds18b20.h"
  3. #include "delay.h"

  4. sbit IO_18B20 = P3^5;     //DS18B20通信引脚

  5. unsigned int temp;
  6. float f;

  7. bit Get18B20Ack()
  8. {
  9.         bit ack;

  10.         EA = 0;
  11.         IO_18B20 = 0;         
  12.         delay_us(500);         //500us复位脉冲
  13.         IO_18B20 = 1;         
  14.         delay_us(60);         //延时60us
  15.         ack = IO_18B20;         //读取存在脉冲
  16.         while(!IO_18B20);//等待脉冲结束
  17.         EA = 1;

  18.         return ack;
  19. }
  20. void  Write18B20(unsigned char dat)
  21. {
  22.         unsigned char mask;
  23.         EA = 0;
  24.         for(mask=0x01; mask!= 0; mask<<=1)         //低位在先,依次移出8个bit
  25.         {
  26.                 IO_18B20 = 0;
  27.                 delay_us(2);                  //产生2us低电平脉冲
  28.                 if((mask&dat) == 0)           //输出bit值
  29.                         IO_18B20 = 0;
  30.                 else
  31.                         IO_18B20 = 1;
  32.                 delay_us(60);                        //延时60us后拉高通信引脚
  33.                 IO_18B20 = 1;
  34.         }
  35.         EA = 1;
  36. }

  37. unsigned char Read18B20()
  38. {
  39.         unsigned char dat;
  40.         unsigned char mask;

  41.         EA = 0;
  42.         for(mask=0x01; mask!=0; mask<<=1)          //低位在先,依次采集8位bit
  43.         {
  44.                 IO_18B20 = 0;
  45.                 delay_us(2);                                          //2us低电平脉冲
  46.                 IO_18B20 = 1;                                          //结束低电平脉冲,等待18B02输出数据
  47.                 delay_us(3);                                          //延时
  48.                 if(!IO_18B20)
  49.                         dat &= ~mask;
  50.                 else
  51.                         dat |= mask;
  52.                 delay_us(60);
  53.         }
  54.         EA = 1;

  55.         return dat;
  56. }

  57. bit Start18B20()
  58. {
  59.         bit ack;

  60.         ack = Get18B20Ack();          //执行总线复位,并获取应答
  61.         if(ack == 0)
  62.         {
  63.                 Write18B20(0xCC);           //跳过ROM操作
  64.                 Write18B20(0x44);           //启动一次温度转换
  65.         }
  66.         return ~ack;
  67. }

  68. unsigned int Get18B20Temp()
  69. {
  70.         bit ack;
  71.         unsigned char LSB, MSB;           //定义16bit温度值的低字节
  72.         Start18B20();            //每次读取都要设置18b20模式
  73.         delay_ms(750);                                        //温度转换启动后,等待它转换完毕
  74.        
  75.         ack = Get18B20Ack();
  76.        
  77. ……………………

  78. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
DS18B20.zip (36.1 KB, 下载次数: 20)


作者: tt98    时间: 2020-5-29 08:50
看贴回贴是美德!




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