基于AT89C51单片机的多点温度测量系统设计_第1页
基于AT89C51单片机的多点温度测量系统设计_第2页
基于AT89C51单片机的多点温度测量系统设计_第3页
基于AT89C51单片机的多点温度测量系统设计_第4页
基于AT89C51单片机的多点温度测量系统设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机应用系统设计单片机应用系统设计课课 题:题:基于基于 AT89C51 单片机的多点温度测量系统设计单片机的多点温度测量系统设计 姓姓 名:名: 班班 级:级: 学学 号:号: 指导老师:指导老师: 日日 期:期: 目目 录录一、一、绪论 1二、总体方案设计二、总体方案设计1三、硬件系统设计硬件系统设计1 1 主控制器12 显示模块23 温度采集模块33.1 DSl8B20 的外部管脚及特点43.2 DS18B20 的内部结构43.3 DS18B20 的内存结构5 3.4 DS18B20 的测温功能及原理5 3.5 DS18B20 温度传感器与单片机的连接63.6 提高 DS18B20 测

2、温精度的方法6四、四、系统软件设计6五、五、系统仿真9六、设计总结六、设计总结10参考文献参考文献11附附 录录12一、绪论一、绪论典型的温度测控系统是由模拟温度传感器、A/D 转换电路和单片机组成。但是由于模拟温度传感器输出为模拟信号,必须经过 A/ D 转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构复杂,成本较高。近年来,由于以 DS18B20 为代表的新型单总线数字式温度传感器的突出优点使得它得到充分利。DS18B20 集温度测量和 A/ D 转换于一体,直接输出数字量,接口几乎不需要外围元件,硬件电路结构简单,传输距离远,可以很方便的实现多点测量;与单片机接口几乎不

3、需要外围元件,使得硬件电路结构简单,广泛使用于距离远,节点分布多的场合。二、系统总体方案设计二、系统总体方案设计本设计完成的任务是设计基于 AT89C51 单片机的多点温度测量系统,此系统能连续测量多点温度,测量精确度为 0.1 度,并在 LCD 显示器上完成显示。系统总体方案设计具体如下: 图 1总的来说,本系统有四大部分组成:单片机控制部分,温度显示部分,温度传感器组和测点选择开关部分。温度采集可以利用温度传感器测量目标物体的温度,该温度经处理成数字信号传送给单片机,单片机可以很高效的采集外部传送过来的数字信号,在其内部经软件算法处理,转化为相应的温度值经显示模块显示出所测得的温度。三、硬

4、件系统设计三、硬件系统设计1 1、主控制器(单片机)、主控制器(单片机) 基于设计的要求要使用 AT89C51 单片机作为本系统设计的核心器件。 由于 AT89C51 单片机是一种带 4K 字节闪烁可编程可擦除只读存储器的低电压,高性能 cMOS8 位微处理器。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,所以本系统采用 AT89C51 单片机作为系统的主控制器。其特点如

5、下: 4K 字节可编程闪速程序存储器:1000 次循环写/擦 全静态工作:OHz-24MHz 三级程序存储器锁定 128 X 8 位内部数据存储器,32 条可编程 I/0 线 两个十六位定时器/计数器,六个中断源 可编程串行通道,低功耗闲置和掉电模式2.2. 显示模块显示模块本设计要求用 LCD 显示器来显示测出的温度。LCD 系列中 LM016L 型号的为2 行 16 列液晶,可显示 2 行 16 列英文字符,有 8 位数据总线 D0-D7,RS,R/W,EN 三个控制端口(共 14 线) ,工作电压为 5V。没背光,和常用的 1602B 功能和引脚一样(除了调背光的二个线脚) 。可以完全实

6、现本设计的显示功能。3.3.温度采集模块温度采集模块本设计用的是 DS18B20 温度传感器,它是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。3.1 DSl8B20 的外部管脚及特点的外部管脚及特点DS18B20 的性能特点如下: 独特的单线接口方式:DS18B20 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 在使用中不需要任何外围元件。 可用数据线供电,电压范围:+3.0V+5.5 V。 测温范围:-55 +125

