基于AT89C51单片机的测温系统_第1页
基于AT89C51单片机的测温系统_第2页
基于AT89C51单片机的测温系统_第3页
基于AT89C51单片机的测温系统_第4页
基于AT89C51单片机的测温系统_第5页
免费预览已结束,剩余16页可下载查看

付费下载

下载本文档

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

文档简介

1、引言本文主要介绍了一个基于 AT89C51 单片机的测温系统,详细描述了利用数字温度传感器 DS18B20 开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器 DS18B20 的数据采集过程,并介绍了利用 C 语言编程对 DS18B20 的访问,该系统可以方便的实现实现温度采集和显示, 使用起来相当方便, 具有精度高、 量程宽、灵敏度高、体积小、功耗低等优点。 DS18B20 与 AT89C51 结合实现最简温度检测系统, 该系统结构简单, 抗干扰能力强, 适合于恶劣环境下进行现场温度测量。数字温度计与传统的温度计相比,具有读数

2、方便、测温范围广、测温精确、功能多样话等优点。 其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C52 单片机作控制器,数字温度传感器DS18B20 测量温度,单片机接受传感器输出,经处理用LED 数码管实现温度值显示。.一、设计要求通过基于 MCS-51系列单片机 AT89C51和 DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,数码显示管的使用, C语言的设计;并且把我们这一年所学的数字和模拟电子技术、 检测技术、单片机应用等知识, 通过理论联系实际, 从题目分析、 电路设计调试、 程序编制调试到传感器的选定等这一完整的实验过程, 培养了学

3、生正确的设计思想, 使学生充分发挥主观能动性, 去独立解决实际问题, 以达到提升学生的综合能力、 动手能力、文献资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础。以 MCS-51系列单片机为核心器件,组成一个数字温度计,采用数字温度传感器 DS18B20为检测器件, 进行单点温度检测, 检测精度为 0.5 摄氏度。温度显示采用 3 位 LED数码管显示,两位整数,一位小数。具有键盘输入上下限功能,超过上下限温度时,进行声音报警。二、基本原理原理简述:数字温度传感器 DS1820 把温度信息转换为数字格式;通过“ 1 线协议”,单片机获取指定传感器的数字温度信息,并显示到显示设备上。通

4、过键盘,单片机可根据程序指令实现更灵活的功能,如单点检测、轮转检测、越限检测等。基于 DS1820数字温度传感器的温度检测及显示的系统原理图如图图 2.1基于 DS1820的温度检测系统框图三:主要器件介绍(时序图及各命令序列,温度如何计算等)系统总体设计框图由于 DS18B20 数字温度传感器具有单总线的独特优点,可以使用户轻松地组建起传感器网络, 并可使多点温度测量电路变得简单、可靠,所以在该设计中采用 DS18B20 数字温度传感器测量温度。测温电路设计总体设计框图如图所示,控制器采用单片机AT89S52,温度传感器采用 DS18B20,显示采用 4 位 LED 数码管,报警采用蜂鸣器、

5、 LED 灯实现,键盘用来设定报警上下限温度。.图 3.1 测温电路设计总体设计框图1.控制模块AT89S52 单片机是美国ATMEL 公司生产的低功耗,高性能CMOS 8 位单片机,片内含有8kb 的可系统编程的Flash 只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程的 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52 具有以下标准功能: 8k 字节 Flash,256 字节 RAM ,32 位 I/O 口线,看门狗定时器,

6、 2 个数据指针,三个16 位定时器 /计数器,一个6 向量 2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。 空闲模式下, CPU 停止工作,允许 RAM 、定时器 /计数器、串口、中断继续工作。掉电保护方式下, RAM 内容被保存,振荡器被冻结, 单片机一切工作停止, 直到下一个中断或硬件复位为止。2.显示模块显示电路采用 4 位共阴 LED 数码管,从 P0 口输出段码, P2 口的高四位为位选端。用动态扫描的方式进行显示,这样能有效节省I/O 口。3.温度传感器DS18B20 温度传感器是美国 DALLA

7、S 半导体公司最新推出的一种改进型智能温度传感器, 与传统的热敏电阻等测温元件相比, 它能直接读出被测温度, 并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。DS18B20 的性能特点如下:1.独特的单线接口方式仅需要一个端口引脚进行通信2.多个 DS18B20 可以并联在唯一的三线上,实现多点组网功能3.无需外部器件4.可通过数据线供电,电压范围:3.05.5V5.测温范围 55 125,在 -10 +85时精度为 ±0.5.6.零待机功耗7.温度以 9 或 12 位数字量读出8.报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件9.负电压特性,电源极性

8、接反时,温度计不会因发热而烧毁,但不能正常工作四:硬件电路原理框图由于本次实验是在学习板上做的,所以没有硬件接线图,原理主要讲解 DS18B20 的工作原理。1·硬件设计1.单片机系统电路原理图图 4.1 系统电路原理图2.DS18B20 温度传感器电路设计电源供电方式如图,此时DS18B20 的 1 脚接地, 2 脚作为信号线, 3 脚接电源。.图 4.2 DS18B20 温度传感器电路3.报警电路设计报警电路是在测量温度大于上限或小于下限时提供报警功能的电路。 该电路是由一个蜂鸣器组成,具体的电路如图所示图 4.3 报警电路4.显示电路设计显示电路是由四位一体的共阴数码管进行显示

9、的.2·软件设计(1)DS18B20 内部结构如图所示.主要由 4 部分组成: 64 位 ROM 、温度传感器、非挥发的温度报警触发器TH 和 TL 、配置寄存器。 ROM 中的 64 位序列号是出厂前被光刻好的, 它可以看作 是该 DS18B20 的地址序列码,每个 DS18B20 的 64 位序列号均不相同。 64位 ROM 的排的循环冗余校验码( CRC=X8X5 X41)。 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20的目的。DS18B20 中的温度传感器完成对温度的测量,用 16 位二进制形式提供,形式表达,其中 S

10、 为符号位。DS18B20 温度传感器主要用于对温度进行测量,数据可用 16 位符号扩展的二进制补码读数形式提供, 并以 0.0625 LSB 形式表示。表 2 是部分温度值对应的二进制温度表示数据。.(2)DS18B20 的工作时序DS18B20 的一线工作协议流程是: 初始化 ROM 操作指令存储器操作指令数据传输初始化时序主机首先发出一个 480960 微秒的低电平脉冲,然后释放总线变为高电平,并在随后的 480 微秒时间内对总线进行检测, 如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的 DS18B20在一上电后就一直在检测总线

11、上是否有480960 微秒的低电平出现,如果有,在总线转为高电平后等待 1560 微秒后将总线电平拉低 60240 微秒做出响应存在脉冲, 告诉主机本器件已做好准备。 若没有检测到就一直在检测等待。.接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20 写 0和写 1 组成的命令字节,接收数据时也是从 DS18B20 读取 0 或 1 的过程。因此首先要搞清主机是如何进行写 0、写 1、读 0 和读 1 的。写周期最少为 60 微秒,最长不超过120 微秒。写周期一开始做为主机先把总线拉低 1 微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释

12、放总线为高电平。若主机想写1,在一开始拉低总线电平 1 微秒后就释放总线为高电平,一直到写周期结束。而做为从机的 DS18B20 则在检测到总线被拉底后等待 15 微秒然后从 15us 到 45us 开始对总线采样,在采样期内总线为高电平则为 1,若采样期内总线为低电平则为 0。对于读数据操作时序也分为读 0 时序和读 1 时序两个过程。读时隙是从主机把单总线拉低之后,在 1 微秒之后就得释放单总线为高电平,以让 DS18B20 把数据传输到单总线上。 DS18B20 在检测到总线被拉低 1 微秒后,便开始送出数据,若是要送出 0 就把总线拉为低电平直到读周期结束。 若要送出 1 则释放总线为

13、高电平。主机在一开始拉低总线 1 微秒后释放总线, 然后在包括前面的拉低总线电平 1 微秒在内的 15 微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为 0。采样期内总线为高电平则确认为 1。完成一个读时序过程,至少需要 60us 才能完成让 DS18B20 进行一次温度的转换,那具体的操作就是:.( 1) .主机先作个复位操作,( 2) .主机再写跳过 ROM 的操作( CCH)命令,( 3) .然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20 完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如 CCH 的二进制为 110011

