ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:99.01KB ,
资源ID:8787770      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DS18B20温度采集报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DS18B20温度采集报告.docx

1、DS18B20温度采集报告南京信息工程大学滨江学院课程论文(单片机原理及应用)题目 DS18B20 温度采集报告 学生姓名 仇丽华 学 号 20082305902 院 系 滨江学院电子工程 专 业 电子信息工程 指导教师 朱艳萍 概述硬件电路的单片机芯片采用AT89S52芯片,进行数据处理。数据采集部分的传感器采用DS18B20芯片数字温度传感器。,用七段LED数码显示器显示测量的温度值,超过预定的温度值则会产生报警。 硬件电路设计1、AT89S52芯片AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技

2、术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。2、 DS18B20芯片(1) DS18B20简介DS18B20是由美国DALLAS公司生产的单线数字温度传感器芯片。与传统的热敏电阻有所不同,DS18B20可直接将被测温度转化为串行数字信号,以供单片机处理,它还具有微型化、低功率、高性能、抗干扰能力强等优点。通过编程,DS18B20可以实现912位的温度读数。信息经过单线接口送入DS18B20或从DS18B20送出

3、,因此从微处理器到DS18B20仅需连接一条信号线和地线。读、写和执行温度变换所需的电源可以由数据线本身提供,而不需要外部电源。 (2) DS18B20的引脚功能DS18B20的引脚(图7-10),其功能如表7-8所示。 (3) DS18B20的主要特点v 采用单线技术,与单片机通信只需一个引脚;v 通过识别芯片各自唯一的产品序列号从而实现单线多挂接,简化了分布式温度检测的应用;v 实际应用中不需要外部任何器件即可实现测温;v 可通过数据线供电,电压的范围在35.5V;v 不需要备份电源;v 测量范围为-55+125,在-10+85范围内误差为0.5;v 数字温度计的分辨率用户可以在9位到12

4、位之间选择,可配置实现912位的温度读数;v 将12位的温度值转换为数字量所需时间不超过750ms;v 用户定义的,非易失性的温度告警设置,用用户可以自行设定告警的上下限温度。(4)DS18B20内部结构64位ROM的结构开始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为字节的存储器,结构如图3所示。头个字节包含测得的温度信息,第和第字节

5、和的拷贝,是易失的,每次上电复位时被刷新。第个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如下图所示。低位一直为,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为,用户要去改动,R1和0决定温度转换的精度位数,来设置分辨率 DS18B20内部结构3、实验原理图AT89S52控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令,必须先启动DS18B20开始转换,再读出温度转换值,本实验系统挂接一个DS18B20芯片,可使用默

6、认的12位转换精度,外接供电电源,单片机与DS18B20的接口用的是单片节的P2.4口。 电路焊接时按照电路图焊接,将电源部分、ISP接口、18B20、蜂鸣器、LED显示和单片机模块连接起来,按照引脚相同标号连接。等焊接完成后将程序下载到芯片里进行调试。查看焊接的板子有没有问题。我们的板子刚刚下进去程序后数码管没显示,后经过检查,发现数码管的引脚焊反了,改正后板子能够正确显示。板子显示29.8,温度没有超过设定的30,所以蜂鸣器不会响。软件设计 实验原理测温系统的原理主要是DS18B20去采集温度,然后单片机负责提供时钟频率,分析处理数据,送给LED显示。DS18B20低温度系数晶振的振荡频率

7、受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。原理图的18、19脚就是晶振原理图,9脚是复位原理图,可以使单片机清零。实验内容(1) 如下的流程图,在keil编译环境下编制程序,需要

8、采集温度并判断温度所处范围,如果超出温度范围则报警;报警通过实验板上的蜂鸣器实现,报警温度可以通过键盘设置;最后生成*HEX文件。(2) 通过ISP将生成的*HEX文件下载到单片机中,运行程序。(3) 观测LCD上显示的温度数据,通过键盘操作控制报警温度。 主流程图中断流程图程序代码/DS18B20温度传感器程序# include# define Alarm 10sbit Beep=P34;sbit DQ=P24;unsigned char tempL=0,tempH=0; /数据传输线接单片机的相应引脚unsigned char flag=0; /设全局变量unsigned int temp

9、erature,negtemper; /温度值保存在temperature里unsigned char idata addrdat2=0x0,0x0;unsigned char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*0123456789*/unsigned char tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;unsigned char dispbuf3=0,0,0;unsigned char warning=20;bit on=0,off=1;/*/延时

10、子程序 /*void delay(unsigned int i)while(i-);void beep(bit i)Beep=i;/*/初始化程序Init_DS18B20(void)unsigned char x=0;DQ=1; /DQ先置高dalay(8); /稍延时DQ=0; /发送复位脉冲delay(85); /延时(480us)DQ=1; /拉高数据线delay(14); /等待(1560us)x=DQ; /用x的值来判断初始化程序有没有成功,DS18B20存在的话x=0, /否则为1 delay(20);/* /读一个字节 ReadOneChar(void) /主机数据线先从高电平拉

11、至低电平,保持1ms以上, /再使数据线升为高电平,从而产生读信号unsigned char i=0; /每个读周期最短的持续时间为60us,各个读周期之间 /必须有一个1ms以上的高电平恢复期unsigned char dat=0;for(i=8;i0;i-) /一个字节有8位DQ=1;delay(1);DQ=0;dat=1;DQ=1;if(DQ)dat|=0x80;delay(4);return(dat);/*/写一个字节WriteOneChar (unsigned char dat)unsigned char i=0; / 数据线从高电平拉至低电平,产生写起始信号 /15ms之间将所需写