7、。固有测温分辨率为 0.5 。 通过编程可实现 912 位的数字读数方式。 用户可自设定非易失性的报警上下限值。 支持多点组网功能,多个 DS18B20 可以并联在惟一的三线上,实现多点测温。 负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。3.2 DS18B20 的内部结构的内部结构 DS18B20 内部功能模块如图所示,主要由 4 部分组成:64 位光刻 R0M、温度传感器、非易失性的温度报警触发器 TH 和 TL、配置寄存器。R0M 中的 64位序列号是出厂前被光刻好的,他可以看作是该 DSISB20 的地址序列码,每个DSI8B20 的 64 位序列号均不相同。高低温

8、报警触发器 TH 和 TL,配置寄存器均由一个字节的 E2PROM 组成,使用一个存储器功能命令可对 TH,TL 或配置寄存器写入。配置寄存器中 R1,R0 决定温度转换的精度位数:R1R000,9位精度,最大转换时间为 93.75 ms;R1R0 = 01,10 位精度,最大转换时间为187.5 ms;R1R0 = 10,11 位精度,最大转换时间为 375 ms;R1R0 =11,12位精度,最大转换时间为 750 ms;未编程时默认为 12 位精度。本系统采用的也是 12 位的精度。 图 23.3 DS18B20 的内存结构的内存结构 DSI8B20 温度传感器的内部存储器包括一个高速暂

9、存 RAM (便笺式的内部存储器)和一个非易失性的可电擦除的 EEPROM,后者存放高温和低温触发器 TH,TL 和结构寄存器。便笺存储器包含了 9 个连续字节(08) ,前两个字节是测得的温度信息,字节 0 的内容是温度的低 8 位,字节 1 是温度的高 8 位,字节 2 是 TH(温度上限报警) ,字节 3 是 TL(温度下限报警) ,字节 4 是配置寄存器,用于确定输出分辨率 9 到 12 位。第 5、6、7 个字节是预留寄存器,用于内部计算。字节 8 是冗余检验字节,校验前面所有 8 个字节的 CRC 码,可用来保证通信正确。 3.4 DS18B20 的测温功能及原理的测温功能及原理当

10、 DSI8B20 接收到温度转换命令后,开始启动转换。转换完成后的温度值就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的 0,1 字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5LSB 形式表示。 DS18B20 的测温原理如图 3所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系

11、数振荡器来决定,每次测量前,首先将-55所对应的基数分别置入减法计数器1、温度寄存器中,减法计数器1和温度寄存器被预置在-55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1 的预置值减到0 时,温度寄存器的值将加1,减法计数器1 的预置将重新被装入,减计数器1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2 计数到0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度

12、值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM 功能命令发存储器操作命令处理数据。各种操作的时序图与DS1820 相同。图 33.53.5 DS18B20 温度传感器与单片机的连接以MCS-51 单片机为例,可采用寄生电源供电方式,P1.1 口接单线总线为保证在有效的DS18B20 时钟周期内提供足够的电流,可用一个M O S F E T 管和89C51 的P1.0来完成对总线的上拉。当DS18B20 处于写存储器操作和温度A/D 变换操作时,总线

13、上必须有强的上拉,上拉开启时间最大为10 s。采用寄生电源供电方式时VDD 和GND 端均接地。由于单线制只有一根线,因此发送接收口必须是三态的。主机控制S18B20 完成温度转换必须经过初始化、ROM 操作指令、存储器操作指令三个步骤,假设单片机系统所用的晶振频率为12MHz,根据DS18B20 的初始化时序、写时序和读时序,分别编写INIT 为初始化子程序,WRITE 为写(命令或数据)子程序,READ 为读数据子程序3 个子程序。所有的数据读写均由最低位开始。3.63.6 提高提高 DS18B20DS18B20 测温精度的方法测温精度的方法DS18B20 正常使用时的测温分辨率为 0.5

14、。如果采取直接读取 DS18B20 内部暂存器的方法,可将 DS18B20 的测温分辨率提高到 0.1 0.01。DS18B20 内部暂存器分布如表 1 所示,其中第 7 字节存放的是当温度寄存器停止加 1 时,计数门关闭后保留在计数器 1 中的值,第 8 字节存放的是每度所对应的计数值,然后,可通过以下方法获得高精度测温的结果。首先用DS18B20 提供的暫存器指令(BEH)读出温度结果,然后转化成 0.5/LSB(最底有效位) ,得到所测实际温度整数部分,记为 TEMP.READ。随后再用 BEH 指令读取计数门关闭后保留在计数器 1 中的值 COUNT.REMAIN 和每度所对应的计数值

