官方商店:见评论区

液体温度传感器 YTWD-A1 - 图1

一、简介

液体温度传感器YTWD-A1能够探测液体温度。温度探头采用不锈钢封装,能够防水、防潮和防锈。

二、技术参数

  • 温度测量范围:-55~+125℃
  • 温度测量精度:0.5℃
  • 分辨率调整范围:9~12位
  • 主芯片:DS18b20
  • 工作电压:3.0~5.5v
  • 线长:1m

    三、引脚说明

  • 红色线(VCC):外接3.3~5v供电电源

  • 黑色线(GND):地线,电源负极
  • 黄色线(DATA):数据输出

    四、使用说明

    红色线(VCC)与黑色线(GND)分别与电源正极和负极连接,黄色线(DATA)与单片机的GPIO连接。

    五、参考代码

  1. #include <reg52.h>
  2. #include<math.h>
  3. #include <stdio.h>
  4. #include<intrins.h>
  5. void delay(unsigned int i);
  6. void delay1ms(unsigned int i);
  7. void ReadTemperature(void);
  8. void Init_DS18B20(void);
  9. ReadOneChar();
  10. void WriteOneChar(unsigned char dat);
  11. /* 变量定义 -----------------------------------------------*/
  12. sbit DQ=P3^6; //数据传输线接单片机的相应的引脚
  13. unsigned char tempL=0; //设全局变量
  14. unsigned char tempH=0;
  15. unsigned int sdate;//测量到的温度的整数部分
  16. unsigned char xiaoshu1;//小数第一位
  17. unsigned char xiaoshu2;//小数第二位
  18. unsigned char xiaoshu;//两位小数
  19. bit fg=1; //温度正负标志
  20. unsigned char date;
  21. /*
  22. ********************************************************************************
  23. ** 函数名称 : delay(unsigned char i)
  24. ** 函数功能 : 延时函数 这个延时程序的具体延时时间是time=i*8+10,适用于小于2ms的延时
  25. ********************************************************************************
  26. */
  27. void delay(unsigned int i)
  28. {
  29. while(i--);
  30. }
  31. /*
  32. ********************************************************************************
  33. ** 函数名称 : delay1ms(unsigned char i)
  34. ** 函数功能 : 延时函数
  35. ********************************************************************************
  36. */
  37. void delay1ms(unsigned int i)
  38. {
  39. for(i=124;i>0;i--); //延时124*8+10=1002us
  40. }
  41. /*
  42. ********************************************************************************
  43. ** 函数名称 : Init_DS18B20(void)
  44. ** 函数功能 : 初始化
  45. ********************************************************************************
  46. */
  47. void Init_DS18B20(void)
  48. {
  49. unsigned char x=0;
  50. DQ=1; //DQ先置高
  51. delay(8); //稍延时
  52. DQ=0; //发送复位脉冲
  53. delay(80); //延时(>480us)
  54. DQ=1; //拉高数据线
  55. delay(5); //等待(15~60us)
  56. x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1
  57. delay(20);
  58. }
  59. /*
  60. ********************************************************************************
  61. ** 函数名称 : ReadOneChar()
  62. ** 函数功能 : 读一个字节
  63. ********************************************************************************
  64. */
  65. ReadOneChar() //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
  66. {
  67. unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
  68. unsigned char dat=0;
  69. for (i=8;i>0;i--) //一个字节有8位
  70. {
  71. DQ=1;
  72. delay(1);
  73. DQ=0;
  74. dat>>=1;
  75. DQ=1;
  76. if(DQ)
  77. dat|=0x80;
  78. delay(4);
  79. }
  80. return(dat);
  81. }
  82. /*
  83. ********************************************************************************
  84. ** 函数名称 : WriteOneChar(unsigned char dat)
  85. ** 函数功能 : 写一个字节
  86. ********************************************************************************
  87. */
  88. void WriteOneChar(unsigned char dat)
  89. {
  90. unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
  91. for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
  92. {
  93. DQ=0; //在开始另一个写周期前必须有1us以上的高电平恢复期。
  94. DQ=dat&0x01;
  95. delay(5);
  96. DQ=1;
  97. dat>>=1;
  98. }
  99. delay(4);
  100. }
  101. /*
  102. ********************************************************************************
  103. ** 函数名称 : ReadTemperature(void)
  104. ** 函数功能 : 读温度值(低位放tempL;高位放tempH;)
  105. ********************************************************************************
  106. */
  107. void ReadTemperature(void)
  108. {
  109. Init_DS18B20(); //初始化
  110. WriteOneChar(0xcc); //跳过读序列号的操作
  111. WriteOneChar(0x44); //启动温度转换
  112. delay(125); //转换需要一点时间,延时
  113. Init_DS18B20(); //初始化
  114. WriteOneChar(0xcc); //跳过读序列号的操作
  115. WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
  116. tempL=ReadOneChar(); //读出温度的低位LSB
  117. tempH=ReadOneChar(); //读出温度的高位MSB
  118. if(tempH>0x7f) //最高位为1时温度是负
  119. {
  120. tempL=~tempL; //补码转换,取反加一
  121. tempH=~tempH+1;
  122. fg=0; //读取温度为负时fg=0
  123. }
  124. sdate = tempL/16+tempH*16; //整数部分
  125. xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
  126. xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
  127. xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
  128. }
  129. main()
  130. {
  131. while(1)
  132. {
  133. ReadTemperature();
  134. }
  135. }

联系我们

  • 如需选购Matter、ZigBee、433/868、LoRa、2.4G、WiFi等物联网模块或IoT设备定制开发,联系方式:见评论区。
  • IoT低代码开发平台:见评论区。