基于单片机的数字温度计设计报告_第1页
基于单片机的数字温度计设计报告_第2页
基于单片机的数字温度计设计报告_第3页
基于单片机的数字温度计设计报告_第4页
基于单片机的数字温度计设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE18数字温度计设计报告湖南理工学院姓名:赵灿灿班级:1202班院别:物电专业:电子科学与技术学号导老师:梅孝安目录一、 引言 2二、 设计任务与要求 3三、 设计方案 31、 设计方案选择 32、 温度传感器DS18B20介绍及其测温原理 4四、 系统硬件电路的设计 61、 主控制器 62、 显示电路 73、 DS18B20与单片机的接口电路 8五、 系统的软件设计 91、 主程序 92、 读出温度子程序 93、 温度转换命令子程序 104、 计算温度子程序 11六、 测试与仿真 11七、 心得体会 12参考文献 13附录: 14引言在日常生活及工农业生产中,经常要用到温度检测及控制,传统的测温元件有热电偶和热电阻,而热电偶和热电阻输出的一般都是电压,需要信号调理电路、A/D转换及相应的接口电路,才能把电压信号转换成数字信号送到计算机去处理,硬件电路复杂,制作成本高。数字温度计的出现,使得这些问题迎刃而解,它不仅拓宽了温度计的应用范围,而且具有实时性、准确性、高效性等特点。本次设计采用美国DALLAS半导体公司生产的DS18B20作为检测元件,可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。设计任务与要求应用所学知识设计一个数字温度计,要求:1、测温范围在-55~+125℃;2、误差在±0.5℃以内;3、采用液晶屏显示测量温度值;设计方案设计方案选择本次设计采用美国DALLAS半导体公司生产的DS18B20作为检测元件,测量范围为-55~+125℃,最高分辨率可达0.0625℃。DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。总体电路结构框图如图1所示。DS18B20DS18B20主控制器显示电路扫描驱动图1数字温度计总体电路结构框图温度传感器DS18B20介绍及其测温原理(1)DS18B20的性能特点DS18B20是DALLAS公司生产的一线式温度传感器,采用3脚PR35封装或8脚SOIC封装,如图2所示。DQ(2脚)为数字信号输入/输出端,GND(1脚)为电源地,VDD(3脚)为外接供电电源输入端(在寄生电源接线方式时接地)。DS18B20的性能特点如下:

①单线接口,只有一根信号线与CPU连接;②DS18B20支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点组网测温;

③传送串行数据,不需要外部元件。

④可通过数据线供电,电压范围为3.0-5.5V;

⑤零待机功耗;

⑥温度以9或12位数字,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;

⑦用户可定义报警设置;

⑧报警搜索命令识别并标志超过程序限定温度的器件;

