完整版基于AT89C51单片机的多点温度测量系统毕业设计论文.docx
- 文档编号:5333486
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:18
- 大小:248.96KB
完整版基于AT89C51单片机的多点温度测量系统毕业设计论文.docx
《完整版基于AT89C51单片机的多点温度测量系统毕业设计论文.docx》由会员分享,可在线阅读,更多相关《完整版基于AT89C51单片机的多点温度测量系统毕业设计论文.docx(18页珍藏版)》请在冰豆网上搜索。
完整版基于AT89C51单片机的多点温度测量系统毕业设计论文
单片机应用系统设计
课题:
基于AT89C51单片机的多点温度测量系统设计
姓名:
班级:
学号:
指导老师:
日期:
目录
一、绪论………………………………………………………………1
二、总体方案设计……………………………………………………1
三、硬件系统设计………………………………………………………1
1主控制器………………………………………………………………1
2显示模块………………………………………………………………2
3温度采集模块…………………………………………………………3
3.1DSl8B20的外部管脚及特点………………………………………………4
3.2DS18B20的内部结构…………………………………………………………4
3.3DS18B20的内存结构……………………………………………………5
3.4DS18B20的测温功能及原理………………………………………………5
3.5DS18B20温度传感器与单片机的连接……………………………………6
3.6提高DS18B20测温精度的方法………………………………………………6
四、系统软件设计………………………………………………………………6
五、系统仿真………………………………………………………………………9
六、设计总结……………………………………………………………………10
参考文献………………………………………………………………………11
附录……………………………………………………………………………12
一、绪论
典型的温度测控系统是由模拟温度传感器、AD转换电路和单片机组成。
但是由于模拟温度传感器输出为模拟信号,必须经过AD转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构复杂,成本较高。
近年来,由于以DS18B20为代表的新型单总线数字式温度传感器的突出优点使得它得到充分利。
DS18B20集温度测量和AD转换于一体,直接输出数字量,接口几乎不需要外围元件,硬件电路结构简单,传输距离远,可以很方便的实现多点测量;与单片机接口几乎不需要外围元件,使得硬件电路结构简单,广泛使用于距离远,节点分布多的场合。
二、系统总体方案设计
本设计完成的任务是设计基于AT89C51单片机的多点温度测量系统,此系统能连续测量多点温度,测量精确度为0.1度,并在LCD显示器上完成显示。
系统总体方案设计具体如下:
图1
总的来说,本系统有四大部分组成:
单片机控制部分,温度显示部分,温度传感器组和测点选择开关部分。
温度采集可以利用温度传感器测量目标物体的温度,该温度经处理成数字信号传送给单片机,单片机可以很高效的采集外部传送过来的数字信号,在其内部经软件算法处理,转化为相应的温度值经显示模块显示出所测得的温度。
三、硬件系统设计
1、主控制器(单片机)
基于设计的要求要使用AT89C51单片机作为本系统设计的核心器件。
由于AT89C51单片机是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能cMOS8位微处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,所以本系统采用AT89C51单片机作为系统的主控制器。
其特点如下:
①4K字节可编程闪速程序存储器:
1000次循环写擦
②全静态工作:
OHz-24MHz
③三级程序存储器锁定
④128X8位内部数据存储器,32条可编程I0线
⑤两个十六位定时器计数器,六个中断源
⑥可编程串行通道,低功耗闲置和掉电模式
2.显示模块
本设计要求用LCD显示器来显示测出的温度。
LCD系列中LM016L型号的为2行16列液晶,可显示2行16列英文字符,有8位数据总线D0-D7,RS,RW,EN三个控制端口(共14线),工作电压为5V。
没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚)。
可以完全实现本设计的显示功能。
3.温度采集模块
本设计用的是DS18B20温度传感器,它是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
3.1DSl8B20的外部管脚及特点
DS18B20的性能特点如下:
①独特的单线接口方式:
DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
②在使用中不需要任何外围元件。
③可用数据线供电,电压范围:
+3.0V~+5.5V。
④测温范围:
-55℃~+125℃。
固有测温分辨率为0.5℃。
⑤通过编程可实现9~12位的数字读数方式。
⑥用户可自设定非易失性的报警上下限值。
⑦支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
⑧负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
3.2DS18B20的内部结构
DS18B20内部功能模块如图所示,主要由4部分组成:
64位光刻R0M、温度传感器、非易失性的温度报警触发器TH和TL、配置寄存器。
R0M中的64位序列号是出厂前被光刻好的,他可以看作是该DSISB20的地址序列码,每个DSI8B20的64位序列号均不相同。
高低温报警触发器TH和TL,配置寄存器均由一个字节的E2PROM组成,使用一个存储器功能命令可对TH,TL或配置寄存器写入。
配置寄存器中R1,R0决定温度转换的精度位数:
R1R0=’00’,9位精度,最大转换时间为93.75ms;R1R0=‘01’,10位精度,最大转换时间为187.5ms;R1R0=‘10’,11位精度,最大转换时间为375ms;R1R0=’11’,12位精度,最大转换时间为750ms;未编程时默认为12位精度。
本系统采用的也是12位的精度。
图2
3.3DS18B20的内存结构
DSI8B20温度传感器的内部存储器包括一个高速暂存RAM(便笺式的内部存储器)和一个非易失性的可电擦除的EEPROM,后者存放高温和低温触发器TH,TL和结构寄存器。
便笺存储器包含了9个连续字节(0~8),前两个字节是测得的温度信息,字节0的内容是温度的低8位,字节1是温度的高8位,字节2是TH(温度上限报警),字节3是TL(温度下限报警),字节4是配置寄存器,用于确定输出分辨率9到12位。
第5、6、7个字节是预留寄存器,用于内部计算。
字节8是冗余检验字节,校验前面所有8个字节的CRC码,可用来保证通信正确。
3.4DS18B20的测温功能及原理
当DSI8B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃LSB形式表示。
DS18B20的测温原理如图3所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1、温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作必须按协议进行。
操作协议为:
初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
各种操作的时序图与DS1820相同。
图3
3.5DS18B20温度传感器与单片机的连接
以MCS-51单片机为例,可采用寄生电源供电方式,P1.1口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管和89C51的P1.0来完成对总线的上拉。
当DS18B20处于写存储器操作和温度AD变换操作时,总线上必须有强的上拉,上拉开启时间最大为10μs。
采用寄生电源供电方式时VDD和GND端均接地。
由于单线制只有一根线,因此发送接收口必须是三态的。
主机控制S18B20完成温度转换必须经过初始化、ROM操作指令、存储器操作指令三个步骤,假设单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序3个子程序。
所有的数据读写均由最低位开始。
3.6提高DS18B20测温精度的方法
DS18B20正常使用时的测温分辨率为0.5℃。
如果采取直接读取DS18B20内部暂存器的方法,可将DS18B20的测温分辨率提高到0.1℃—0.01℃。
DS18B20内部暂存器分布如表1所示,其中第7字节存放的是当温度寄存器停止加1时,计数门关闭后保留在计数器1中的值,第8字节存放的是每度所对应的计数值,然后,可通过以下方法获得高精度测温的结果。
首先用DS18B20提供的暫存器指令(BEH)读出温度结果,然后转化成0.5℃LSB(最底有效位),得到所测实际温度整数部分,记为TEMP.READ。
随后再用BEH指令读取计数门关闭后保留在计数器1中的值COUNT.REMAIN和每度所对应的计数值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即可。
3、查询按键子程序设计(图6)。
图4
图5图6
4.当单总线上接有多个个DS18B20的初始化(图7)。
图7图8
图9图10
5.检测芯片(图8)。
6.写数据(图9)。
7.读数据(图10)。
五.系统仿真
Proteus软件是Labcenter公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制与仿真。
Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。
通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验环境[8]。
本设计的核心部分为多点温度数据的快速准确读取,完成电路设计和软件编程后,将程序在Keil下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现。
仿真效果如下:
1.开始画面,提示按一个选择开关。
图11
2.显示相应温度。
图12
3.错误提示。
图13
六、设计总结
刚刚结束了单片机课程的学习,也做过了很多的实验,但真正的去完成一个完整应用系统的设计这是第一次,所以我十分的重视这次机会,虽然时处期末考试期间,我还是抽出很多时间完成设计。
从拿到设计课题我就开始了对DS18B20温度传感器的信息的采集,对还不曾学习的LCD的相关知识进行了解及扩展,联系我所学的知识,我对本系统逐渐有了很清楚的认识,便着手进行系统总体方案设计,硬件框图、硬件系统以及硬件模块的设计,最后是完成系统软件的设计。
我深刻了解的完成这些步骤是完成任何设计的基础,所以每一步都认真对待。
在设计过程中我遇到了许多的问题,通过对问题的逐一解决,我学到了许多的知识,同时也获得很多的乐趣,这也激励着我想去做更多的探索。
参考文献:
[1].余永权.单片机原理及应用.北京:
电子工业出版社,1997.
[2].刘伟陈盛云郭毅刚.基于DS18B20的温度测量系统的设计与仿真。
[3].周月霞,孙传友.DS18B20硬件连接与软件编程。
[4].刘君华.智能传感器系统[M].西安:
西安电子科技大学出版社,1999.
[5].邦田.电子电路实用抗干扰技术[M].北京:
人民邮电出版社,1994.
附录:
程序。
#include {delay(10); E=0; RS=0; RW=0; E=1; P0=n; E=0; } voidwrite_data(unsignedcharn)RS=1,RW=0;向数据寄存器中写入数据,即显示的数符。 {delay(10); E=0; RS=1; RW=0; E=1; P0=n; E=0; } voidwrite2(unsignedchari) {i+=0x30; if(i==4){i=0;} write(0x55); write(0x28); write(i); write(0xc5); write(0xb8); write(0x00); write(0x00); write(0x00); } voidmatchrom()匹配ROM { unsignedchari; k=P3; switch(k) {case0: {f=1; init(0x80);write_data(0x50);press init(0x81);write_data(0x72); init(0x82);write_data(0x65); init(0x83);write_data(0x73); init(0x84);write_data(0x73); init(0x85);write_data(0x80); init(0x86);write_data(0x61);a init(0x87);write_data(0x80); init(0x88);write_data(0x6b);key init(0x89);write_data(0x65); init(0x8a);write_data(0x79); init(0x8b);write_data(0x80); init(0x8c);write_data(0x21);! for(i=0x8d;i<=0xcf;i++) {init(i);write_data(0x80);} }break; case1: {init(0x83);write_data(0x31);NO1 write2(0); write(0x8e);}break; case2: {init(0x83);write_data(0x32);NO2 write2 (1); write(0xb9);}break; case4: {init(0x83);write_data(0x33);NO3 write2 (2); write(0xe0);}break; case8: {init(0x83);write_data(0x34);NO4 write2(3); write(0xd7);}break; default: {f=1; init(0x80);write_data(0x50);please init(0x81);write_data(0x6c); init(0x82);write_data(0x65); init(0x83);write_data(0x61); init(0x84);write_data(0x73); init(0x85);write_data(0x65); init(0x86);write_data(0x80); init(0x87);write_data(0x70);press init(0x88);write_data(0x72); init(0x89);write_data(0x65); init(0x8a);write_data(0x73); init(0x8b);write_data(0x73); init(0x8c);write_data(0x80); init(0x8d);write_data(0x6f);one init(0x8e);write_data(0x6e); init(0x8f);write_data(0x65); init(0xc0);write_data(0x80); init(0xc1);write_data(0x80); init(0xc2);write_data(0x80); init(0xc3);write_data(0x6b);key init(0xc4);write_data(0x65); init(0xc5);write_data(0x79); init(0xc6);write_data(0x80); init(0xc7);write_data(0x6f);only init(0xc8);write_data(0x6e); init(0xc9);write_data(0x6c); init(0xca);write_data(0x79); init(0xcb);write_data(0x80); init(0xcc);write_data(0x21);! init(0xcd);write_data(0x80); init(0xce);write_data(0x80); init(0xcf);write_data(0x80);}break; } } voidlcd(unsignedcharm)当为负温度时,液晶显示可以高位为0屏蔽. {init(0x80);write_data(0x4e);NO init(0x81);write_data(0x4f); init(0x82);write_data(0x80); init(0x84);write_data(0x80); init(0x85);write_data(0x74);temperature init(0x86);write_data(0x65); init(0x87);write_data(0x6d); init(0x88);write_data(0x70); init(0x89);write_data(0x65); init(0x8a);write_data(0x72); init(0x8b);write_data(0x61); init(0x8c);write_data(0x74); init(0x8d);write_data(0x75); init(0x8e);write_data(0x72); init(0x8f);write_data(0x65); init(0xc0);write_data(0x80); init(0xc1);write_data(0x80); init(0xc2);write_data(0x69);is: init(0xc3);write_data(0x73); init(0xc4);write_data(0x3a); if(m==1) {if((t1000%10)! =0) {init(0xc5);write_data(0x2d); init(0xc6);write_data(shu[t1000%10]); } else {init(0xc5);write_data(0xfe); init(0xc6);write_data(0x2d); } } else {if(t10000! =0) {init(0xc5);write_data(shu[t10000]); init(0xc6);write_data(shu[t1000%10]); } else {if((t1000%10)! =0) {init(0xc5);write_data(0xfe); init(0xc6);write_data(shu[t1000%10]); } else {init(0xc5);write_data(0xfe); init(0xc6);write_data(0xfe); } } init(0xc7);write_data(shu[t100%10]); init(0xc8);write_data(0x2e); init(0xc9);write_data(shu[(t%100)10]); init(0xcb);write_data(0x27); init(0xcc);write_data(0x43); init(0xcd);write_data(0x80); init(0xce);write_data(0x80); init(0xcf);write_data(0x80); } } voidjiance()初始化,即检测是否存在DS18B20. {unsignedcharn=0; do{DS=1; DS=0;主机将总线从高电平拉到低电平 del(100);持续400us~960us DS=1;然后释放总线 del(10);DS18B20检测到总线上升沿后,等待15us~60u后发低电平。 n=DS; del(20);低电平至少要持续60~240us }while(n==1);60~240us内若为高电平则要重新检测。 } read()从DS18B20中读出数据 {unsignedchari; unsignedlongdate=0; for(i=0;i<16;i++) {DS=0;主机在某一时刻将总线从高电平拉到低电平. date>>=1; DS=1; de
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 基于 AT89C51 单片机 多点 温度 测量 系统 毕业设计 论文