ImageVerifierCode 换一换
格式:DOC , 页数:24 ,大小:597KB ,
资源ID:4742824      下载积分:5 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4742824.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(51单片机温度计.doc)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

51单片机温度计.doc

1、- - 目前,单片机已经在测控领域获得了广泛的应用,它除了可以测量电信以外,还可以用于温度,湿度等非电信号的测量。能独立工作的单片机温度检测和温度控制系统已经广泛用于很多领域。 单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,RAM,ROM及输入与输出接口电路,这种芯片成为:单片机。由于单片机的集成度高,功能强,通用性好,特别它具有体积小,重量轻,能耗低,价格廉价,抗干扰能力强和使用仿版等方面的优点,是它迅速的得到了推广和应用,目前已经成为测量控制系统中的优良机种和新电子产品中的关键部件。单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动化产品

2、,机器人,儿童玩具,航天器等领域。 这次我们的模电设计,就是用的单片机实现温度的控制,传统的温度传感器大多以热敏电阻作为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进展处理。本次我和陆路裕同学采用的正是DS18B20数字温度传感器来实现基于51单片机的温度计的设计。 传统的温度计有发映速度慢,读数麻烦,测量精度不高,误差大等缺点而下面利用集成温度传感器DS18B20设计并制作了一款基于AT89C51的4位数码管现实的数字温度计,其电路简单,软硬件构造模块化,易于实现。 该数字温度计利用温度传感器及接口电路完成温度的测量并转换成模拟电压

3、信号,经由模数转换器转换成单片机能够处理的数字信号,然后送到单片机中进展处理变换,最后将温度值显示在数码管上。系统以 单片机为控制核心,加上DS18B20温度传感器,4位温度数据显示的共阴极数码管,及外围电源和报警电路组成。 2.设计任务及要求2.1 设计任务 现代生活中,多功能的数字温度计能给我们的生活带来很大的方便,支持一线总线接口的温度传感器简化了数字温度计的设计,降低了本钱;以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20为核心,以ATMEL公司的AT89S52位控制器设计的AT89S51为控制器设计的DS18B20温度传感器构造简单,测温准确,具有一定控制功能

4、的智能温度控制器。 此次我们的设计,就是用单片机实现温度的控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠习惯差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才由单片机处理。本次采用DS18B20温度传感器来实现基于51单片机的数字温度计的设计。 该数字温度计利用DS18B20温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由数模转换器转换成单片机能够处理的数字信号,送到单片机进展处理变换,最后经过三极管的放大显示在共阴极数码管上。系统以51单片机为控制核心,加上测温电路,AD数模转换器,4位温度数据显示数码管以及外围电源时钟电路组成。2.2 设计要求

5、$ 5V电源0.3v用于温度计的供电; $ 温度采集采用DS18B20温度传感器;数字式温度计要求测温围为535C,精度误差在0.1C以。 $ 4位数字共阴极数码管显示; $ 3个按键,分别为复位重置按键,温度上限设置按钮, 温度下限设置按钮; $ 设计温度显示计含报警功能电路图,并且用相关软件进展仿真演示; $ 演示成功之后,设计和绘制软件流程图,并用C语言进展程序编写; $ 准备元器件材料,按照电路图焊接电路,并进展调试; $ 分析讨论,总结经历,对成果进展优化,撰写报告; 3设计总体方案及器材选用分析 3.1方案论证 方案一:提到温度的检测,我们首先会考虑到传统的测温元件有热电阻和热电偶

6、,而热点阻和热电偶测出的一般都是电压,进展A/D转换后,讲究可以用单片机进展数据的处理,在显示电路上就可以将温度显示出来,而这需要比拟多的外部的硬件的支持,硬件电路复杂需要用到A/D转换电路,感温电路,软件调试也复杂,制作本钱也非常高。 所以这个设计理论不符合这次我们对产品的要求,应继续来考虑另一可行方案。方案二:进而考虑到使用温度传感器,在单片机电路设计中,大多时使用传感器,这是我们应该想到的,所以可以采用一只温度传感器DS18B20,此温度传感器,可以很容易读出北侧温度值,进展转换,就可以满足设计要求,另外我们还别出心裁的在电路中参加了温度报警电路,可以实时监测温度,这在实际生产生活中有很

7、大应用。将两个方案进展比拟可以看出,方案二原理简明易行,测量精度高,故我们采用方案二。3.2方案的总体设计框图 根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示、报警等功能。选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进展长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件本钱。该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到AT89C51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阴LED数码管以

