实现效果如图:

main.c

#include<string.h>
#include"typedef.h"
#include"lcd1602.h"
#include"ds18b20.h"
uchar str1[]={"Test by Ds18b20."};
uchar str2[11]={"Temp:      "};void main()
{uchar i;lcd1602_init();while(1){DS18B20_Read_Temperature();Temperature_Convert();lcd1602_write_cmd(0x80);for(i=0;i<strlen(str1);i++){lcd1602_write_dat(str1[i]);}lcd1602_write_cmd(0xC0);for(i=0;i<11;i++){lcd1602_write_dat(str2[i]);}}
}

lcd1602.c

#include<reg52.h>
#include"delay.h"
#include"typedef.h"
#include"lcd1602.h"
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
sbit P07=P0^7;
bit lcd1602_read_status()
{uchar temp;RW=1;delay(2);RS=0;delay(2);EN=1;delay(2);temp=P0;delay(2);EN=0;delay(2);return (bit)(temp&0x80);
}void lcd1602_write_cmd(uchar cmd)
{while(lcd1602_read_status()!=0);RW=0;delay(2);RS=0;delay(2);EN=1;delay(2);P0=cmd;delay(2);EN=0;delay(2);
}void lcd1602_write_dat(uchar dat)
{while(lcd1602_read_status()!=0);RW=0;delay(2);RS=1;delay(2);EN=1;delay(2);P0=dat;delay(2);EN=0;delay(2);
}void lcd1602_init()
{lcd1602_write_cmd(0x38);lcd1602_write_cmd(0x0c);lcd1602_write_cmd(0x01);lcd1602_write_cmd(0x06);delay(200);
}
#include<reg52.h>
#include<INTRINS.H>
#include"typedef.h"
#include"delay.h"
#include"ds18b20.h"
sbit DQ=P3^7;
uint tvalue;
uchar tflag;
extern uchar str1[];
extern uchar str2[11];void DS18B20_Reset()
{DQ=1;_nop_();DQ=0;delay(90);DQ=1;while(DQ);while(!DQ);
}void DS18B20_Write_Byte(uchar dat)
{uchar i;for(i=0;i<8;i++){DQ=0;delay(1);DQ=(bit)(dat&0x01);delay(6);DQ=1;delay(1);dat=dat>>1;}
}
unsigned char DS18B20_Read_Byte()
{uchar i,temp=0;for(i=0;i<8;i++){temp=temp>>1;DQ=0;_nop_();_nop_();DQ=1;delay(2);if(DQ)temp=temp|0x80;delay(6);DQ=1;delay(1);}return temp;
}int DS18B20_Read_Temperature()
{uchar temp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0x44);while(!DQ);DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0xbe);temp_low=DS18B20_Read_Byte();temp_high=DS18B20_Read_Byte();DS18B20_Reset();tvalue=temp_high;tvalue=(tvalue<<8)|temp_low;if(tvalue<=0x07ff)tflag=0;else{tvalue=~tvalue+1;tflag=1;}tvalue=tvalue*0.625;return(tvalue);
}void Temperature_Convert()
{str2[6]=(uchar)(tvalue/1000+'0');str2[7]=(uchar)(tvalue%1000/100+'0');str2[8]=(uchar)(tvalue%100/10+'0');str2[9]='.';str2[10]=(uchar)(tvalue%10+'0');if(tflag==0)str2[5]='\0';elsestr2[5]='-';if(str2[6]=='\0'){str2[6]='\0';if(str2[7]=='0'){str2[7]='\0';}}
}

delay.c

#include"typedef.h"
void delay(uint x)
{while(--x);
}

typedef.h

#ifndef _TYPEDEF_H_
#define _TYPEDEF_H_#define uchar unsigned char#define uint unsigned int
#endif

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_extern void delay(unsigned int x);
#endif

ds18b20.h

#ifndef _DS18B20_H_
#define _DS18B20_H_extern void DS18B20_Reset();extern void DS18B20_Write_Byte(uchar dat);extern unsigned char DS18B20_Read_Byte();extern int DS18B20_Read_Temperature();extern void Temperature_Convert();
#endif

lcd1602.h

#ifndef _LCD1602_H_
#define _LCD1602_H_extern bit lcd1602_read_status();extern void lcd1602_write_cmd(uchar cmd);extern void lcd1602_write_dat(uchar dat);extern void lcd1602_init();
#endif

> 单片机读DSI18B20所测得的温度流程

使用单片机读DS18B20所测得的温度的流程:
单片机先向DS18B20发出启动测量命令,DS18B20收到单片机向DS18B20此命令后启动温度测量,并将测量结果保存在RAM的第0、1字节:随后单片向DS18B20发出读命令,DS18B20收到此命令后将RAM的数据从Byte0字节开始逐字节送出,此时单片机接收到的前两个字节内容即为测量所得温度值。

启动温度测量可以细分为以下步骤