12、的位送到数据线上for(i=8;i0;i-) /在1560ms之间对数据线进行采样,如果是高电平 /就写1,低电平就写0DQ=0; /在开始另一个写周期前必须有1ms以上的高电平恢复期DQ=dat&0x01;delay(5);DQ=1;dat=1;delay(4);/*ReadTemperature(void)Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的操作WriteOneChar(0x44); /启动温度转换delay(125); /转换需要一点时间,延时 Init_DS18B20(); / 初始化WriteOneChar(0xcc); /

13、跳过读序列号的操作WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); /读出温度的低位LSBtempH=ReadOneChar(); /读出温度高位temperature=(tempH*256)+tempL; /温度转换,对高、低位做相应的运算,转化为/实际温度return(temperature);/*void Dispbu(unsigned int temper)dispbuf2=(temper4)%10; /取十位dispbuf1=(temper4)%10; /取个位if(temper&0x8) /小数位dis

14、pbuf0=0x55;else dispbuf0=0;unsigned char getkey() /键盘扫描程序P2=0xff;P2=oxfe;if(P2&0xff)!=0xfe)delay(5000);if(P2&0xff)!=0xfe)return P2;else P2=0xfd;else P2=oxfd;if(P2&0xff)!=0xfd;delay(5000);if(P2&0xff)!=0xfd)return P2;elseP2=oxfd;else P2=0xfd;if(P2&0xff)!=0xfd)delay(5000);if(P2&0xff)!=0xfd)return P2;el

15、se P2=0xfd;else P2=0xf7;if(P2&0xff)!=0xf7)delay(5000);if(P2&0xff)!=0xf7)return P2;else return P2=0xfe;Inter0_process() interrupt 2 /外部中断1 unsigned char key;int i;unsigned char dis=0x01;unsigned int j;for(j=5000;j0;j-)key=getkey(); /取键值if(key=0xee) /如1键按下,则温度值递增 warning+;delay(8000);if(key=0xed) /如5键

16、按下,则温度值递增warning-;delay(8000);if(key=0x77) /按下16键则退出中断j=1;for(i=0;i2;i+) /设置两位报警值,并在LED上显示P1=dis;dis=1;if(i=0)P0=tabwarning%10;elseP0=tebwarning/10;delay(200);dis=0x01; /* /主程序main()unsigned char i,npos=0x01;P0=0xff;P2=0xff;P1=0xff;EX1=1; /开中断1IT1=1; /下降沿触发ET1=1;EA=1; /开总中断while(1)if(temperature&0xf

17、000)=0xf000) /判断是否是负温度ReadTemperature();for(i=0;i4;i+) /4位显示negtemper=(temperature)+1; /取原码Dispbuf(negtemper); /取位值P1=npos;npos1; /循环使能if(i=1) /第二位显示有点P0=tab1dispbufi; /查表显示delay(700);else if(i=3) /显示负号P0=0xbf;elseP0=tabdispbufi;delay(700);npos=0x01;else /如不是负温度for(i=0;i4)&0xff)=warning) /温度值大于报警温度值

18、则报警beep(0n); /蜂鸣器响else beep(off); /不响P1=npos;npos=1; /循环显示if(i=1)P0=tab1dispbufi;elseP0=tabdispbufi;delay(100);npos=0x01;总结 通过这次单片机实验让我知道了C语言的重要性。以前学的时候以为只可以写写简单的程序,现在知道和单片机联合起来可以实现很多很多功能。所以我们一定要加强这方面的知识。板子焊的再漂亮,没有程序还等于零。 在焊接板子时先将排阻和AT89S52连接起来,排阻一边有个小点的地方时1脚,然后顺序往下焊接。将芯片的9脚复位键焊上一个开关,开关按钮有六个端,用万用表电阻

19、档检测,检测一端,用表笔碰触任两个,当按下去的时候万用表有偏斜,就用那两个脚连接。在芯片的18、19脚按图焊上晶振,产生时钟频率。在芯片的40脚焊上两个并联的电容,然后接地。在21、22、23脚分别焊上三个开关,可以控制温度的加一、减一和退出。然后将LED显示部分焊上,将数码管同芯片按图焊在一起,同时在P1.0、P1.1、P1.2、P1.3口焊接四个三极管将电流放大,使数码管显示更亮。然后将蜂鸣器按图焊接,在电路图中也焊接了一个三极管,可将声音进行放大。然后将18B20按图焊接,18B20的2脚既要和电阻连接,也要和芯片的A12脚连接起来。然后焊接电源部分,SB接口只需焊接1、4、5和6脚,在

20、电源电路中,将一个电阻和发光二极管串联,然后与四个电容并联,电路是否有电可以通过发光二极管是否发光得知。最后焊接接口,正面看板子,只有左上角和右下角会成为1脚,然后依次焊接,所以下载时下载线插上去时要注意,不能插反。焊接过程中,要尽量让板子排版清晰,这样方便检查,导线排布好看,要尽量横平竖直,两个焊点之间不要搭在一起。板子焊接完成后,我们将程序下进去,板子并没有亮,在多次检查后发现数码管的引脚焊接反了,我们将的对脚焊成了脚,应该是脚的对脚。下载程序时应先安装转串口驱动程序,安装时按照系统默认的路径进行安装。板子改正后在调试就对了,显示.,并没有超过设定的温度,所以蜂鸣器不会产生报警。这次试验增加了我们动手动脑能力,让我们不只学会理论知识,要把这些用到现实生活中去。同时也增加了我们的合作能力,我们都非常的努力,一有问题大家都坐在一起讨论,一起努力,一起攻克问题。我想我们享受的就是这个过程,而不仅仅只是结果。通过这次的设计,我知道了,在任何问题面前,只要我们努力,只要我们勇敢,我想,他们都不是问题,都不是困难。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1