8、动态扫描法实现。检测围5摄氏度到38摄氏度。AT89C51单片机主控制器显示电路温度传感器DS18B20扫描驱动数字温度计总体电路构造框图如图1所示。:- word.zl- -4.2 单片机主控制器系统AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。4.3温度传感器模块DS18B20温度传感器是美国DA

9、LLAS半导体公司最新推出的一种改良型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20 的性能特点如下:独特的单线接口方式仅需要一个端口引脚进展通信;多个DS18B20可以并联在唯一的三线上,实现多点组网功能;无需外部器件;可通过数据线供电,电压围:3.05.5V;测温围55125,在-10+85时精度为0.5零待机功耗温度以9或12位数字量读出;用户可定义的非易失性温度报警设置报警搜索命令识别并标志超过程序限定温度温度报警条件的器件负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工

10、作DS18B20采用3脚PR35 封装或脚SOIC封装,其部构造框图如图3所示:图3 DS18B20部构造框图64 b闪速ROM的构造如下:开场8位是产品类型的编号,接着是每个器件的惟一的序号,共有48 位,最后8位是前面56 位的CRC 检验码,这也是多个DS18B20 可以采用一线进展通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。主机操作ROM的命令有五种,如表1所列指 令说 明读ROM33H读DS1820的序列号匹配ROM55H继读完64位序列号的一个命令,用于多个DS1820时定位跳过ROMCCH此命令执行后的存储器操作将针对在线的所有DS1820搜ROMF0H识别

11、总线上各器件的编码,为操作各器件作好准备报警搜索ECH仅温度越限的器件对此命令做出响应DS18B20 温度传感器的部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM 的构造为8字节的存储器,构造如图4所示。 前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置存放器,它的容用于确定温度值的数字转换分辨率。DS18B20工作时存放器中的分辨率转换为相应精度的温度数值.温度低位LSB温度高位 MSBTHTL配置保存保存保存8位CRC当DS18B20接收到温度转换命令后,开场启动转换。转换完成后的温度值就以

12、16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5 /LSB形式表示。温度值格式如下:这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。图中,S表示位。对应的温度计算:当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将

13、补码变换为原码,再计算十进制值。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。DS18B20温度传感器主要用于对温度进展测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625LSB形式表示。表2是局部温度值对应的二进制温度表示数据。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节容作比拟,假设TTH或TTL,那么将该器件的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进展告警搜索。在64位ROM的最高有效字节中

14、存储有循环冗余校验码CRC。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比拟,以判断主机收到的ROM数据是否正确。3DS18B20测温原理DS18B20的测温原理如图5所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门翻开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进展计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度存

15、放器中,减法计数器1和温度存放器被预置在-55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进展减法计数,当减法计数器1的预置值减到0时温度存放器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开场对低温度系数晶振产生的脉冲信号进展计数,如此循环直到减法计数器2计数到0时,停顿温度存放器值的累加,此时温度存放器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度存放器值到达被测温度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严

16、格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进展。操作协议为:初始化DS18B20发复位脉冲发ROM功能命令发存储器操作命令处理数据。在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令BEH读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位LSB,得到所测实际温度的整数局部Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数局部以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算: Ts=Tz-0.25+(CD-

17、Cs)/CD 4.5显示模块采用4位共阴极LED数码管显示,采用共阴极数码管需要参加负载驱动,所以我们在焊接时加上了四个三极管以驱动保证能够正常显示,这在后面我们会用图来说明。 此外我们设置了KEY1,KEY2,KEY3三个按钮,KEY1是复位键,KEY2是增加上线温度报警键,KEY3是减少下线温度报警键。4.6电源模块5V直流电源0.3v用于该温度计的供电;5系统程序的设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,报警子程序和显示数据刷新子程序等. #include #include #define uchar unsigned char#define u

18、int unsigned int#include DS18B20.cuint mun=0;uchar time_wang=0;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;sbit B0=P10;sbit B1=P11;sbit B2=P12;sbit B3=P13;sbit K1=P31;sbit K2=P32;sbit K3=P33;sbit jingbao=P37;uchar wendu_H=38;uchar wendu_L=5;uchar SHOW=0;/*名称: Delay_NS(

