课程设计(论文)基于单片机的数字温度计DS18B20

上传人:仙*** 文档编号:32113934 上传时间:2021-10-13 格式:DOC 页数:20 大小:303KB
收藏 版权申诉 举报 下载
课程设计(论文)基于单片机的数字温度计DS18B20_第1页
第1页 / 共20页
课程设计(论文)基于单片机的数字温度计DS18B20_第2页
第2页 / 共20页
课程设计(论文)基于单片机的数字温度计DS18B20_第3页
第3页 / 共20页
资源描述:

《课程设计(论文)基于单片机的数字温度计DS18B20》由会员分享,可在线阅读,更多相关《课程设计(论文)基于单片机的数字温度计DS18B20(20页珍藏版)》请在装配图网上搜索。

1、课程设计说明书目录一 概述1二 AT89C52的介绍22.1 简介22.2 内部结构22.3 引脚2三 DS18B20介绍43.1 DS18B20简介43.2 DS18B20的性能特点43.3 DS18B20工作原理5四 系统设计64.1设计要求64.2设计原理64.3 系统组成64.4 系统程序的设计74.4.1主程序74.4.2 读温度子程序84.4.3 温度转换子程序94.4.4 计算温度子程序94.4.5 显示数据刷新子程序10五 硬件电路分析115.1 系统电路分析115.2 时钟振荡电路115.3 测温电路125.4 复位电路125.5 报警电路125.6 显示电路13六 总结与体

2、会14七 参考文献15附录(源代码)16一 概述随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求也在不断增长,而如何准确而又迅速的获得这些参数就取决于现代信息基础的发展水平。在现代信息采集技术中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域应用广泛,可以说是渗透到社会的每一个领域,与人的生活与环境的温度息息相关,因此研究温度的测量方法和装置具有重要的意义。测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:传统的分立式温度传感器模拟集成温度传感器智能集成温度传感器。目前的智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的,它是