15、COUNT.PER.C,由于 DS18B20 测温整数部分以 0.25为进界限关系,所以用下面公式直接计算,可得到高精度实测温度。实际温度TEMP.READ-0.25+(COUNT.PER.C-COUNT.REMAIN)/ COUNT.PER.C四、系统软件设计四、系统软件设计1. 主程序部分(图4) 。2. LCD的初始化(图5) 。下为指令寄存器写入的流程图,向数据寄存器写入数据,即显示的数字符号,只需将RS=1即可。低温度系数振荡器高温度系数振荡器斜率累加器计数器 1预置计数器 20温度寄存器预置比较0加1停止设置/清理LSB3、查询按键子程序设计(图6) 。图 4 图5 图64. 当单

16、总线上接有多个个DS18B20的初始化(图7) 。 图 7 图 8 图 9 图 105. 检测芯片(图 8) 。6.写数据(图 9) 。7.读数据(图 10) 。五系统仿真五系统仿真 Proteus软件是Labcenter公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们

17、能够轻易地获得一个功能齐全、实用方便的单片机实验环境8。 本设计的核心部分为多点温度数据的快速准确读取,完成电路设计和软件编程后,将程序在Keil下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现。仿真效果如下:1.开始画面,提示按一个选择开关。图112.显示相应温度。图123.错误提示。图13六、设计总结六、设计总结刚刚结束了单片机课程的学习,也做过了很多的实验,但真正的去完成一个完整应用系统的设计这是第一次,所以我十分的重视这次机会,虽然时处期末考试期间,我还是抽出很多时间完成设计。从拿到设计课题我就开始了对 DS18B20 温度传感器的信息的采集,对还不曾学习的 LC

18、D 的相关知识进行了解及扩展,联系我所学的知识,我对本系统逐渐有了很清楚的认识,便着手进行系统总体方案设计,硬件框图、硬件系统以及硬件模块的设计,最后是完成系统软件的设计 。我深刻了解的完成这些步骤是完成任何设计的基础,所以每一步都认真对待。在设计过程中我遇到了许多的问题,通过对问题的逐一解决,我学到了许多的知识,同时也获得很多的乐趣,这也激励着我想去做更多的探索。参考文献:参考文献:1. 余永权. 单片机原理及应用. 北京:电子工业出版社, 1997. 2.刘伟 陈盛云 郭毅刚.基于 DS18B20 的温度测量系统的设计与仿真。3. 周月霞,孙传友.DS18B20硬件连接与软件编程。4. 刘

19、君华. 智能传感器系统 M . 西安:西安电子科技大学出版社,1999.5. 邦田. 电子电路实用抗干扰技术 M . 北京:人民邮电出版社,1994.附录:程序。附录:程序。#includeunsigned int shu=0 x30,0 x31,0 x32,0 x33,0 x34,0X35,0 x36,0 x37,0 x38,0 x39;unsigned long t;unsigned char k,f=0;sbit RS=P20;sbit RW=P21;sbit E=P22;sbit DS=P11;void del( int count ) /延时程序while(count-);void

