⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20驱动程序(c语言).txt

📁 DS18B20各种应用的C51程序大全,包含各种范例
💻 TXT
字号:
                
                        DS18B20驱动程序(C语言)


                  /*---------------------------------------------------------------------------------------------------
                   功能:实现对DS18B20的读取
                   原理:单总线协议
                   
                  注意:单总线协议对延时要求比较严格,此程序中采用的是11.0592M的晶振,如果使用其他的晶振请跟据DS18B20的                        资料修改延时参数
                 ====================================================================================================*/
                  //#include"reg51.h"
                  sbit DQ =P1^4;   //定义通信端口
                  //延时函数
                  /*
                  void delay(unsigned int i)
                  {
                   while(i--);
                  }
                  */
                  //初始化函数
                  Init_DS18B20(void)
                  {
                   unsigned char x=0;
                   DQ = 1;    //DQ复位
                   delay(8);  //稍做延时
                   DQ = 0;    //单片机将DQ拉低
                   delay(80); //精确延时 大于 480us
                   DQ = 1;    //拉高总线
                   delay(14);
                   x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
                   delay(20);
                  }
                  //读一个字节
                  ReadOneChar(void)
                  {
                  unsigned char i=0;
                  unsigned char dat = 0;
                  for (i=8;i>0;i--)
                   {
                    DQ = 0; // 给脉冲信号
                    dat>>=1;
                    DQ = 1; // 给脉冲信号
                    if(DQ)
                     dat|=0x80;
                    delay(4);
                   }
                   return(dat);
                  }
                  //写一个字节
                  WriteOneChar(unsigned char dat)
                  {
                   unsigned char i=0;
                   for (i=8; i>0; i--)
                   {
                    DQ = 0;
                    DQ = dat&0x01;
                    delay(5);
                    DQ = 1;
                    dat>>=1;
                   }
                  //delay(4);
                  }
                  //读取温度
                  ReadTemperature(void)
                  {
                  unsigned char a=0;
                  unsigned char b=0;
                  unsigned int t=0;
                  float tt=0;
                  Init_DS18B20();
                  WriteOneChar(0xCC); // 跳过读序号列号的操作
                  WriteOneChar(0x44); // 启动温度转换
                  Init_DS18B20();
                  WriteOneChar(0xCC); //跳过读序号列号的操作
                  WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
                  a=ReadOneChar();
                  b=ReadOneChar();
                  t=b;
                  t<<=8;
                  t=t|a;
                  tt=t*0.0625;
                  //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
                  return(t);
                  }

                  main()
                  {
                   unsigned char i=0;
                    while(1)
                    {
                     i=ReadTemperature();//读温度
                    }
                  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -