一、基础介绍

时序介绍就暂不介绍,可以网上搜集资料

二、proteus仿真图

三、程序代码

#include<reg51.h>
#include"temp.h"#define duanxuan P1        //段选端口
#define weixuan P2         //位选端口unsigned char code wxcode[4]={0x01,0x02,0x04,0x08};
unsigned char code dxcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit DSPORT=P3^7;
int temp;void DigDisplay(int);/******************/
void Delay1ms(unsigned int y)
{unsigned int x;for(y;y>0;y--)for(x=110;x>0;x--);
}
/*******************************************************************************
* 函数名         : Ds18b20Init
* 函数功能         : 初始化
* 输入           : 无
* 输出             : 初始化成功返回1,失败返回0
*******************************************************************************/unsigned char Ds18b20Init()
{unsigned int i;DSPORT=0;           //将总线拉低480us~960usi=70;   while(i--);//延时642usDSPORT=1;          //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低i=0;while(DSPORT)    //等待DS18B20拉低总线{i++;if(i>5000)//等待>5MSreturn 0;//初始化失败  }return 1;//初始化成功
}/*******************************************************************************
* 函数名         : Ds18b20WriteByte
* 函数功能         : 向18B20写入一个字节
* 输入           : com
* 输出             : 无
*******************************************************************************/void Ds18b20WriteByte(unsigned char dat)
{unsigned int i,j;for(j=0;j<8;j++){DSPORT=0;         //每写入一位数据之前先把总线拉低1usi++;DSPORT=dat&0x01; //然后写入一个数据,从最低位开始i=6;while(i--); //延时68us,持续时间最少60usDSPORT=1;   //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值dat>>=1;DigDisplay(temp);}
}
/*******************************************************************************
* 函数名         : Ds18b20ReadByte
* 函数功能         : 读取一个字节
* 输入           : com
* 输出             : 无
*******************************************************************************/unsigned char Ds18b20ReadByte()
{unsigned char byte,bi;unsigned int i,j;    for(j=8;j>0;j--){DSPORT=0;//先将总线拉低1usi++;DSPORT=1;//然后释放总线i++;i++;//延时6us等待数据稳定bi=DSPORT;   //读取数据,从最低位开始读取/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/byte=(byte>>1)|(bi<<7);                         i=4;     //读取完之后等待48us再接着读取下一个数while(i--);DigDisplay(temp);}             return byte;
}
/*******************************************************************************
* 函数名         : Ds18b20ChangTemp
* 函数功能         : 让18b20开始转换温度
* 输入           : com
* 输出             : 无
*******************************************************************************/void  Ds18b20ChangTemp()
{int i = 50;Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);      //跳过ROM操作命令      Ds18b20WriteByte(0x44);      //温度转换命令while(i != 0){i--;DigDisplay(temp);}
//  Delay1ms(100);
}
/*******************************************************************************
* 函数名         : Ds18b20ReadTempCom
* 函数功能         : 发送读取温度命令
* 输入           : com
* 输出             : 无
*******************************************************************************/void  Ds18b20ReadTempCom()
{   Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);    //跳过ROM操作命令Ds18b20WriteByte(0xbe);  //发送读取温度命令
}
/*******************************************************************************
* 函数名         : Ds18b20ReadTemp
* 函数功能         : 读取温度
* 输入           : com
* 输出             : 无
*******************************************************************************/int Ds18b20ReadTemp()
{int temp=0;unsigned char tmh,tml;Ds18b20ChangTemp();              //先写入转换命令Ds18b20ReadTempCom();          //然后等待转换完后发送读取温度命令tml=Ds18b20ReadByte();       //读取温度值共16位,先读低字节tmh=Ds18b20ReadByte();     //再读高字节temp=tmh;temp<<=8;temp|=tml;return temp;
}
/******************/void main()
{int tp;int i= 0;while(1){temp = Ds18b20ReadTemp();if(temp < 0)                {temp=temp-1;temp=~temp;tp=temp;temp=tp*0.0625*100+0.5;}else{          tp=temp;temp=tp*0.0625*100+0.5;  }DigDisplay(temp);}
}void DigDisplay(int temp)   //数码管显示
{int bai;int shi;int ge;int yi;unsigned char i;unsigned int j;bai = temp / 10000;shi = temp % 10000 / 1000;ge = temp % 1000 / 100;yi = temp % 100 / 10;for(i=0; i<5; i++){weixuan = wxcode[i];duanxuan = 0xff;if(i == 0){duanxuan = dxcode[bai];}if(i == 1){duanxuan = dxcode[shi];}if(i == 2){//duanxuan = dxcode[ge]|0x00;duanxuan = dxcode[ge]&0x7f;}if(i == 3){duanxuan = dxcode[yi];}j=10;while(j--);duanxuan=0xff;}
}

基于51单片机的DS18B20测温程序与仿真图相关推荐

  1. 基于51单片机的红外测温智能空调

    设计简介: 本设计是基于单片机的红外测温智能空调控制器设计,主要实现以下功能: 可实现LCD1602显示温度的示数和空调开关: 可实现通过按键可以设置温度的最大值以及最小值: 可实现通过红外遥控控制空 ...

  2. 基于51单片机的秒表系统设计(源代码+Proteus仿真图)

    目录 总体设计 晶体震荡电路 复位电路 按键控制电路 LCD1602显示电路 蜂鸣器电路 Proteus仿真图调试结果 源代码: Proteus仿真提取链接 总体设计 本设计是采用AT89C51单片机 ...

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

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

  4. protues里报警c语言程序,基于51单片机的智能火灾报警系统-(Proteus仿真图+源程序+论文)...

    摘要 近些年来,因火灾造成的人民生命和财产损失的事件时有发生,对于火灾的防控情况不容乐观.除了对于火灾隐患的排查和人们防灾减灾意识提升之外,利用科技手段对火灾进行实时监控报警十分必要而且非常有效.国内 ...

  5. 基于51单片机自动数字电压表PCF8591 TLC2543 TL548 proteus仿真汇编程序设计

    硬件设计1 基于51单片机+PCF8591 ADC的仿真电路图: A. 基于51单片机和PCF8591的电压表,具有仿真图/源程序: B. 由数码管作为显示器: C.测试电压范围为0~5V,精度约为0 ...

  6. 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc

    基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...

  7. 基于51单片机的DS18B20温度控制加热降温系统设计

    基于51单片机的DS18B20温度控制加热降温系统设计 1 开发环境 2 功能说明介绍 3 仿真图 4 程序 5 原理图 6 视频讲解 7 设计报告 7.1 设计目的 7.2 概述 7.3 国内外研究 ...

  8. 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc

    基于51单片机C语言数字钟程序 基于51单片机C语言数字钟程序 数字电子钟的设计 一. 绪论 (一)引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地 ...

  9. 简易电子钟c语言程序,(最新整理)基于51单片机的电子钟C语言程序

    <(最新整理)基于51单片机的电子钟C语言程序>由会员分享,可在线阅读,更多相关<(最新整理)基于51单片机的电子钟C语言程序(9页珍藏版)>请在人人文库网上搜索. 1.完整) ...

最新文章

  1. Python中的变量作用域
  2. 资源论文非系统论文,NLP 圈同行评审存在的六大固化误区!
  3. 00029_引用数据类型
  4. 如何建立软件测试管理体系?
  5. 原理简介_消息通信的利器MQTT协议简介及协议原理
  6. SPGridview的使用
  7. 三星折叠屏手机出事!才用两天就“挂了”
  8. 大数据应用需要注意什么问题
  9. IP多播技术[为软件高校杯做准备]
  10. Linux串口驱动(8250)的编写与调试
  11. pagefile文件大小设置
  12. linux百度云下载脚本,百度网盘Linux版下载
  13. java poi 实现word文档分栏遇到的坑
  14. Camera 360应用隐私数据泄露的分析
  15. 关于深度学习优化器 optimizer 的选择,你需要了解这些
  16. 2021年全球住宅电梯收入大约1534.2百万美元,预计2028年达到1957.3百万美元
  17. Redis zset 底层数据结构之跳表
  18. Mybatis-plus的Service
  19. SystemVerilog学习笔记(可综合的部分)(一)
  20. UE4 后期处理体积 (角色受到伤害场景颜色变淡案例)

热门文章

  1. 虹软-人脸识别SDK的使用
  2. 水果FL studio20.8中文汉化翻译语言
  3. HARDENING SALT - SaltStack安全加固措施介绍
  4. C++ 遍历循环语句 for(auto i:) 和 for_each()
  5. 用友畅捷通文吉:如何通过智能运维提升稳定性保障
  6. 快手上市!成中国互联网第五大公司,宅男工程师创造奇迹
  7. 使用keil,proteus,虚拟串口,完成蓝牙通信
  8. C语言经典——闰年问题
  9. 饿了么的定位android,外卖订餐服务“饿了么”Android版应用正式上线,未来或可对每个外卖员进行位置跟踪...
  10. python wifi探针_【逗老师带你学IT】PRTG监控系统配合树莓派采集企业内部无线网络质量...