20、delay(unsigned int count)/延时程序int p; while(count-) for(p=0;p125;p+);void write(unsigned char date)/向 DS18B20 中写入数据 int i; for(i=0;i=1; void init(unsigned int n)/ RW=0,RS=0;向指令寄存器中写入命令,即对 1602 初始化。 delay(10); E=0; RS=0; RW=0; E=1; P0=n; E=0; void write_data(unsigned char n)/RS=1,RW=0;向数据寄存器中写入数据,即显示的

21、数符。 delay(10); E=0;RS=1;RW=0;E=1;P0=n; E=0; void write2(unsigned char i) i+=0 x30; if(i=4)i=0; write(0 x55); write(0 x28); write(i); write(0 xc5); write(0 xb8); write(0 x00); write(0 x00); write(0 x00);void matchrom()/匹配 ROM unsigned char i; k=P3; switch(k) case 0: f=1; init(0 x80);write_data(0 x50)

22、; /press init(0 x81);write_data(0 x72); init(0 x82);write_data(0 x65); init(0 x83);write_data(0 x73); init(0 x84);write_data(0 x73); init(0 x85);write_data(0 x80); init(0 x86);write_data(0 x61);/a init(0 x87);write_data(0 x80); init(0 x88);write_data(0 x6b);/key init(0 x89);write_data(0 x65); init(0

23、 x8a);write_data(0 x79); init(0 x8b);write_data(0 x80);init(0 x8c);write_data(0 x21);/! for(i=0 x8d;i=0 xcf;i+)init(i);write_data(0 x80); break; case 1: init(0 x83);write_data(0 x31);/NO 1 write2(0); write(0 x8e); break; case 2: init(0 x83);write_data(0 x32);/NO 2 write2(1); write(0 xb9); break; cas

24、e 4: init(0 x83);write_data(0 x33); /NO 3 write2(2); write(0 xe0); break; case 8: init(0 x83);write_data(0 x34); /NO 4 write2(3); write(0 xd7); break; default: f=1; init(0 x80);write_data(0 x50); /please init(0 x81);write_data(0 x6c);init(0 x82);write_data(0 x65);init(0 x83);write_data(0 x61);init(0

25、 x84);write_data(0 x73); init(0 x85);write_data(0 x65); init(0 x86);write_data(0 x80); init(0 x87);write_data(0 x70); /press init(0 x88);write_data(0 x72); init(0 x89);write_data(0 x65); init(0 x8a);write_data(0 x73); init(0 x8b);write_data(0 x73); init(0 x8c);write_data(0 x80); init(0 x8d);write_da

26、ta(0 x6f); /oneinit(0 x8e);write_data(0 x6e);init(0 x8f);write_data(0 x65); init(0 xc0);write_data(0 x80); init(0 xc1);write_data(0 x80);init(0 xc2);write_data(0 x80);init(0 xc3);write_data(0 x6b);/key init(0 xc4);write_data(0 x65); init(0 xc5);write_data(0 x79); init(0 xc6);write_data(0 x80); init(

27、0 xc7);write_data(0 x6f);/only init(0 xc8);write_data(0 x6e); init(0 xc9);write_data(0 x6c); init(0 xca);write_data(0 x79); init(0 xcb);write_data(0 x80); init(0 xcc);write_data(0 x21);/! init(0 xcd);write_data(0 x80); init(0 xce);write_data(0 x80); init(0 xcf);write_data(0 x80); break; void lcd(uns

28、igned char m) /当为负温度时,液晶显示可以高位为 0 屏蔽. init(0 x80);write_data(0 x4e);/NO init(0 x81);write_data(0 x4f); init(0 x82);write_data(0 x80); init(0 x84);write_data(0 x80); init(0 x85);write_data(0 x74);/temperature init(0 x86);write_data(0 x65); init(0 x87);write_data(0 x6d); init(0 x88);write_data(0 x70);

29、 init(0 x89);write_data(0 x65); init(0 x8a);write_data(0 x72); init(0 x8b);write_data(0 x61); init(0 x8c);write_data(0 x74); init(0 x8d);write_data(0 x75); init(0 x8e);write_data(0 x72); init(0 x8f);write_data(0 x65); init(0 xc0);write_data(0 x80); init(0 xc1);write_data(0 x80); init(0 xc2);write_da

30、ta(0 x69); /is: init(0 xc3);write_data(0 x73); init(0 xc4);write_data(0 x3a); if(m=1) if(t/1000%10)!=0)init(0 xc5);write_data(0 x2d); init(0 xc6);write_data(shut/1000%10); elseinit(0 xc5);write_data(0 xfe); init(0 xc6);write_data(0 x2d); elseif(t/10000!=0) init(0 xc5);write_data(shut/10000); init(0 xc6);write_data(shut/1000%10); else if(t/1000%10)!=0) init(0 xc5);write_data(0 xfe); init(0 xc6);write_data(shut/1000%10); else init(0 xc5);write_data(0 xfe); init(0 xc6);write_data(0 xfe); init(0 xc7);write_data(

温馨提示

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

评论

0/150

提交评论