P11 温度传感器
DS18B20温度传感器
板载DS18B20传感器规格:(详细可参考资料包中的手册)
参数名称 | 符号 | 工作条件 | 最小值 | 典型值 | 最大值 | 单位 |
供电电压 | VDD | 本地供电 | 3 | — | 5.5 | V |
上拉供电电压 | VPU | 寄生供电本地供电 | 6 | ——— | +5.5VDD | VV |
测温误差 | tERR | -10℃ ~ +85℃-30℃ ~ +100℃-55℃ ~ +125℃ | ——— | ±0.5±1±2 | — | ℃ |
输入低逻辑电平 | VIL | -0.3 | — | 0.8 | V | |
输入高逻辑电平 | VIH | 本地供电寄生供电 | 5.2 | — | 取 5.5 与VDD+0.3两者中的较小值 | V |
灌电流 | IL | 输入输出引脚电压VI/O=0.4V | 4 | — | — | mA |
待机电流 | IDDS | — | 750 | 1000 | nA | |
工作电流 | IDD | VDD=5V | — | 1 | 1.5 | mA |
DQ 引脚输入电流 | IDQ | — | 5 | — | μA | |
温漂 | Drift | — | ±0.2 | — | ℃ |
学习板上的DS18B20传感器:
烧录例程代码后,可以在lcd屏幕上看到温度信息
例程讲解
下面介绍了如何自己实现该例程的功能
DS18B20.C 温度驱动工程包括:
C语言
1unsigned char OneWire_Init(void)2{3unsigned char i;4unsigned char AckBit;5OneWire_DQ=1;6OneWire_DQ=0;7i = 247;while (--i); //Delay 500us8OneWire_DQ=1;9i = 32;while (--i); //Delay 70us10AckBit=OneWire_DQ;11i = 247;while (--i); //Delay 500us12return AckBit;13}14/**15@brief 单总线发送一位16@param Bit 要发送的位17@retval 无18*/19void OneWire_SendBit(unsigned char Bit)20{21unsigned char i;22OneWire_DQ=0;23i = 4;while (--i); //Delay 10us24OneWire_DQ=Bit;25i = 24;while (--i); //Delay 50us26OneWire_DQ=1;27}28/**29@brief 单总线接收一位30@param 无31@retval 读取的位32*/33unsigned char OneWire_ReceiveBit(void)34{35unsigned char i;36unsigned char Bit;37OneWire_DQ=0;38i = 2;while (--i); //Delay 5us39OneWire_DQ=1;40i = 2;while (--i); //Delay 5us41Bit=OneWire_DQ;42i = 24;while (--i); //Delay 50us43return Bit;44}45/**46@brief 单总线发送一个字节47@param Byte 要发送的字节48@retval 无49*/50void OneWire_SendByte(unsigned char Byte)51{52unsigned char i;53for(i=0;i<8;i++)54{55OneWire_SendBit(Byte&(0x01<<i));56}57}58/**59@brief 单总线接收一个字节60@param 无61@retval 接收的一个字节62*/63unsigned char OneWire_ReceiveByte(void)64{65unsigned char i;66unsigned char Byte=0x00;67for(i=0;i<8;i++)68{69if(OneWire_ReceiveBit()){Byte|=(0x01<<i);}70}71return Byte;72}
头文件需要
C语言
1#include <STC89C5xRC.H>2#include "LCD1602.h"3#include "DS18B20.h"4#include "Delay.h"
主要读取和显示逻辑:
C语言
1void main()2{3float T;4LCD_Init();5DS18B20_ConvertT(); //上电先转换一次温度,防止第一次读数据错误6Delay(1000); //等待转换完成7LCD_ShowString(1,1,"Temperature:");8while(1)9{10Delay(1000);11DS18B20_ConvertT(); //转换温度12T=DS18B20_ReadT(); //读取温度13if(T<0) //如果温度小于014{15LCD_ShowChar(2,1,'-'); //显示负号16T=-T; //将温度变为正数17}18else //如果温度大于等于019{20LCD_ShowChar(2,1,'+'); //显示正号21}22LCD_ShowNum(2,2,T,3); //显示温度整数部分23LCD_ShowChar(2,5,'.'); //显示小数点24LCD_ShowNum(2,6,(unsigned long)(T*10000)%10000,4);//显示温度小数部分25}26}
其中转换和读取函数为:
DS18B20_ConvertT(); //转换温度
T=DS18B20_ReadT(); //读取温度
其余为lcd显示功能