(1)复位DS18B20。

(2)单片机向DS18B20发送ROM指令0x55,匹配每个DS18B20独有的64位序列号。不过如果总线上只有一个DS18B20,则不需匹配序列号,写代码时直接写ROM命令0xcc跳过。

(3)单片机向DS18B20发送RAM指令0x44,启动DS18B20进行温度测量。
(4)等待温度测量完成。

读温度步骤可以细分为以下步骤。

(1)复位DS18B20。

匹配每个DSI8B20独有的64位序列

(2)单片机向DS8B820发送ROM指s值配序列号,写代码时直接写ROM的令号。不过如果总线上只有一个DS820则不需匹配序列号,写代码时直接写ROM命令0xcc跳过。
(3)单片机向DS18B20发送读RAM指令0xBE,收到此命令后DS18B20将RAM中的数据从字节0~8,一个一个送出,如果在此过程中要停止读操作,必须对DS1820进行复位。

C51单片机——温度传感器相关推荐

  1. c51单片机万年历模拟,12864LCD屏显示实时温度与时间

    前言 c51单片机万年历模拟期末作品,用到了温度传感模块及12864液晶显示模块及矩阵键盘模块及复位电路,电源模块,晶振模块,可在12864屏上显示实时温度与时间,本人自己做的期末作品,仅供同学们研究 ...

  2. 【C51开发应用】基于C51单片机开发的循迹灭火机器人

    基于C51单片机开发的循迹灭火机器人 一.作品摘要 二.系统设计步骤 三.方案设计 3.1   小车主体设计 3.1.1   购买玩具小车进行改装 3.1.2   自己设计小车主体结构 3.2   电 ...

  3. 智能温度系统(C51+DS18B20温度传感器+LM016L显示屏)

    单片机课程设计,C51+DS18B20温度传感器+LM016L显示屏 重点在于两个外设的时序控制 模块化的设计结构清晰明了 一.题目 温度测量系统的设计 二.要求 1.温度测量范围:-55℃ ~ 12 ...

  4. 二进制转十进制在c51单片机中的问题

    提问:二进制转十进制在c51单片机中的问题在c51中,比如我unsigned int a,来获取当前温度传感器的值,此时我获得的是无符号的二进制,那么我要将次数据,发送给上位机(电脑),但是发送的时候 ...

  5. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  6. C51单片机学习思维导图

    C51单片机学习总结: ​​​​​​​​​​​​​​​​​​ 图片链接 由于原稿丢失,只有图片链接

  7. C51单片机————总线与系统扩展

    C51单片机----总线与系统扩展 Created with Raphaël 2.1.2张三张三李四李四四哥,IO口不够用怎么办?你可以进行系统扩展!什么鬼?那是什么东西?...看书去 1.引文 前面 ...

  8. C51单片机————串行接口

    C51单片机----串行接口 Created with Raphaël 2.1.2张三张三李四李四嘿,四哥,我最近在学习串行接口?想了想!有我啥事嗯!牛逼我有点不懂?哪里不懂哇额! 都不懂... 1. ...

  9. C51单片机————汇编与C语言

    C51单片机-----汇编与C语言 如有错误,请留言指正!!!

最新文章

  1. vue 源码学习(二) 实例初始化和挂载过程
  2. 算法习题---线性表之单链表逆序打印
  3. python2的idle打不开了
  4. SAP Spartacus config-initializer.service.ts get isStable属性失败的调试
  5. php中时差怎么改,我的PHP时差功能可以改进吗?
  6. win7 管理iphone日历_大师给你传授win7系统安装桌面日历的途径
  7. 软考计算机英语考题,《全国计算机软考网管英语试题及答案.doc
  8. python网络编程之黏包问题
  9. java输入年月输出日历_java输入年份打印该年份的年历
  10. java web 调度_javaweb车辆调度信息管理平台
  11. delphi acropdf打印多个pdf_将多个PDF文件整合成一个文件
  12. 接口测试基础——第6篇unittest模块(三)
  13. 最小生成树 无根树转有根树 树形动态规划
  14. 关于 Bandizip 每次解压都催你更新
  15. ESP32开发2——新建项目
  16. mtk智能机平台LCM,CTP的ESD防护处理
  17. OpenVPN 技术支持
  18. 【演武厅】表达式求值实例
  19. java使用循环输出等腰三角
  20. 阿里巴巴2016算法岗实习招聘(西安)在线笔试整理

热门文章

  1. 几种MACD形态的研判
  2. 2009英语一text2
  3. 韩国制造集团选择SQream平台进行异常检测
  4. java后宫选妃文字版
  5. Python爬虫下载音乐
  6. c语言开发tuxedo客户端,Tuxedo-应用开发.doc
  7. 老外用中文告诉你怎么学语言
  8. image 图片生产XPS文件
  9. android吐丝的五种不同的显示
  10. 【M32】单片机 xxx.map 文件简单解读