14、00,在写到总线上时要从低位开始写,写的顺序是“零、零、壹、壹、零、零、壹、壹” 。整个操作的总线状态如下图。(3)初始化时序程序bit Init_DS18B20(void)bit flag;/储存 DS18B20 是否存在的标志,flag=0 ,存在; flag=1 ,不存在DQ = 1;/先将数据线拉高for(time=0;time<2;time+) ;/略微延时约6 微秒 /再将数据线从高拉低,要求保持480960usDQ=0;for(time=0;time<200;time+);/略微延时约600 微秒 / 以向DS18B20 发出一持续480960us 的低电平复位脉冲D

15、Q = 1;/释放数据线(将数据线拉高)for(time=0;time<10;time+);/ 延时约30us(释放总线后需等待1560us 让DS18B20 输出存在脉冲)flag=DQ;/ 让单片机检测是否输出了存在脉冲(DQ=0 表示存在)for(time=0;time<200;time+) ;/ 延时足够长时间,等待存在脉冲输出完毕.return (flag); / 返回检测成功标志unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat;/ 储存读出的一个字节数据for (i=0;i<8;i

16、+)DQ =1;/ 先将数据线拉高_nop_();/ 等待一个机器周期DQ=0;/单片机从 DS18B20 读书据时 ,将数据线从高拉低即启动读时序_nop_();/ 等待一个机器周期DQ=1;/ 将数据线 " 人为 " 拉高 ,为单片机检测 DS18B20的输出电平作准备for(time=0;time<2;time+) ;/延时约 6us,使主机在 15us 内采样dat>>=1;if(DQ=1)dat|=0x80;/如果读到的数据是1,则将 1存入 datelsedat|=0x00;/如果读到的数据是0,则将 0存入 datfor(time=0;tim

17、e<8;time+);/延时 3us,两个读时序之间必须有大于1us 的恢复期return(dat);/ 返回读出的十六进制数据WriteOneChar(unsigned char dat).unsigned char i=0;for (i=0; i<8; i+)DQ =1;/ 先将数据线拉高_nop_();/等待一个机器周期DQ=0;/将数据线从高拉低时即启动写时序DQ=dat&0x01;/利用与运算取出要写的某位二进制数据,for(time=0;time<10;time+) ;/延时约 30us,DS18B20 在拉低后的约1560us 期间从数据线上采样DQ=1

18、; / 释放数据线for(time=0;time<1;time+) ;/延时 3us,两个写时序间至少需要1us 的恢复期dat>>=1;/ 将 dat 中的各二进制位数据右移1 位for(time=0;time<4;time+) ;/稍作延时 ,给硬件一点反应时间五、程序流程图 ( 主程序,各子程序 )1.主程序LED 数码管显示实时温度显示子程序:驱动数码管把实时温度值送出在主程序流程图:开始定时器初始化、启动显示实时温度温度设定超过温度报警图 5.1 主程序流程图2.读温度值模块读温度值模块需要调用4 个子程序,分别为:1.DS18B20 初始化子程序:让单片机知

19、道 DS18B20 在总线上且已准备好操作.2.DS18B20 写字节子程序:对DS18B20 发出命令3.DS18B20 读字节子程序:读取DS18B20 存储器的数据4.延时子程序:对 DS18B20 操作时的时序控制读温度值模块流程图:入口DS18B20 初始化跳过读序列号启动温度转换延时DS18B20 初始化跳过读序列号读取温度值高低位数据转换处理返回图 5.2 读温度值子程序流程图.DS18B20 初始化子程序流程图:入口DQ 置高电平稍延时DQ复位0延时 >480usDQ 拉高电平延时 1560usDQ 为低电平?NY返回图 5.3 DS18B20 初始化子程序流程图.DS1

20、8B20 写字节和读字节子程序流程图:图 5.4 DS18B20 写字节子程序流程图图 5.5 DS18B20 读字节子程序流程图.六:调试(步骤,心得,结论)优点:1线性好,精度适中,体积小,实用方便。2实时显示当前温度。缺点:温度传感器会有一定的时间延时, 从而间接地影响了整个报警系统的灵敏性和准确性。(2)心得体会:在本次设计的过程中, 我们发现了很多的问题, 虽然以前也做过类似的课程设计,但是这次确实让我们学到了很多。 我们不仅要选好元件, 还要把这些元件合理地组织起来, 所以我们要学会如何寻找和搜索自己需要的资料。 这一次,我们用了老师给的参考电路图,然后修改了一些地方,比如去掉了一

