很久前测试过没问题,应该绝大部分来源于网络,供大家参考,后面会发简单的可以直接拿来用的自己瞎写的一看就明白的ds18b20库

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}sbit DQ = P2^2;
sbit LCD_RS = P3^5;
//sbit LCD_RW = P2^4;
sbit LCD_EN = P3^4;
uchar code Temp_Disp_Title[]={"Current Temp : "};
uchar Current_Temp_Display_Buffer[]={" TEMP:   "};uchar code Temperature_Char[8] =
{0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00
};
uchar code df_Table[]=
{0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
};
uchar CurrentT = 0;
uchar Temp_Value[]={0x00,0x00};
uchar Display_Digit[]={0,0,0,0};
bit DS18B20_IS_OK = 1;void DelayXus(uint x)
{uchar i;while(x--){for(i=0;i<200;i++);}
}
void Write_LCD_Command(uchar cmd)
{LCD_RS = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;
}
void Write_LCD_Data(uchar dat)
{LCD_RS = 1;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;
}
void LCD_Initialise()
{Write_LCD_Command(0x01);DelayXus(5);Write_LCD_Command(0x38);DelayXus(5);Write_LCD_Command(0x0c);DelayXus(5);Write_LCD_Command(0x06);DelayXus(5);
}
void Set_LCD_POS(uchar pos)
{Write_LCD_Command(pos|0x80);
}
void Delay(uint x)
{while(--x);
}
uchar Init_DS18B20()
{uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);DQ = 1;return status;
}
uchar ReadOneByte()
{uchar i,dat=0;DQ = 1;_nop_();for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;}return dat;
}
void WriteOneByte(uchar dat)
{uchar i;for(i=0;i<8;i++){DQ = 0;DQ = dat& 0x01;Delay(5);DQ = 1;dat >>= 1;}
}
void Read_Temperature()
{if(Init_DS18B20()==1)DS18B20_IS_OK=0;else{WriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value[0] = ReadOneByte(); Temp_Value[1] = ReadOneByte();DS18B20_IS_OK=1;   }
}
void Display_Temperature()
{uchar i;uchar t = 150, ng = 0;if((Temp_Value[1]&0xf8)==0xf8){Temp_Value[1] = ~Temp_Value[1];Temp_Value[0] = ~Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;ng = 1;    }Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);Display_Digit[3] = CurrentT/100;Display_Digit[2] = CurrentT%100/10;Display_Digit[1] = CurrentT%10;Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';Current_Temp_Display_Buffer[10] = '.';Current_Temp_Display_Buffer[9]  = Display_Digit[1] + '0';Current_Temp_Display_Buffer[8]  = Display_Digit[2] + '0';Current_Temp_Display_Buffer[7]  = Display_Digit[3] + '0';if(Display_Digit[3] == 0)Current_Temp_Display_Buffer[7]  = ' ';if(Display_Digit[2] == 0&&Display_Digit[3]==0)Current_Temp_Display_Buffer[8]  = ' ';if(ng){if(Current_Temp_Display_Buffer[8]  == ' ')Current_Temp_Display_Buffer[8]  = '-';else if(Current_Temp_Display_Buffer[7]  == ' ')Current_Temp_Display_Buffer[7]  = '-';else Current_Temp_Display_Buffer[6]  = '-';}Set_LCD_POS(0x00);for(i=0;i<16;i++){Write_LCD_Data(Temp_Disp_Title[i]);     }Set_LCD_POS(0x40);for(i=0;i<16;i++){Write_LCD_Data(Current_Temp_Display_Buffer[i]);  }       Set_LCD_POS(0x4d);Write_LCD_Data(0x00);Set_LCD_POS(0x4e);Write_LCD_Data('C');
}
void main()
{LCD_Initialise();Read_Temperature();Delay(50000);Delay(50000);while(1){Read_Temperature();if(DS18B20_IS_OK) Display_Temperature();DelayXus(100);       }
}