3、微电子技术、计算机技术和自动测试技术(ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。本文将介绍智能集成温度传感器DS18B20的结构特征及控制方法,并对以此传感器和AT89C52单片机控制器构成的数字温度测量装置的工作原理及程序设计作了详细的介绍。与传统的温度计相比,其具有读数方便,测温范围广,测温准确

4、,输出温度采用数字显示,主要用于对测温要求比较准确的场所。本设计是一个数字温度测量及控制系统,能测量前的温度,并能在超限的情况下进行控制、调整,并报警。保证环境保持在限定的温度中,控制芯片使用AT89C52单片机,测温传感器使用DS18B20,用LED数码管来实现温度显示。本设计采用了新型单片机对温度进行控制,以其测量精度高,操作简单,可运行性强,价格低廉等优点,适用于生活,医疗,工业生产等方面的温度测量及控制。二 AT89C52的介绍2.1 简介AT89C52是一个低电压,高性能CMOS 8位单片机带有4K字节的可反复擦写的程序存储器(PENROM)和128字节的存取数据存储器(RAM),这

5、种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。片内含有8位中央处理器和闪烁存储单元,有较强的功能的AT89C52单片机能够被应用到控制领域中。2.2 内部结构CPU(运算器)(控制器)数据存储器RAM程序存储器4KB Flash ROMP0P2P3P1串行口定时器/计数器中断系统特殊功能寄存器(SFR)XTAL1XTAL2ALEPSENEARESET888889C52图1 89C52单片机片内结构AT89C52的片内结构如图1所示,它把那些作为控制应用所必需的基本功能部件都集成在一个尺寸有限的集成电路芯片上,其功能部件包括微处理器(CPU),

6、数据存储器(RAM),程序存储器(4KB Flash ROM),4个8位可编程并行I/O口(P0口、P1口、P2口、P3口),1个全双工串行口,2个16位定时器/计数器,中断系统,特殊功能寄存器(SFR)。这些功能部件通过片内单一总线连接而成,如图1所示,其基本结构是CPU加上外围芯片的传统微型计算机结构模式。2.3 引脚89C52系列及89C52系列中各种型号芯片的引脚是互相兼容的。目前89C52单片机多采用40只引脚的双列直插封装(DIP)方式,如图2所示。40只引脚按其功能可分为如下3类:(1) 电源及时钟引脚Vcc、Vss;XTAL1、XTAL2。(2) 控制引脚PSEN、ALE、EA

7、、RESEET。(3) I/O引脚P0、P1、P2、P3,为4个8位I/O口得外部引脚。图2 89C52的外部引脚三 DS18B20介绍3.1 DS18B20简介DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。3.2 DS18B20的性能特点独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;测量温度范围为-55至+125,精度为0.5

8、零待机功耗;温度以9或12位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 其内部结构图为:图3 DS18B20内部结构图3.3 DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输

9、入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 斜率累加器预置比较低温度系数晶振高温度系数晶振计数器1计数器2预置温度寄存器为0不为0加1停止LSB置位/清除图4 DS18B20测温原理四 系统设计4.1设计要求数字式温度

10、计要求测温范围为55C125C,精度误差在0.5C以内,LED数码管显示温度,超过温度上下限报警。但是考虑实际情况,本设计硬件下载显示为室温,超过34C报警。4.2设计原理利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报警限比较,超过范围后通过扬声器报警,同时将处理后的数据送到LED中显示。4.3 系统组成本设计是以AT89C52单片机为核心设计的一种数字温度控制系统,系统整体硬件电路包括传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。系统框图主要由主控

11、制器、单片机复位、报警按键设置、时钟振荡、LED显示、温度传感器组成。系统框图如图所示:时钟振荡报警点按键调整LED显示单片机复位主控芯片温度传感器图5 系统框图4.4 系统程序的设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,报警子程序和显示数据刷新子程序等。4.4.1主程序主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的测量温度值。温度测量每1s进行一次。流程图如下图所示:初始化显示调用子程序1s到?初次上电?读出温度值温度计算处理显示数据刷新发温度转换开始命令图6 主程序流程图4.4.2 读温度子程序读出温度子程的主要功能是读出RAM中的9

12、字节,在读出时须进行CRC校验,校验有错时不能进行温度数据的改写。流程图如下图所示:Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?结束CRC校验正确?移入温度暂存器NYN图7 读温度子程序流程图4.4.3 温度转换子程序温度转换子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750 ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。流程图如下图所示:发DS18B20复位命令发跳过ROM命令发温度转换开始命令结束图8 温度转换子程序流程图4.4.4 计算温度部分计算温度部分将RAM中读取的值进行BCD码的转换运算,并进行温度值正

13、负的判断。开始温度零下?温度值取补码置“-”标志计算小数位温度BCD值计算整数位温度BCD值结束置“+”标志YN图9 计算温度部分流程图其流程图如下图所示:4.4.5 显示数据刷新部分显示数据刷新部分主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。程序流程图如下图所示:温度数据移入显示寄存器十位数0?百位数0?百位数显示数据(不显示符号)十位数显示符号百位数不显示结束图10 显示数据刷新部分流程图 Y NYN五 硬件电路分析5.1 系统电路分析系统电路仿真图如图11所示,由主控制芯片、时钟振荡电路、测温电路、复位电路、报警电路和显示电路组成。图11

14、系统电路仿真图5.2 时钟振荡电路时钟振荡电路由12MHz的晶振和2个电容器组成,连接单片机的两时钟引脚。 图12 时钟振荡电路仿真图5.3 测温电路测温电路主要由DS18B20及其外围电路组成。图13 测温电路 5.4 复位电路 复位电路由复位电容和电阻组成,主要是上电复位。图14 复位电路5.5 报警电路报警电路主要由三极管、基极电阻和蜂鸣器组成。图15 报警电路5.6 显示电路 显示电路由LED数码管,74HC245和74HC164组成,其中数码管显示温度,74HC245控制数码管的位码,74HC164控制数码管的段码。图16 显示电路六 总结与体会通过这次数字温度计的设计与制作,让我了

15、解了设计硬件电路,调试程序,各种芯片的用法,如何简化电路等方面的知识。也了解了关于数字温度计和时钟的原理与设计理念,要设计一个电路总要先用仿真,访真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线时有着各种各样的条件制约。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。从查资料找合适的方案和电路开始,元件焊接、调试程序、仿真、烧录程序都由我们自己完成,其中遇到了很多问题。电子元件与设想的不同需要改方案,焊接中检查是否焊错,修改程序使之符合自己的电路并调试成功,烧录芯片并调试成功,每一步都有可能出现问题,我们所做的就是面对困难,改正错误,使自己的作品更加完

16、善。 在这一次的课程设计中,让我真正意识到,在以后的学习中,要经常多写、多读程序,这样才能提高自己的编程水平,要理论联系实际,把所学的东西应用到实际中去,并在实践中发现问题、解决问题以提高自身能力。七 参考文献1 张毅刚,彭喜元. 单片机原理与应用设计. 电子工业出版社,2010.2 张毅刚. MCS-51单片机原理及应用. 哈尔滨工业大学出版社,2004.3 沙占友. 单片机外围电路设计. 电子工业出版社,2003.4 何希才. 传感器及其应用电路. 电子工业出版社,2001.5 何立民. 单片机中级教程.北京航空航天大学出版社,2009.6 丁元杰. 单片机原理与应用.机械工业出版社,20

17、08.7 孙育才. MCS-51系列单片微型计算机及其应用.东南大学出版社,2008.附录(源代码)#includesbit DQ = P37;/定义DQ引脚为P3.7 sbit ls1=P23;/百位公共极 sbit ls2=P24;/十位公共极 sbit ls3=P25;/个位公共极 sbit ls4=P26;/十分位公共极 sbit P31 = P31;/74hc164通讯时钟脚sbit P30 = P30;/74hc164通讯数据线 sbit Warning = P13; /报警引脚 低电平报警 #define DELAY_TIME 40 /刷新温度延时 #define WARNING

18、_HT125/高温报警温度 #define WARNING_LT-55/低温报警温度 unsigned char tab=0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, /090xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,/09带小数点 0x00,0x40;/不显示 - unsigned char dot_num=0,1,1,2,2,3,4,4,5,6,6,7,7,8,9,9;/分辨率为0.1,为计算方便小数部分直接查表获得unsigned char get_temp2,dis4;/nu

19、m为定时时间倍数/*ds18b20延迟子函数(晶振12MHz )*/ /*DS18B20对时间要求很严,但只能长不能短*在11.0592M下也行,因为时间长些*/void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/给一个长度至少为480us的负脉冲复位,负脉冲之后读数, /从单线上读数之后至少要延时90us,反正写入和读出数据之后都要延时 void Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ复位DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于

20、 480usDQ = 1; /拉高总线 x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);/必要,至少要90us以上 /*ds18b20读一个字节*/ /给单线一个上升沿,并且给单线上高电平之后根据单线的电平变化读入数据。 /从低位到高位,每读完一位必须延时24us以上, unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号 dat=1;DQ = 1; / 给脉冲信号 if(DQ)dat|=0x

