第一范文网 - 专业文章范例文档资料分享平台

基于51单片机及DS18B20温度传感器的数字温度计程序及详细注释

来源:用户分享 时间:2025/9/27 18:59:55 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示:

C语言程序如下所示:

/******************************************************************** zicreate

----------------------------- Copyright (C) www.zicreate.com -------------------------- * 程序名; 基于DS18B20的测温系统

* 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason

* 编程时间:2009/10/2

*********************************************************************/ #include //将AT89X52.h头文件包含到主程序 #include //将intrins.h头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位) uchar max=0x00,min=0x00; //max是上限报警温度,min是下限报警温度 bit s=0; //s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include\ //将ds18b20.h头文件包含到主程序 #include\ //将keyscan.h头文件包含到主程序 #include\ //将display.h头文件包含到主程序 /***********************主函数************************/ void main() {

beer=1; //关闭蜂鸣器 led=1; //关闭LED灯 timer1_init(0); //初始化定时器1(未启动定时器1) get_temperature(1); //首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的上下限温度复制到TH和TL寄存器) while(1) //主循环

{

} }

/******************************************************************** * 程序名; __ds18b20_h__

* 功 能: DS18B20的c51编程头文件 * 编程者:ZPZ

* 编程时间:2009/10/2

* 说 明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d * (测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表 * 示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表 * 示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表 * 示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。 *********************************************************************/ #ifndef __ds18b20_h__ //定义头文件 #define __ds18b20_h__

#define uint unsigned int //变量类型宏定义,用uint表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar表示无符号字符型(8位) sbit DQ= P2^3; //可位寻址变量定义,用DQ表示P2.3口 sbit beer=P1^0; //用beer表示P1.0 sbit led=P1^1; //用led表示P1.1 uchar temp=0; //测量温度的整数部分 uchar temp_d=0; //测量温度的小数部 bit f=0; //测量温度的标志位,0’表示“正温度”‘1’表示“负温度”) bit f_max=0; //上限温度的标志位‘0’表示“正温度”‘1’表示“负温度”) bit f_min=0; //下限温度的标志位‘0’表示“正温度”、‘1’表示“负温度”) bit w=0; //报警标志位‘1’启动报警‘0’关闭报警)

/*****************************延时子函数******************************/ void ds18b20_delayus(uint t) //延时几μs { while(t--);}

void ds18b20_delayms(uint t) //延时1ms左右 { uint i,j; for(i=t;i>0;i--) for(j=120;j>0;j--);}

/**************************ds18b20初始化函数*************************/ void ds18b20_init() // DS18B20初始化 { DQ=1; //拉高数据线 DQ=0; //控制器向DS18B20发低电平脉冲 ds18b20_delayus(30); //延时480μs左右 DQ=1; //控制器拉高总线, while(DQ); //等待DS18B20拉低总线 ds18b20_delayus(20); //延时,等待上拉电阻拉高总线 DQ=1; //拉高数据线,准备数据传输; }

/***************************ds18b20字节读函数************************/ uchar ds18b20_read() //DS18B20 字节读取 { uchar i; //定义一个局部变量i(局部变量只在本函数中有效) uchar d = 0; //定义一个局部变量d DQ = 1; //准备读; for(i=8;i>0;i--) //一位一位的读,循环8次 { d >>= 1; //d左移一位,低位先发; DQ = 0; _nop_();_nop_();_nop_(); DQ = 1; //必须写1,否则读出来的将是不预期的数据;

keyscan(); //按键扫面函数 get_temperature(0); //获取温度函数 keyscan(); //按键扫面函数 display(temp,temp_d*0.625);//显示函数 alarm(); //报警函数 keyscan(); //按键扫面函数

基于51单片机及DS18B20温度传感器的数字温度计程序及详细注释.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c15svu21b1n1xep036fj71ujtp7zqyg019ld_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top