基于单片机的DS18B20温度传感器课程设计报告.doc_第1页
基于单片机的DS18B20温度传感器课程设计报告.doc_第2页
基于单片机的DS18B20温度传感器课程设计报告.doc_第3页
基于单片机的DS18B20温度传感器课程设计报告.doc_第4页
基于单片机的DS18B20温度传感器课程设计报告.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于AT89C52单片机的DS18B20温度传感器设计报告设计时间:12月22日12月26日班 级: 姓 名: 报告页数: 25页 广东工业大学课程设计报告设计题目:基于AT89C52单片机的DS18B20温度传感器 学院: 专业: 班 学号: 姓名: (合作者_号_) 成绩评定_教师签名_摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本次课程设计主要设计一个基于89C51单片机的数字温度传感器DS18B20开发测温系统,重点学习掌握对传感器在单片机下的硬件连接,软件编程以及各模块系统流程的详尽分析,提高电路设计的技巧。该系统可以方便的实现实现温度采集和显示,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与AT89C52结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,有广泛的应用前景。关键词:单片机;温度采集;AT89C52;DS18B20;目 录1 设计任务12 总体方案设计12.1 方案论证121.1 方案一12.1.2 方案二12.2 总体设计框图及电路23 硬件设计33.1 单片机系统33.2 数字温度传感器模块43.2.1 DS18B20性能43.2.2 DS18B20外形及引脚说明43.2.3 DS18B20接线原理图53.2.4 DS18B20时序图53.2.5 数据处理63.3 1602液晶显示电路74 软件设计84.1 主程序模块84.2 读温度值模块94.3 中断模块104.4 温度报警模块104.5程序开发10 4.6 PCB电路板的制作.195 程序的仿真及产品调试206 总结与讨论23参考文献:24附录:元器件清单1 设计任务采用方案一(温度传感器LM35,3位半A/D转换器)或者方案二(52单片机,温度传感器DS18B20),数码管或者液晶显示,设计一个日常温度数字计。 产品指标及技术要求: 温度显示范围:045摄氏度 数字显示分辨率:0.1摄氏度 精度误差:小于等于0.5摄氏度 电路工作电源可在59V范围内工作2总体方案设计 2.1方案论证 2.1.1方案一采用温度传感器LM35,3位半A/D转换器,数码管或者液晶显示,设计一个日常温度数字计。本方案主要利用硬件电路连接,通过更改电路器件参数,显示出3位半温度,并没有利用软件编程。本方案设计简单,但电路复杂,这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。并且基本电路中所需要的器件和芯片成本不便宜。 2.1.2方案二采用AT89C52单片机,温度传感器DS18B20,数码管或者液晶显示,设计一个日常温度数字计。本方案主要利用硬件电路连接,通过软件编程,显示出3位半温度。本方案设计比较难,要同时考虑硬件的连接和软件编程,但电路简单,另外DS18B20具有3引脚的小体积封装,测温范围为-55+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。并且基本电路中所需要的器件和芯片成本便宜。以上两种方案相比较,第二种方案的电路、软件设计更简单,成本便宜,此方案设计的系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二。 12.2总体设计框图及电路本方案设计的系统由单片机系统、数字温度传感器、液晶1602显示模块、时钟模块组成,其总体架构如下图1。AT89C52单片机1602液晶显示电路温度传感器时钟,复位电路 电路设计:AT89C52单片机最小系统+DS18B20数字温度传感器模块+液晶1602驱动显示模块 图1单片机最小系统 图2 DS18B20数字温度传感器模块 2 图3液晶1602驱动显示模块 3硬件设计3.1 单片机系统 AT89C52单片机引脚介绍 AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的89C52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接11.0592MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件编程定义。 图4 晶振电路图 图5 复位电路图 3 图6 单片机管脚图3.2 数字温度传感器模块 3.2.1 DS18B20性能l 独特的单线接口仅需一个端口引脚进行通信l 简单的多点分布应用l 无需外部器件l 可通过数据线供电l 零待机功耗l 测温范围-55+125,以0.5递增l 可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625l 温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字l 应用包括温度控制、工业系统、消费品、温度计和任何热感测系统l 负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作 3.2.2 DS18B20外形及引脚说明l GND:地l DQ:单线运用的数据输入/输出引脚l VD:可选的电源引脚 4图7 DS18B20外形及引脚 3.2.3 DS18B20接线原理图单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。图8 DS18B20接线原理图 3.2.4 DS18B20时序图主机使用时间隙来读写DS18B20的数据位和写命令字的位。1.初始化时序 5图9 DS18B20初始化时序2.DS18B20读写时序图10 DS18B20读写时序 3.2.5 数据处理高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。 6图11 字节分配下表为12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,实际温度=07D0H*0.0625=2000*0.0625=125。例如-55的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算),实际温度=370H*0.0625=880*0.0625=55。可见其中低四位为小数位。图12 DS18B20温度数据表 3.3 1602液晶显示电路 LCD1602引脚功能说明第1脚:VSS为电源地 第2脚:VDD接5V电源正极 7第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端。 第714脚:D0D7为8位双向数据端。 第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极 图13 1602液晶显示电路及实物图4 软件设计 4.1 主程序模块 主程序需要调用3个子程序,分别为:l 实时温度显示子程序:驱动液晶1602把实时温度值送出在液晶屏显示l 中断定时及显示子程序:驱动液晶1602把定时时钟送出在液晶屏显示l 温度设定、报警子程序:设定报警温度值,当温度超过或者低于该值时产生报警,即驱动液晶屏显示不同的界面主程序流程图:显示温度时钟,温度报警对温度传感器进行设置,读取温度,对中断定时数据处理转化返回开始开始 8 4.2 读温度值模块 读温度值模块需要调用4个子程序,分别为:l DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操作l DS18B20写字节子程序:对DS18B20发出命令l DS18B20读字节子程序:读取DS18B20存储器的数据l 延时子程序:对DS18B20操作时的时序控制读温度值模块流程图:入口 跳过读序列号DS18B20初始化启动温度转换DS18B20初始化延时跳过读序列号读取温度值高低位返回 数据转换处理 图14 读温度值子程序流程图 9 4.3 中断模块中断采用T0定时器方式1,初始值定时为50ms,并不断计数。来模拟时钟中断模块流程图:中断入口定时器重置初值计数值加1否,返回计数1秒?1分?1时?是,显示时钟中断返回图15中断模块流程图 4.4 温度报警模块 设定报警温度上限值,当温度超过该值时产生报警,驱动液晶1602在液晶屏第一行显示“weater:hot”的界面 设定报警温度下限值,当温度低于该值时产生报警,驱动液晶1602在液晶屏第一行显示“weater:cold”的界面 当温度在上限值和下限值之间时,不产生报警,驱动液晶1602在液晶屏第一行显示“Happy Everyday!”的界面 4.5 程序开发 10 软件程序使用C语言编写开发,开发环境软件为Keil4应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件设置工程编译/汇编、连接,产生目标文件程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File-New,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-Open,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project-New Project,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group Source Group1”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option for TargetTarget1(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。成功编译/汇编、连接后,还须通过编程器将.hex目标文件烧写入单片机中才能观察目标样机真实的运行状况。如下为编译成功,并生成hex文件的界面 程序代码:/*基于AT89C52单片机的时钟+LCD1602显示+DS18B20温度*/#includereg52.h#define uchar unsigned char#define uint unsigned intsbit DQ=P27; 11sbit rs=P24;/lcd1602数据、命令选择端sbit rw=P23;/lcd1602读、写选择线sbit lcde=P22; /lcd1602使能线 uchar tp,tpx,num,count,miao,fen,shi;uchar code table=Happy Everyday!;uchar code table1= : : ;uchar code table2=weather:cold ;uchar code table3=weather:hot ;/*延时函数*/void delay(uint z)/ms级延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*void delay1()/us级延时函数1 ; ; */void delay2(uint i)/us级延时函数2while(i-); /* ds18b20初始化*/void init_ds18b20() /初始化DQ=1; /数据线拉高delay2(8); /大约80usDQ=0; /数据线拉低 12delay2(80); /(480us960us)大约798usDQ=1; /数据线拉高delay2(14); /(15us60us+40us240us)大约154us/* ds18b20读一个字节*/uchar read_ds18b20_byte()uchar i=0;uchar dat=0;for(i=0;i8;i+) /一个字节为8位,所以循环8次DQ=0; /数据线拉低dat=dat1; /字节右移一位DQ=1; /数据线拉高if(DQ=1) /判断读回是否为1dat=dat|0x80; /最高位或上一个1,使得最高位变为1delay2(4); /延时6usreturn dat; /循环8次完成一个字节,并返回数据/* ds18b20写一个字节*/void write_ds18b20_byte(uchar date) uchar i=0;for(i=0;i8;i+) /一个字节为8位,所以循环8次DQ=0; /数据线拉低DQ=date0x01; /取出数据的最低位送到数据线delay2(5); /66us,大于60usDQ=1; /数据线拉高 13date=date1; /字节右移一位,接着取第二位 /* ds18b20读取温度*/int read_ds18b20_temp() /考虑到温度可能为负值,所以使用int型uchar a=0; /用于读取低8位uint b=0; /用于读取高8位uint t=0; /用于组成新的温度init_ds18b20(); /初始化write_ds18b20_byte(0xcc); /忽略ROM指令write_ds18b20_byte(0x44); /进行温度转换init_ds18b20(); /初始化write_ds18b20_byte(0xcc); /忽略ROM指令write_ds18b20_byte(0xbe); /读暂存器指令a=read_ds18b20_byte(); /读取低8位b=read_ds18b20_byte(); /读取高8位a=a0x00ff; /将低8位与上0x00ff,设定低8位b=(b0x000f)8; /将高8位与上0x0000f,去掉高4位,左移取12位,设定为高8位t=a|b; /两者或组成一个16位的字节return t; /将温度值返回 /*LCD写入一个字节命令函数*/ 14void writecom(uchar com)rs=0; /写指令rw=0; /进行写操作lcde=0; delay(5);lcde=0;P1=com;delay(5);lcde=1; /使能端一个上升沿,把命令写入delay(5);lcde=0;/*LCD写入一个字节数据函数*/void writedate(uchar date)rs=1; /写数据rw=0; /进行写操作delay(5);lcde=0;P1=date;delay(5);lcde=1; /使能端一个上升沿,把数据写入delay(5);lcde=0;/*温度显示函数*/void wendudisplay()uint tp,tpz;uint tp2,tpshi,tpge,tpxiao; 15tp=read_ds18b20_temp(); /读温度tp2=tp0x000f;tpxiao=tp2*6/10;tpz=(tp0x0ff0)4;tpshi=tpz/10; /取十位tpge=tpz%10; /取个位writecom(0x80+0x40+10); writedate(tpshi+0x30); /显示温度十位writedate(tpge+0x30); /显示温度个位writedate(.);writedate(tpxiao+0x30);writedate(0xdf);writedate(C);/显示温度符号if(tpz15) writecom(0x80); for(num=0;num16;num+) writedate(table2num);delay(5); if(tpz25)(tpz15) writecom(0x80); for(num=0;num15;num+) writedate(tablenum);delay(5); if(tpz25) writecom(0x80); for(num=0;num16;num+) writedate(table3num);delay(5); 16/*LCD显示时分秒函数*/void writesfm(uchar add,uchar date)uchar shi,ge;shi=date/10; /取十位ge=date%10; /取个位writecom(0x80+0x40+add); /写入地址writedate(0x30+shi); /显示十位writedate(0x30+ge); /显示个位writecom(0x80+0x40+add); /返回地址 /*初始化函数*/void init()lcde=0;writecom(0x38); /设置LCD液晶16x2显示writecom(0x0c); /开显示writecom(0x06); /设置光标加1writecom(0x01); /清屏delay(5);TMOD=0x01; /设定T0定时器为工作方式1TH0=(65536-50000)/256; /装T0定时器初值TL0=(65536-50000)%256;EA=1; /开总中断ET0=1;TR0=1;miao=12;fen=12;shi=12; 17/*主函数*/void main() init(); while(1) wendudisplay(); writesfm(0,shi); writesfm(3,fen); writesfm(6,miao); writecom(0x80+0x40+2); writedate(:); writecom(0x80+0x40+5); writedate(:); /* 中断函数*/void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=20)count=0;miao+;if(miao=60)miao=0; 18fen+; if(fen=60)shi+;fen=0;if(shi=24)shi=0; 4.6 PCB电路板的制作 本次设计的电路板采用ProtelPCB技术印制。 图16 Protel电路原理图 19 图17 Protel电路PCB图5 程序仿真及产品调试 程序仿真采用Protuer软件 Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。 设置温度上限为25度,温度下限为15度。如图18所示。此时温度为27.0度,超出上限温度,液晶屏显示“weather:hot”的界面。 20 图18如图19所示。此时温度为13.0度,低于下限温度,液晶屏显示“weather:cold”的界面。 图19如图20所示。此时温度为16.0度,在上限温度和下限温度之间,液晶屏显示“Happy Everyday!”的界面。 图20如图21所示,为整体电路图的仿真。 图21 21产品的调试包括PC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论