19、)*功能: 长软件1ms延时*/void delay(uint ms) uchar i;while(ms-) /ms毫秒软件延时 for(i = 63;i 1;i-);/-void Sys_Initial(void)TMOD = 0x22;/ 定时器1工作方式2,定时器0工作方式1TH0 = 0x3C;TL0 = 0xB0;/ 50msET0 = 1; / 开定时器T0中断TR0 = 1; / 开定时器T0EA=1;/ 开总中断/*void timer0() interrupt 1 using 2TH0=0xff;TL0=0xa0;time_wang+;if(SHOW=0)if(time_wa

20、ng=5) P2=0xff;B0=0;B1=1;B2=1;B3=1;P2=tablemun/1000; if(time_wang=10) P2=0xff;B0=1;B1=0;B2=1;B3=1;P2=table(mun%1000)/100; if(time_wang=15) P2=0xff;B0=1;B1=1;B2=0;B3=1;P2=(table(mun%100)/10)&0x7f; if(time_wang=20)time_wang=0;P2=0xff;B0=1;B1=1;B2=1;B3=0;P2=tablemun%10;if(SHOW=1)if(time_wang=5) P2=0xff;

21、B0=0;B1=1;B2=1;B3=1;P2=0x38; if(time_wang=10) P2=0xff;B0=1;B1=0;B2=1;B3=1;P2=0xff; if(time_wang=15) P2=0xff;B0=1;B1=1;B2=0;B3=1;P2=tablewendu_L/10; if(time_wang=20)time_wang=0;P2=0xff;B0=1;B1=1;B2=1;B3=0;P2=tablewendu_L%10;if(SHOW=2)if(time_wang=5) P2=0xff;B0=0;B1=1;B2=1;B3=1;P2=0x76; if(time_wang=1

22、0) P2=0xff;B0=1;B1=0;B2=1;B3=1;P2=0xff; if(time_wang=15) P2=0xff;B0=1;B1=1;B2=0;B3=1;P2=tablewendu_H/10; if(time_wang=20)time_wang=0;P2=0xff;B0=1;B1=1;B2=1;B3=0;P2=tablewendu_H%10;/-/*void key_scan(void)if(!K1)/启动delay(100);SHOW+;if(SHOW=3)SHOW=0;if(!K2) delay(100); if(SHOW=0)return; if(SHOW=1) if(w

23、endu_L=(wendu_H-1)return;elsewendu_L+; if(SHOW=2) if(wendu_H0)wendu_L-; if(SHOW=2) if(wendu_H=(wendu_L+1)return;elsewendu_H-; /*void main(void) /主函数/uchar i;Sys_Initial();/单片机初始化,开定时器0while(1) wendu_read(); mun=wendu*10+xiaoshu; if(wenduwendu_L&wendu0) count-;void reset(void) /send reset and initial

24、ization mandDS=0;delay1(100);DS=1;delay1(4);delay1(20);bit read_bit(void) /read a bit bit temp; DS=0; _nop_(); DS=1; _nop_(); temp=DS;EA=1; delay1(20);EA=0; return temp; uchar read_byte(void) /read a byte date uchar i,byte=0; bit j; for(i=0;i8;i+) byte=_cror_(byte ,1); j=read_bit(); if(j=0) byte=byt

25、e|0x00; else byte=byte|0x80; return byte;void write_byte(uchar mand) /write a byte to ds18b20uchar i;for(i=0;i8;i+) if(mand & 0x01)=0) DS=0; delay1(8); DS=1; _nop_(); else DS=0; _nop_(); DS=1; delay1(8); mand=_cror_(mand,1); /-/DS18B20读温度程序uint readtemperature() uint temperature; EA=0; reset(); /初始化

26、 EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; write_byte(0xcc); /写SKIP ROM跳过检查ROM序列,因为我们一般只有一个DS18B20!EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; write_byte(0x44); /写启动温度转换 EA=1; delay1(12); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; reset(); /初始化 write_byte(0xcc); /写SKIP ROM跳过检查ROM序列,因为我们一般只有一个DS1

27、8B20! EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; write_byte(0xbe); /读温度存放器RAM头两个值分别为温度的低位和高位 EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; tempL=read_byte(); /读出温度的低位LSB EA=1; delay1(1); /转换需要一点时间,延时大一点,应该大于500us吧 EA=0; tempH=read_byte(); /读出温度的高位MSB EA=1; /温度转换,把上下位做相应的运算转化为实际温度 temperat

28、ure=tempL+tempH*256;/将温度整理成16位变量 =(tempH*256)+tempL)*0.0625*10+0.5;/tempH*256的意思是tempH向左移8位 / delay_us(200);/两次间隔转换的间隔要延时一下 temperature=temperature*(0.625); return(temperature); /*函数名称: wendu_read功 能: 完成温度的读取与显示参 数: 无返回值 : 无/*/void wendu_read(void) uint t;t=readtemperature();wendu=(t/10)%1000;xiaoshu=t%10; 6.调试及仿真 我利用电脑中的 Proteus软件将设计好的电路图进展仿真,如下列图所示: 其中温度上限设为38,下限设为5,并且可以由KEY1,K按- word.zl

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服