单片机 温度计DS18B20.doc

上传人:hs****ma 文档编号:560320020 上传时间:2024-01-06 格式:DOC 页数:20 大小:789.31KB
返回 下载 相关 举报
单片机 温度计DS18B20.doc_第1页
第1页 / 共20页
单片机 温度计DS18B20.doc_第2页
第2页 / 共20页
单片机 温度计DS18B20.doc_第3页
第3页 / 共20页
单片机 温度计DS18B20.doc_第4页
第4页 / 共20页
单片机 温度计DS18B20.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《单片机 温度计DS18B20.doc》由会员分享,可在线阅读,更多相关《单片机 温度计DS18B20.doc(20页珍藏版)》请在金锄头文库上搜索。

1、单片机课程设计论文 基于18B20温度检测系统设计一、 引言 温度是工农业生产中最常见的参数之一,与产品的质量、生产效率、安全生产等密切相关,因此在生产过程中需对温度进行检测和监控。然而,传统的测温系统多以二极管、Pt100 及AD590 作为温度检测单元, 通过信号处理电路将待测温度的变化转换为电信号的变化,从而实现温度的测量。伴随着微电子技术的发展,利用单线总线实现信号双向传输的数字温度传感器的出现,改变了传统测量温度的方法。 该设计系统主要由STC89C52 单片机、数字温度传感器DS18B20 及液晶显示器12864三大部分组成。在此系统中,DS18B20 是美国生产的低功耗、高性能、

2、抗干扰能力强的单总线数字温度传感器芯片,具有可编程的温度转换分辨率,可根据应用需要在9 12bit 之间选取,且测温范围为:-55125。作为温度采集单元的DS18B20,采用外部电源供电方式,与STC89C2单片机进行双向通信,无需A/D ,就可以直接将被测温度转换为数字信号供单片机进行处理, 最终将换算得到的测量温度值显示在液晶显示器上。二、 实验器材 电源+5V、万用表、电烙铁器件名称大小(型号)数量DS18B201STC89C52140脚锁紧插座1LCD128641电位器10K1杜邦线、排座若干三、电路设计分析(一) 、硬件电路1、数字温度传感器18b20与单片机硬件连线DS18b20

3、与89C52连线 VDD接外部电源,DQ(I/O)口与单片机P1.1串口连接,同时接4.7K上拉电阻接电源,GND接地。 下图为所用DS18B20的封装,它是独特的单线接口方式,在与89c52连接时仅需要一条口线即可实现双向通讯,无需外部元件 。电压范围为3.0 V至5.5 V ,无需备用电源, 测量温度范围为-55至+125 。温度传感器可编程的分辨率为912位, 温度转换为12位数字格式,最大值为750毫秒 。DS18B20内部结构主要由四部分组成:64位光刻ROM,温度报警触发器,温度传感器以及高速缓存器。此外,DS18B20内部还包括寄生电源、电源检测、存储控制逻辑、8位循环冗余码生成

4、器(CRC)等部分。内部结构为: 若是要使采集的数据分辨率越高,则所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。DS18B20的测温原理如下图所示:减法计数器1斜坡累加器减到0减法计数器2预 置低温度系数振 荡 器高温度系数振 荡 器计数比较器预 置温度寄存器减到0加12、 LCD12864与单片机的硬件连线 LCD16824液晶1脚VSS接地,2脚VDD接电源,3脚V0接10K滑动变阻器调节对比度,4脚RS接单片机P1.4口,5脚RW脚接单片机P1.3口,6脚EN接单片机P1.2口,714脚DB口接单片机P2口,15脚PSB接高电平,默认为并行串口方式,161

5、8脚NCRSTVOUT悬空默认低电平,19脚A默认高电平,接高电平,液晶背景光为亮,20脚K接地。带中文字库的12864是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。它每屏最多可实现4行*8=32个中文字符或64个ASCII码字符的显示,内部提供1282字节的字符显示RAM缓冲区(DDRAM),字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写

6、入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。同时它可以先设垂直地址再设水平地址方式显示图形,功能比1602更好。3、单片机复位和振荡电路连线A、复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表一所示。表一 一些寄存器的复位状态寄存器复位状态寄存器复位状态PC0000HTCON00HACC

7、00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3FFHSCON00HIPXX000000BSBUF不定IE0X000000BPCON0XXX0000BTMOD00HRST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。B、时钟电路相当于微机处理器的脉搏,单片机内部有一个高增益反相放大器,反相放大端输入为XTAL1,输出为XTAL2,在XTAL1和XTAL2两端跨接石英晶体及微调电容就构成了振荡器。我们用了11.0592M的晶振,则振荡周期为T0=1/11.0592us,时钟周期为2T0,

8、机器周期为12T0.(二) 、 软件设计 1、18b20驱动时序#include#include #define uchar unsigned char#define uint unsigned intsbit dq=P11;uint t,s;uchar flag,count;void delayus(uint z) /ds18b20内部延时uchar i;for(i=0;iz;i+);/ds18b20复位,及存在检测/uchar ds18b20_reset()uchar k;dq=1; /释放总线delayus(5); /延时5usdq=0; /拉低总线delayus(30);dq=1; /

9、释放总线delayus(3);k=dq; / 对数据较采样delayus(25);return k; /根据K值判断da18b20是否损坏/写数据到ds18b20/void ds18b20_writedate(uchar date) uchar num;for(num=0;num=1; / 准备下一位数据传送delayus(4); /延时4usdq=1; / 释放总线,等待总线恢复delayus(4);/从ds18b20中读数据/uchar ds18b20_readdate()uchar value,i;for(i=0;i=1; / 准备读温度 delayus(4);dq=1; /释放总线,准

10、备读数据if(dq) / 读数据value|=0x80;delayus(6); / 延时return value; /返回独到的数据/ds18b20初始化以及数据处理/uint read_temp()uint g,d,m;uint c;m=1;m=ds18b20_reset();/复位检测ds18b20正常工作,m=0while(m); /等待复位完成ds18b20_writedate(0xcc);/跳过romds18b20_writedate(0x44);/启动温度测量,写暂存器delayus(100);m=ds18b20_reset();while(m); /等待转化完成ds18b20_w

11、ritedate(0xcc);/跳过romds18b20_writedate(0xbe);/读ds18b20温度暂存器命令d=ds18b20_readdate();/读低8位数据g=ds18b20_readdate(); /读高3位数据g4); /整数部分g=g*100;d=(d&0x0f)*0.0625*100; c=g+d;return c; /温度转换显示子程序/void write_temp(uint temp)12864_writecom(0x88+3); /显示地址指针12864_writedat(0x30+temp%10000/1000);/写数据最高位(十位)12864_wri

12、tedat(0x30+temp%1000/100); /写个位12864_writedat(.); /写小数点12864_writedat(0x30+temp%100/10); /小数位12864_writedat(0x30+temp%10); /中断初始化程序/void init()count=0;TMOD=0x21; TH1=0xfd;TL1=0xfd;TH0=(65536-50000)/256; /设定时器0初值TL0=(65536-50000)%256;SM0=0;SM1=1;TR1=1;REN=1;TR0=1;ET0=1;ES=1;EA=1; 开中断/开定时器0中断1,在液晶上显示温度/void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=18)t=read_temp();write_temp(t);count=0;void ses() interrupt 4TI=0;ET0=0;if(flag=4)flag=0;switch(flag)case 0: SBUF=50; delay(5); break;case 1: SBUF=t/100;delay(5);break;case 2:SBUF=t%100;delay(5); break

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

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