dc18b20.rar

  • 哎呦~
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 0
    下载次数
  • 2020-12-23 02:32
    上传日期
18b20程序,用于RAM程序 包含了初始化 读,写
dc18b20.rar
  • dc18b20
  • ds18b20 - 副本.c
    6.4KB
  • ds18b20 - 副本.h
    1.9KB
内容介绍
#include "includes.h" //复位DS18B20 void DS18B20_Rst1(void) { DS18B20_IO_OUT1(); //SET PA0 OUTPUT DS18B20_DQ_OUT1=0; //拉低DQ delay_us(750); //拉低750us DS18B20_DQ_OUT1=1; //DQ=1 delay_us(15); //15US } void DS18B20_Rst2(void) { DS18B20_IO_OUT2(); //SET PA0 OUTPUT DS18B20_DQ_OUT2=0; //拉低DQ delay_us(750); //拉低750us DS18B20_DQ_OUT2=1; //DQ=1 delay_us(15); //15US } //等待DS18B20的回应 //返回1:未检测到DS18B20的存在 //返回0:存在 u8 DS18B20_Check1(void) { u8 retry=0; DS18B20_IO_IN1();//SET PA0 INPUT while (DS18B20_DQ_IN1&&retry<200) { retry++; delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN1&&retry<240) { retry++; delay_us(1); }; if(retry>=240)return 1; return 0; } u8 DS18B20_Check2(void) { u8 retry=0; DS18B20_IO_IN2();//SET PA0 INPUT while (DS18B20_DQ_IN2&&retry<200) { retry++; delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN2&&retry<240) { retry++; delay_us(1); }; if(retry>=240)return 1; return 0; } //从DS18B20读取一个位 //返回值:1/0 u8 DS18B20_Read_Bit1(void) // read one bit { u8 data; DS18B20_IO_OUT1();//SET PA0 OUTPUT DS18B20_DQ_OUT1=0; delay_us(2); DS18B20_DQ_OUT1=1; DS18B20_IO_IN1();//SET PA0 INPUT delay_us(12); if(DS18B20_DQ_IN1)data=1; else data=0; delay_us(50); return data; } u8 DS18B20_Read_Bit2(void) // read one bit { u8 data; DS18B20_IO_OUT2();//SET PA0 OUTPUT DS18B20_DQ_OUT2=0; delay_us(2); DS18B20_DQ_OUT2=1; DS18B20_IO_IN2();//SET PA0 INPUT delay_us(12); if(DS18B20_DQ_IN2)data=1; else data=0; delay_us(50); return data; } //从DS18B20读取一个字节 //返回值:读到的数据 u8 DS18B20_Read_Byte1(void) // read one byte { u8 i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_Read_Bit1(); dat=(j<<7)|(dat>>1); } return dat; } u8 DS18B20_Read_Byte2(void) // read one byte { u8 i,j,dat; dat=0; for (i=1;i<=8;i++) { j=DS18B20_Read_Bit2(); dat=(j<<7)|(dat>>1); } return dat; } //写一个字节到DS18B20 //dat:要写入的字节 void DS18B20_Write_Byte1(u8 dat) { u8 j; u8 testb; DS18B20_IO_OUT1();//SET PA0 OUTPUT; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT1=0;// Write 1 delay_us(2); DS18B20_DQ_OUT1=1; delay_us(60); } else { DS18B20_DQ_OUT1=0;// Write 0 delay_us(60); DS18B20_DQ_OUT1=1; delay_us(2); } } } void DS18B20_Write_Byte2(u8 dat) { u8 j; u8 testb; DS18B20_IO_OUT2();//SET PA0 OUTPUT; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT2=0;// Write 1 delay_us(2); DS18B20_DQ_OUT2=1; delay_us(60); } else { DS18B20_DQ_OUT2=0;// Write 0 delay_us(60); DS18B20_DQ_OUT2=1; delay_us(2); } } } //开始温度转换 void DS18B20_Start1(void)// ds1820 start convert { DS18B20_Rst1(); DS18B20_Check1(); DS18B20_Write_Byte1(0xcc);// skip rom DS18B20_Write_Byte1(0x44);// convert } void DS18B20_Start2(void)// ds1820 start convert { DS18B20_Rst2(); DS18B20_Check2(); DS18B20_Write_Byte2(0xcc);// skip rom DS18B20_Write_Byte2(0x44);// convert } //初始化DS18B20的IO口 DQ 同时检测DS的存在 //返回1:不存在 //返回0:存在 u8 DS18B20_Init1(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PORTA口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PORTA0 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_3); //输出1 DS18B20_Rst1(); return DS18B20_Check1(); } u8 DS18B20_Init2(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PORTA口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PORTA0 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_5); //输出1 DS18B20_Rst2(); return DS18B20_Check2(); } //从ds18b20得到温度值 //精度:0.1C //返回值:温度值 (-550~1250) float DS18B20_Get_Temp1(void) { u8 temp; u8 TL,TH; short tem; DS18B20_Start1(); // ds1820 start convert DS18B20_Rst1(); DS18B20_Check1(); DS18B20_Write_Byte1(0xcc);// skip rom DS18B20_Write_Byte1(0xbe);// convert TL=DS18B20_Read_Byte1(); // LSB TH=DS18B20_Read_Byte1(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//温度为负 }else temp=1;//温度为正 tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得底八位 tem=(float)tem*0.625;//转换 // if(temp)return tem; //返回温度值 // else return -tem; if(temp)return (float)tem/10.0; //返回温度值 else return -(float)tem/10.0; } float DS18B20_Get_Temp2(void) { u8 temp; u8 TL,TH; short tem; DS18B20_Start2(); // ds1820 start convert DS18B20_Rst2(); DS18B20_Check2(); DS18B20_Write_Byte2(0xcc);// skip rom DS18B20_Write_Byte2(0xbe);// convert TL=DS18B20_Read_Byte2(); // LSB TH=DS18B20_Read_Byte2(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//温度为负 }else temp=1;//温度为正 tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得底八位 tem=(float)tem*0.625;//转换 if(temp)return (float)tem/10.0; //返回温度值 else return -(float)tem/10.0; }
评论
    相关推荐
    • 18b20.rar
      基于单片机stc89c51的温度检测,传感器为18b20
    • DS18B20.rar
      具有DS18B20测温功能,并将结果用显示屏显示出来。
    • 单片机+读取DS18B20序列号
      单片机读取DS18B20序列号,方便多级控制
    • 18B20PROTEUS
      18B20PROTEUS仿真 是一款较老,较优的应用型软件。
    • ds18b20
      DS18B20温度传感器 处理树莓派的DS18B20温度传感器的类和方法。 该文件将成为您的自述文件以及文档的索引。 安装 pip install ds18b20 如何使用 请填写我! 不要忘记代码示例: device = Device(base_dir='...
    • DS18B20-1.0.0.zip
      Temperature sensor ds18b20 code
    • DS18B20程序_2.zip
      DS18B20测温程序,STM32测温,基于STM32F103ZET6,可扩展。
    • 25 DS18B20温度传感器实验.zip
      DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生...
    • ds18b20.rar
      ds18b20开发的资料,详细的有相关的介绍
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路