云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于51单片机及DS18B20温度传感器的数字温度计程序及详细注释

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

  • 62 次阅读
  • 3 次下载
  • 2025/5/6 3:39:22

基于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(); //按键扫面函数

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释) 电路实物图如下图所示: C语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) www.zicre

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com