21、个 LED,再加入了几个电阻。虽然有些困难,但是经过努力,我们还是完成了电路的设计。经过本次的设计,我们学到了很多的知识, 了解到了传感器能够把自然界的各种非电量转换为电信号的能量物理理念。从本次的实习设计中, 我们意识到, 在以后的学习中, 要理论联系实际,把我们所学的理论知识运用到实际当中, 实践是检验真理的唯一标准。 培养了一定的独立思考能力、 解决问题的能力。同时也学到了和他人愉快合作的技巧。每当我们遇到问题时, 我们学会了理性的分析, 最终解决问题。 同时在讨论问题时认真聆听别人的思想和意见也很重要, 在聆听的同时也会学到很多东西。 所以这次实习让我们学到了很多的东西。七:附录(电路

22、图,程序)#include "reg51.h"#include "intrins.h"/_nop_();延时函数用#defineDisdata P0/ 段码输出口#definediscan P2/扫描口#defineuchar unsigned char#defineuint unsigned intsbitDQ=P33;/温度输入口sbitDIN=P07;/LED 小数点控制sbit buzzer=P36;uchar temp_buzzer;uchar up_alarm=20;uinth;uinti;uchar flag;./*温度小数部分用查表法 *

23、/uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/ucharcodedis_712=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf;/共阳 LED 段码表"0""1""2""3""4""5""6""7""8

24、""9" "不亮 " "-"uchar code scan_con=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/ 列扫描控制字uchar data temp_data2=0x00,0x00;/ 读出温度暂放uchar data display8;/ 显示单元数据,共4 个数据和一个运算暂用/*11微秒延时函数 */void ser_init()TMOD=0X20;SCON=0X50;TH1=0XFD;TL1=0XFD;TR1=1;void delay(uint t)for(;t>0

25、;t-);/*显示扫描函数 */scan()char k;for(k=0;k<7;k+)/四位 LED 扫描控制/Disdata=0xff;Disdata=dis_7displayk;if(k=4)DIN=0;discan=scan_conk;delay(200);.discan=0xff;void delayms(unsigned int xms) /延时函数 ,延时 xms unsigned int i , j;for(i = 0; i < xms; i+)for(j = 0; j < 110; j+);void fengming(double templ)uchar i

26、;if(templ >= 34) / 温度报警限设置 for(i=0;i<20;i+)buzzer=0;delayms(1);buzzer=1;delayms(1);/*18B20复位函数 */ow_reset(void)char presence=1;while(presence)while(presence)DQ=1;_nop_();_nop_();DQ=0;/delay(50); / 550usDQ=1;/delay(6); / 66uspresence=DQ; / presence=0继续下一步delay(45);/延时 500uspresence = DQ;.读 1 个字

27、节函数/ 右移一位/最低位移出 /66us.DQ=1;/*18B20写命令函数 */向 1-WIRE 总线上写一个字节void write_byte(uchar val)uchar i;for (i=8; i>0; i-) /DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();/5usDQ = val&0x01;delay(6);val=val/2;DQ=1;delay(1);/*18B20*/从总线上读取一个字节uchar read_byte(void)uchar i;uchar value =

28、 0;for (i=8;i>0;i-)DQ=1;_nop_();_nop_();value>>=1;DQ=0;/_nop_();_nop_();_nop_();_nop_();/4usDQ = 1;_nop_();_nop_();_nop_();_nop_();/4usif(DQ)value|=0x80;delay(6);/66usDQ=1;return(value);/*读出温度函数 */./read_temp()ow_reset();/ 总线复位write_byte(0xCC); / 发 Skip ROM 命令write_byte(0xBE); / 发读命令temp_data0=read_byte(); /温度低 8 位temp_data1=read_byte(); /温度高 8 位ow_reset();write_byte(0xCC); / Skip ROMwrite_byte(0x44); / 发转换命令/*温度数据处理函数 */void work_temp()uchar n=0,th=0,tl=0;int temp=0;uchar flag3=1,flag

温馨提示

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

评论

0/150

提交评论