⑨现场温度以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。图2DS18B20引脚排列图 (2)DS18B20的内部结构图3DS18B20内部结构图 DS18B20接收到温度转换命令后,开始启动转换。完成后的温度值用16位符号扩展的二进制补码读数形式存储在高速暂存RAM的第0、1字节中。单片机可以通过单线接口读出该数据。读数据时,低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。SSSSS262524232221202-12-22-32-4符号位整数部分小数部分(3)DS18B20的测温原理 DS18B20的测温原理如图4所示,图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号给计数器1。高温度系数晶振随温度变化其振动频率明显改变,所产生的信号作为计数器2的脉冲输入。系统硬件电路的设计主控制器主控制器选用Atmel公司89系列单片机中AT89C51。AT89C51单片机片内有4KB的Flash存储器,可以在线下载程序,方便在系统的开发过程中进行程序的调试。晶振采用12MHZ。图5AT89C51外部芯片及引脚排列图显示电路采用液晶显示屏LCD1602显示,第一行显示“Currenttemp”,第二行显示实时温度。用P0口进行LCD1602的数据写操作,P2.0~P2.2口进行LCD1602的命令控制端口。电路图如下:图6温度显示电路DS18B20与单片机的接口电路DS18B20与单片机的连接有两种方法,一种是VDD接外部电源,GND接地,DQ与单片机的I/O线相连;另一种是用寄生电源供电;本设计采用外接电源方式,DQ端(2脚)接AT89C51的P3.3脚与微处理器通信。图7DS18B20与单片机的接口电路系统的软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。主程序主程序的主要功能是测温系统初始化,温度的实时显示、读出并处理DS18B20的测量温度值。主程序流程图如图8所示。YYN初始化调用显示子程序初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令图8主程序流程图读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。读出温度子程序流程图如图9所示。NNNYY发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正确移入温度暂存器结束图9读出温度子程序流程图温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750ms。程序流程图如图10所示。结束结束发读取温度命令发跳过ROM命令发DS18B20复位命令计算温度子程序计算温度子程序将RAM中的读取值进行BCD码的转换、运算,并进行温度值正负的判定。程序流程图如图11所示。NNY开始温度零下温度值取补码置“—”标志计算小数位温度BCD值计算整数位温度BCD值结束置“+”标志图11计算温度子程序流程图测试与仿真本设计是在ISIS7Professional环境下进行仿真的,仿真所用到的器件有:单片机AT89C51,温度传感器DS18B20,蜂鸣器,液晶显示器,一些电阻,电容等。以下是仿真电路图: 由图可知:本设计在仿真条件下可以正确的显示温度,且可以精确到0.1℃心得体会总的来说,这次课程设计还是挺成功的。但在这个过程中,还是遇到了不少了问题,最后在老师和同学的帮助下,终于成功的解决了问题。通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念。单片机课程设计的重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过一些程序,但觉的要写好一个程序并不是一件简单的事,我们只有不断的调试,不断的修改才能把程写的更好。很多时候,只有我们去试着做了,才能真正的掌握,只学习理论往往是不够的,实践才是硬道理。参考文献[1]《单片机原理及应用》第二版.曾屹著.中南大学出版社[2]《电子技术基础》(第五版)华中科技大学电子技术课程组编[M].康华光著.高等教育出版社[3]《单片机课程指导》楼然苗、李光飞编著,北京航空航天大学大学出版社[4]《51单片机C语言教程》郭天祥编著附录:1、主程序main.c#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoidInitialize_LCD();voidShowString(ucharx,uchary,uchar*str);voidDelayms(uint); intGet_Temperature();voidto_str(intx,uchar*p)//将整数x转换为字符串{ ucharws[4];intt;//t为x的绝对值 if(x<0){p[0]='-';t=x*(-1);}else{p[0]='';t=x;} ws[3]=t/1000;ws[2]=t%1000/100;ws[1]=t%100/10;ws[0]=t%10; p[1]=ws[3]+'0'; p[2]=ws[2]+'0';p[3]=ws[1]+'0'; p[4]='.';p[5]=ws[0]+'0'; p[6]='C'; if(ws[3]==0)p[1]=''; if(ws[3]==0&&ws[2]==0)p[2]='';}voidmain(){ intt; ucharcodestr1[16]="XH; ucharcodestr2[16]="XM:zhaocancan"; ucharstr3[16]="CurrentTemp:"; uchartemp[16]=""; Initialize_LCD(); ShowString(0,0,str1); ShowString(0,1,str2); Delayms(5000); ShowString(0,0,str3); while(1) { t=Get_Temperature(); to_str(t,temp+4); ShowString(0,1,temp); Delayms(100); }}2、温度传感器子程序DS18B20.c#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^3;voidDelay(uintx){ while(--x);}ucharInit_DS18B20()//成功返回0,失败返回1{ ucharstatus;DQ=1; Delay(8); DQ=0;Delay(90);DQ=1;Delay(8); status=DQ;Delay(100);DQ=1; returnstatus;}voidWriteOneByte(uchardat){ uchari; for(i=0;i<8;i++) { DQ=0;DQ=dat&0x01;Delay(5); DQ=1;dat>>=1; }}ucharReadOneByte(){ uchari,dat=0;DQ=1;_nop_(); for(i=0;i<8;i++) { DQ=0;dat>>=1; DQ=1;_nop_();_nop_(); if(DQ)dat|=0x80;Delay(30);DQ=1; } returndat;}intGet_Temperature(){ intt;floattt; uchara,b,fh;//fh表示负号 if(Init_DS18B20()==1) t=2000;//初始化失败,温度应小于125 else { WriteOneByte(0xcc);//跳过读序列号,可加速 WriteOneByte(0x44);//启动温度转换 Init_DS18B20(); WriteOneByte(0xcc);//跳过读序列号,可加速 WriteOneByte(0xbe);//读取温度寄存器 a=ReadOneByte();//低位 b=ReadOneByte();//高位 Delay(100); fh=b&0x80; if(fh!=0)//fh的最高位为1,表示负号 { b=~b;a=~a; tt=((b*256)+a+1)*0.0625;t=(int)(tt*10)*(-1); } else { tt=((b*256)+a)*0.0625;t=(int)(tt*10);} } returnt;}3、显示子程序LCD1602.c#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^2;voidDelayms(uintms){ uchari; while(ms--) { for(i=0;i<120;i++); }}ucharBusy_Check(){ ucharLCD_Status; RS=0;RW=1;EN=1;Delayms(1); LCD_Status=

温馨提示

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

评论

0/150

提交评论