51单片机读取DS18b20温度传感器LCD1602显示例程相关推荐

  1. 51单片机读取DS18B20温度传感器

    1.首先我们知道DS18B20是单总线协议,只有一根数据线.所以Data数据线即使发送端又是接收端,同时DS18B20内部接了弱上拉电阻(如图一所示),数据线默认为高电平.有了这些概念,我们就能进行下 ...

  2. 基于51单片机的电子钟万年历LCD1602显示

    本设计是51单片机的电子钟万年历LCD1602显示(proteus仿真+程序+报告+器件清单) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号C0002 ...

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

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

  4. STC15系列读取DS18B20温度传感器串口显示代码

    STC15系列读取DS18B20温度传感器串口显示代码 调试通过,复制粘贴即编译可使用,无需调试,晶振:22.1184M,串口输出,波特率:115200 为方便大家调试,特附该程序的项目文件,下载打开 ...

  5. 【Proteus仿真】51单片机制作简易计算器+ LCD1602显示

    [Proteus仿真]51单片机制作简易计算器+ LCD1602显示 Proteus仿真效果演示 程序代码 #include<reg51.h> //头文件 #define uint uns ...

  6. 基于51单片机驱动ADXL346 (LCD1602显示)

    基于51单片机驱动ADXL346 (LCD1602显示) 一.ADXL346传感器介绍 1.实物图 2.产品说明 3.电气参数 4.通信协议 二.驱动代码 1.引脚定义 2.初始化函数 3.主函数 三 ...

  7. 【Proteus仿真】51单片机+SHT11温湿度传感器+LCD1602显示

    [Proteus仿真]51单片机+SHT11温湿度传感器+LCD1602显示 Proteus仿真 主程序代码 /*-------------------------------SHT11湿度测量 -- ...

  8. 多路测温系统C51语言,51单片机多路DS18B20测温显示并读取序列号

    /********************************************* 功 能:读取序列号并匹配序列号,并读温度值 多功能试验板显示多路温度采集 正常显示2个DS18B20温度 ...

  9. 基于51单片机驱动MPU6050模块(LCD1602显示)

    @TOC 一.简介 MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用IIC接口连接一个第三方的数字传感器.MPU-6050对陀螺仪和加速度计分 ...

最新文章

  1. Windows 8 快捷键大全
  2. 聊聊大麦网UWP版的首页顶部图片联动效果的实现方法
  3. VC++ 给选项卡控件添加不同图标
  4. java基础(十) 深入理解数组类型
  5. python之文件目录和路径
  6. postgresql数据库安装以及使用pgadmin连接postgresql数据库
  7. StringBuffer 和 StringBuilder 的 3 个区别
  8. java 内嵌机制_[转] Java中public,private,final,static等概念的解读
  9. 54. Attribute isId 属性
  10. tensorflow学习笔记1:batch normalization 用法
  11. [CDLinux]安装向导
  12. jenkins打包后文件通过ssh上传linux服务器配置
  13. caj转pdf python_caj2pdf gui程序: 转换 CAJ 为 PDF。佛系转换,成功与否,皆是玄学。...
  14. input number 小数_inputtype=number的小数问题
  15. 3000本英文名著PDF,TXT下载 300 M的文档资料
  16. 打印机修复工具_打印机常见故障排除及修复方法
  17. がいねんとれいさいのにちじょう
  18. 10_Mysql查询
  19. Java面试题2021,智慧树java程序设计答案
  20. 如何重新设置苹果id密码_忘记苹果手机ID密码怎么办?不要着急,只需三招,轻松解决...

热门文章

  1. 正版推荐 - Office 2021 小型企业版商用办公软件
  2. UWB隧道人员定位技术应用,施工作业安全精准保障
  3. Kafka 安装、原理、使用
  4. sqlzoo刷题——SUM and COUNT(聚合函数)
  5. EXCEL函数的错误处理
  6. 用NSKeyedArchiver存储数据(归档)
  7. 历年计算机使用人数变化,历年高考人数和录取率统计-数据可视化
  8. 深入理解 Flutter 框架层次结构
  9. 在jango中添加富文本
  10. EventLog实现事件日志操作