DS18B20温度传感器简介

DS18B20是一种数字温度传感器。它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点。

DS18B20温度传感器特点

1、单线接口:DS18B20仅需一条线可实现与微处理器双向通信。

2、测温范围: DS18B20温度传感器的测温范围可达-55℃~+125℃,在-10℃到+85℃范围内误差为±0.4°。

3、支持多点组网功能:多个DS18B20温度传感器可以并联在一条数据线上,最多可以并联8个,实现多点测温。

4、工作电源: 3.0~5.5V/DC ,DS18B20温度传感器可以采用外部独立电源供电,也可以用数据线寄生电源供电。

5、DS18B20温度传感器在应用过程中不需要任何外围元件。

6、DS18B20测量温度的结果以9~12位数字量方式串行传送。

7、掉电保护功能, DS18B20温度传感器内部含有 EEPROM ,通过配置寄存器可以设定数字转换精度和报警温度。在DS18B20温度传感器掉电以后仍可保存分辨率及报警温度的设定值。

8、DS18B20温度传感器返回16位二进制数代表此刻探测的温度值,其高五位代表正负。如果高五位全部为1,则代表返回的温度值为负值。如果高五位全部为0,则代表返回的温度值为正值。后面的11位数据代表温度的绝对值,将其转换为十进制数值之后,再乘以0.0625即可获得此时的温度值。

DS18B20温度传感器引脚说明

DS18B20温度传感器接口电路

液晶1602接口电路

DS18B20测量温度程序源代码

/***************DS18B20测量温度,用1602显示温度值***************

* 单片机:51单片机

* 开发环境:keil

* 功能: DS18B20测量温度,并在LCD1602中显示出来

**********************************************************************/

#include <reg51.h>

#define LCD_Data P0

#define Busy 0x80

#define uchar unsigned char

#define uint unsigned int

uchar code table0[] = {" SL-51A "};

uchar code table1[] = {" TEMP: XX.X "};

uchar temperature[5]; //温度值

uint temp;

sbit LCD_RS = P1^0;

sbit LCD_RW = P1^1;

sbit LCD_E = P2^5;

sbit DS = P2^2;

void Delay5Ms(void);

void delay(uint count);

void WriteDataLCD(unsigned char WDLCD);

void WriteCommandLCD(unsigned char WCLCD,BuysC);

unsigned char ReadDataLCD(void);

unsigned char ReadStatusLCD(void);

void LCDInit(void);

void DisplayOneChar(unsigned char X, unsigned charY, unsigned char DData);

void DisplayListChar(unsigned char X, unsignedchar Y, unsigned char code *DData);

void Info_display(void);

void dsreset(void);

bit tmpreadbit(void);

uchar tmpread(void);

void tmpwritebyte(uchar dat);

void tmpchange(void);

uint tmp();

void delay(uint count)

{

uint i;

while(count)

{i=200;while(i>0)i--;count--;}

}

void dsreset(void) //发复位命令

{

uint i;

DS=0;i=103;while(i>0)i--;

DS=1;i=4;while(i>0)i--;

}

bit tmpreadbit(void) //读取一位

{

uint i;

bit dat;

DS=0;i++;

DS=1;i++;i++;

dat=DS;

i=8;while(i>0)i--;

return(dat);

}

uchar tmpread(void) //读取一个字节

{

uchari,j,dat;

dat=0;

for(i=1;i<=8;i++)

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面

}

return(dat);

}

void tmpwritebyte(uchar dat) //向ds18b20写入一个字节

{

uint i;

uchar j;

bit testb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

DS=0;i++;i++;

DS=1;i=8;while(i>0)i--;

}

else

{

DS=0;i=8;while(i>0)i--;

DS=1;i++;i++;

}

}

}

void tmpchange(void) //DS18B20开始转换

{

dsreset();delay(1);

tmpwritebyte(0xcc); //命令的含义可以查18b20的手册

tmpwritebyte(0x44);

}

uint tmp() //获取温度值

