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

上传人:xmg****18 文档编号:120526999 上传时间:2020-02-07 格式:DOC 页数:14 大小:359KB
返回 下载 相关 举报
基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释_第1页
第1页 / 共14页
基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释_第2页
第2页 / 共14页
基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释_第3页
第3页 / 共14页
基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释_第4页
第4页 / 共14页
基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释》由会员分享,可在线阅读,更多相关《基于51单片机与DS18B20温度传感器的数字温度计程序与详细注释(14页珍藏版)》请在金锄头文库上搜索。

1、. . . . . 基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释). 专业.专注 . . . . .电路实物图如下图所示:C语言程序如下所示:/* zicreate - Copyright (C) -* 程序名; 基于DS18B20的测温系统* 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来* 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限* 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s左右自动* 退出;按一下K3进入查看下限温度模式,显示1s左右自动退出;按一下K4消除* 按键音,再按一下启动按键音。在

2、调节上下限温度模式下,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是上限报警

3、温度,min是下限报警温度bit s=0; /s是调整上下限温度时温度闪烁的标志位,s=0不显示200ms,s=1显示1s左右bit s1=0; /s1标志位用于上下限查看时的显示void display1(uint z); /声明display1()函数#includeds18b20.h /将ds18b20.h头文件包含到主程序#includekeyscan.h /将keyscan.h头文件包含到主程序#includedisplay.h /将display.h头文件包含到主程序/*主函数*/void main() beer=1; /关闭蜂鸣器 led=1; /关闭LED灯 timer1_in

4、it(0); /初始化定时器1(未启动定时器1) get_temperature(1); /首次启动DS18B20获取温度(DS18B20上点后自动将EEPROM中的上下限温度复制到TH和TL寄存器) while(1) /主循环 keyscan(); /按键扫面函数 get_temperature(0); /获取温度函数 keyscan(); /按键扫面函数 display(temp,temp_d*0.625);/显示函数 alarm(); /报警函数 keyscan(); /按键扫面函数 /* 程序名; _ds18b20_h_* 功 能: DS18B20的c51编程头文件 * 编程者:ZPZ

5、* 编程时间: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表示无符号

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

7、度”、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;i0;i-) for(j=120;j0;j-);/*ds18b20初始化函数*/void ds18b20_init() / DS18B20初始化 DQ=1; /拉高数据线DQ=0; /控制器向DS18B20发低电平脉冲ds18b20_delayus(30); /延时480s左右DQ=1; /控制器拉高总线

8、,while(DQ); /等待DS18B20拉低总线ds18b20_delayus(20); /延时,等待上拉电阻拉高总线DQ=1; /拉高数据线,准备数据传输;/*ds18b20字节读函数*/uchar ds18b20_read() /DS18B20 字节读取uchar i;/定义一个局部变量i(局部变量只在本函数中有效)uchar d = 0; /定义一个局部变量dDQ = 1; /准备读;for(i=8;i0;i-) /一位一位的读,循环8次 d = 1; /d左移一位,低位先发;DQ = 0;_nop_();_nop_();_nop_();DQ = 1; /必须写1,否则读出来的将是不

9、预期的数据;if(DQ) /在12us处读取数据,送给d的最高位d |= 0x80;ds18b20_delayus(10); return d; /返回读取的值/*ds18b20字节写函数*/void ds18b20_write(uchar d) / ds18b20字节写 uchar i; for(i=8;i0;i-) /一位一位的写 DQ=0; _nop_(); _nop_();_nop_(); DQ=d&0x01;/写数据 ds18b20_delayus(5); DQ=1;d = 1; /*获取温度函数*/ void get_temperature(bit f)uchar a=0,b=0,

10、c=0,d=0; uint i;ds18b20_init(); /DS18B20初始化ds18b20_write(0xcc);/向DS18B20发跳过读ROM命令ds18b20_write(0x44);/写启动DS18B20进行温度转换命令,转换结果存入内部RAMif(f=1) /首次启动DS18B20进行温度转换需要500ms,若转换时间不够就出错,读出的是85度的错误值。 display1(1);/用开机动画耗时elseds18b20_delayms(1);ds18b20_init(); /DS18B20初始化ds18b20_write(0xcc); /向DS18B20发跳过读ROM命令ds18b20_write(0xbe);/写读内部RAM中9字节的内容命令a=ds18b20_read

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号