21、80;delay_18B20(4);/必要的延时,24us以上 return(dat); /*ds18b20写一个字节*/ void WriteOneChar(unsigned char dat)/给单线一个上升沿,并且在给单线高电平之前完成写入一位, /根据数据的每一位给单线相应的电平,在加高电平之前,给单线赋值之后必须延时12us以上 unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;delay_18B20(5);/必要的延时,至少12us以上 DQ = 1;dat=1; /*读取ds18b20当前温度*/1、写暂存寄存器(4E

22、H), /2。启动温度变换(44H), /3、读暂存寄存器(BEH), /4、复制暂存寄存器(43H), /5、重新把非易失性存储器内的数据调入暂存寄存器(E3H), /6、读电源(B4) 这6种存储器操作命令,每写入一种命令之前要初始化,对ROM的操作, /写入之后要延时至少480us。对于只有一个器件的情况,ROM操作可以只是(0XCC) void ReadTemperature(char TH,char TL,unsigned char RS)Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x4E); / /写入写

23、暂存器命令,修改TH和TL和分辩率配置寄存器,先写TH,再写TL,最后写配置寄存器 WriteOneChar(TH);/写入想设定的温度上限WriteOneChar(TL);/写入想设定的温度下限WriteOneChar(RS);/写配置寄存器,格式为0 R1 R0 1,1 1 1 1, R1R0=00分辨率为9位,R1R0=11分辨率为12位delay_18B20(80); / this message is very importantInit_DS18B20(); WriteOneChar(0xCC); / 跳过读序号列号的操作 WriteOneChar(0x44); / 启动温度转换d

24、elay_18B20(80); / this message is very importantInit_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度,温度位是低字节的高4位(温度低4位),高字节的低4位(温度高4位),其中有效小数位在低字节的第三第四位get_temp0=ReadOneChar(); /读取温度值低位get_temp1=ReadOneChar(); /读取温度值高位delay_18B20(80); void delay_1ms(int x)/延

25、时 x ms int i,j;for(i=x;i0;i-)for(j=110;j0;j-);void main()unsigned char zhengshu,xiaoshu;unsigned delaytime,flag;/flag为1则温度为负 unsigned int tempnum; char i,j; while(1)ReadTemperature(125,-55,0x7f);/12位分辨率,也即用12位存放温度,高8位为整数,低4位为小数 flag=0; /清除负数标志 if(get_temp1&0x08)/符号标志位为1则表示温度为负 tempnum=get_temp14)&0x

26、00FF; /取整数部分 flag=1; else xiaoshu=get_temp0&0x0F;/取小数部分 zhengshu=get_temp14);/取整数部分 /报警判断 if (WARNING_HT=zhengshu)Warning=0;else Warning=1; dis0=dot_numxiaoshu;/查表确定小数部分数值 dis1=zhengshu%10+10;/计算整数部分各位的数值 dis2=(zhengshu/10)%10;dis3=(zhengshu/100);while(delaytime-)/循环显示 if(flag)dis3=21; /温度未负数时将第一位设置为“-” for(j=0;j4;j+) /轮流显示四个数码管if(j=0)ls4=0;if(j=1)ls1=0;if(j=2)ls2=0;else ls3=0;/关闭之前显示的数码管 for(i=0;i8;i+)/发送串行信息至数码管 P31=0;P30=(tabdisj7;P31=1; if(j=0)ls1=1;/开启数码管 if(j=1)ls2=1;if(j=2)ls3=1;else ls4=1;delay_1ms(5); delaytime=DELAY_TIME;/循环显示结束,重新获取温度信息 - 19 -

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!