{

float tt;

uchar a,b;

dsreset();delay(1);

tmpwritebyte(0xcc);

tmpwritebyte(0xbe);

a=tmpread();

b=tmpread();

temp=b;

temp<<=8;

temp=temp|a;

tt=temp*0.0625;

temp=tt*10+0.5;

returntemp;

}

/*************************5ms延时函数***************************/

void Delay5Ms(void)

{

unsignedint TempCyc = 3552;

while(TempCyc--);

}

/**************************写数据函数***************************/

void WriteDataLCD(unsigned char WDLCD)

{

ReadStatusLCD(); //检测忙

LCD_Data =WDLCD;

LCD_E = 0; //若晶振速度太高可以在这后加小的延时

LCD_E = 0; //延时

LCD_RS = 1;

LCD_RW = 0;

LCD_E = 1;

LCD_E = 0;

}

/*************************写指令函数****************************/

void WriteCommandLCD(unsigned charWCLCD,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC)ReadStatusLCD(); //根据需要检测忙

LCD_Data =WCLCD;

LCD_E = 0;

LCD_E = 0;

LCD_RS = 0;

LCD_RW = 0;

LCD_E = 1;

LCD_E = 0;

}

/**************************读状态函数***************************/

unsigned char ReadStatusLCD(void)

{

LCD_Data =0xFF;

LCD_RS = 0;

LCD_RW = 1;

LCD_E = 0;

LCD_E = 0;

LCD_E = 1;

while(LCD_Data & Busy); //检测忙信号

return(LCD_Data);

}

/***************************LCD初始化***************************/

void LCDInit(void) //LCD初始化

{

LCD_Data =0;

WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCD(0x38,0);

Delay5Ms();

WriteCommandLCD(0x38,0);

Delay5Ms();

WriteCommandLCD(0x38,1); //显示模式设置, 开始要求每次检测忙信号

WriteCommandLCD(0x08,1); //关闭显示

WriteCommandLCD(0x01,1); //显示清屏

WriteCommandLCD(0x06,1); //显示光标移动设置

WriteCommandLCD(0x0C,1); //显示开及光标设置

}

/**********************按指定位置显示一个字符*********************/

void DisplayOneChar(unsigned char X, unsigned charY, unsigned char DData)

{

Y &=0x1;

X &=0xF; //限制X不能大于15,Y不能大于1

if (Y) X |=0x40; //当要显示第二行时地址码+0x40;

X |=0x80; //算出指令码

WriteCommandLCD(X,0); //这里不检测忙信号,发送地址码

WriteDataLCD(DData);

}

/***********************按指定位置显示一串字符********************/

void DisplayListChar(unsigned char X, unsignedchar Y, unsigned char code *DData)

{

unsignedchar ListLength;

ListLength= 0;

Y &=0x1;

X &=0xF; //限制X不能大于15,Y不能大于1

while(DData[ListLength]>=0x20) //若到达字串尾则退出

{

if (X<= 0xF) //X坐标应小于0xF

{

DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符

ListLength++;

X++;

}

}

}

/*****************************************************************/

void temp_display(unsigned int temp) //显示程序

{

unsignedchar A1,A2,A2t,A3;

A1=temp/100; //百位

A2t=temp%100;

A2=A2t/10; //十位

A3=A2t%10; //个位

temperature[1]=A1 + 0x30;

temperature[2]=A2 + 0x30;

temperature[3]=A3 + 0x30;

DisplayOneChar(9,1,temperature[1]);

DisplayOneChar(10,1,temperature[2]);

DisplayOneChar(12,1,temperature[3]);

}

/******************************************************************/

void init()

{

LCDInit();

DisplayListChar(0,0,table0);

DisplayListChar(0,1,table1);

}

void main()

{

int i;

init();

while(1)

{

tmpchange();

for(i=0;i<=10;i++)

{if(i==10){temp_display(tmp());}}

}

}

DS18B20测量温度液晶1602显示相关推荐

  1. DS18B20测量温度数码管显示

    DS18B20温度传感器简介 DS18B20是一种数字温度传感器.它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点. DS18B20温度传感器特点 1.单线接口:DS18 ...

  2. 18b20温度检测及其lcd显示_单片机使用DS18B20测量温度的程序

    \ 单片机使用DS18B20测量温度的程序 //main.c #include #include #include "18B20.h" #include"disp.h&q ...

  3. ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。

    ATMEGA16单片机读取DS18B20的温度数据,用lcd1602显示,并用proteus实现仿真. 实现温度的实时读取,程序中设定温度的上下限,当温度超限时报警,用led小灯进行 指示. 开发环境 ...

  4. DS18B20测量温度

    文章目录 一.DS18B20读取温度步骤 二.初始化复位时序 2.发送一个字节 二.读取数据 1.读取一个Bit 2.读取一个字节 三.启动温度转换 四.判断转换完成 五.读取温度 程序地址 一.DS ...

  5. c51单片机c语言显示矩形波,51单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序...

    显示频率,幅度可调,可产生四种波形,正弦波,方波,锯齿波,三角波,希望你能喜欢,给你发了一张效果图,喜欢的话别忘了采纳我的回答啊 #include #define uchar unsigned cha ...

  6. 51单片机驱动DS18B20温度传感器测量温度

    51单片机驱动DS18B20温度传感器测量温度 1.DS18B20温度传感器介绍: 2.51单片机驱动DS18B20测量温度 1.DS18B20温度传感器介绍: ①引脚定义 引脚 符号 说明 1 GN ...

  7. 51单片机使用LCD1602显示DS18B20温度传感器温度

      使用LCD1602显示DS18B20温度传感器温度.关于DS18B20和LCD的原理,我就不再叙述了,大家自行查找,网上可以找到好多.   使用Proteus仿真.(需要仿真和Keil工程文件的可 ...

  8. ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...

    DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示) 程序一:单个读序列号.程序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可.本程序所有 ...

  9. DS18B20温度转换与显示

    单片机练习 - DS18B20温度转换与显示 最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序. DS18B20 数字温度传感器 ...

最新文章

  1. 关于mysql字符集及导入导出
  2. 深度学习已经彻底改变了制造业的质量控制,但还不够深入
  3. RHEL7 timedatectl命令
  4. 网络入侵检测规避工具fragrouter
  5. VideoTool之FFmpeg:FFmpeg的简介、安装、使用方法之详细攻略
  6. [转] Vuex入门(2)—— state,mapState,...mapState对象展开符详解
  7. 解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas
  8. PAT 1048 数字加密
  9. JS高级——内存管理和闭包
  10. 监听浏览器返回上一页
  11. android 类的设计,Android App的类响应式设计
  12. 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
  13. linux怎么看系统盘,Linux系统怎么查看电脑的磁盘空间?
  14. 关于合格工程师素养的一些思考
  15. timesten mysql_timesten内存数据同步创建
  16. java groovy 乱码_解决Groovy复制文件的乱码
  17. 人人看得懂的ChatGPT技术原理解析
  18. 利用C#2005为你的软件制作小精灵
  19. make出错,编译通不过的解决办法
  20. android计算bmi的程序,简单的基于android的BMI计算应用

热门文章

  1. UT-Exynos4412 三星ARM四核旗舰开发平台android4.0体验-13串口功能调试
  2. 软件工程之制定计划①(可行性研究报告、项目开发计划)
  3. 美团2018测开编程题——改卷子魔法表
  4. 【JavaScript实现十进制转换成二进制】
  5. 计算机毕业优秀作品展观后感,毕业展观后感
  6. carsim与simulink联合仿真-ABS(制动防抱死系统) 入门——详细步骤
  7. 使用hMailServer搭建邮件服务器(windows邮件服务器)
  8. C语言——PTA 用格里高利公式求给定精度的PI值
  9. 小老弟linux进击之路(一)
  10. 怎样做中长线股票,中长线炒股技巧有哪些?