收藏 分销(赏)

数字温度计(18B20与1602).doc

上传人:精*** 文档编号:2622218 上传时间:2024-06-03 格式:DOC 页数:24 大小:905.54KB
下载 相关 举报
数字温度计(18B20与1602).doc_第1页
第1页 / 共24页
数字温度计(18B20与1602).doc_第2页
第2页 / 共24页
数字温度计(18B20与1602).doc_第3页
第3页 / 共24页
数字温度计(18B20与1602).doc_第4页
第4页 / 共24页
数字温度计(18B20与1602).doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、数字温度计(18B20与1602) 作者: 日期:2 个人收集整理 勿做商业用途学校logo专业: 请 输 入 专 业 班级: 请 输 入 班 级 学生姓名: 请 输 入 姓 名 指导教师: 请输入指导教师 完成时间: 2024年5月16日 请输入论文标题 1.课程设计的目的和要求11.1设计目的11。2课程设计题目描述和要求12. 总体方案设计 12。1总体设计框图12.2单片机AT89C51 22.3主要硬件介绍 32。3。1 DS18B20简介32.3.2 DS18B20的测温原理42。3。3温度转换计算方法举例52.3。4 DS18B20温度传感器与单片机的接口电路52。3。5 160

2、2液晶说明 63.系统硬件电路设计83.1主板电路83。2显示电路93.3温度连接电路94。系统软件的设计104。1主程序流程图 104.2读程序流程图 104.3温度转换命令子程序流程图 114.4计算温度子程序流程图 114.5主程序源代码 124.6 1602显示源代码 134.7 18B20源代码 155。总结 18参考文献 191.课程设计的目的和要求1。1设计目的熟练掌握51小系统开发应用;加强单片机的综合运用能力、提高单片机的件编程和调试能力,为以后的学习和开发工作打下强劲基础;掌握DS18B20温度传感器模块的工作原理及应用设计;掌握1602液晶显示模块的工作原理及应用设计;掌

3、握小系统开发设计的流程及设计思路;提高分析问题,解决问题能力,提高实践动手能力。1.2课程设计题目描述和要求题目:基于DS18B20的温度测试LED显示。实现的基本功能:(1) 测量基本范围-55125。(2) 精度误差小于0。5。(3) 1602液晶显示。2.总体方案的设计2。1总体设计框图 温度计电路设计总体设计方框图如图2-1所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用LED1602液晶以串口传送数据实现温度显示。图2-1 总体设计方框图2。2单片机AT89C51AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-sys

4、tem programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS51指令系统及89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案. AT89C51具有如下特点:40个引脚如图2-2,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看

5、门狗(WDT)电路,片内时钟振荡器。 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。图22 AT89C51管脚图2。3主要硬件介绍2。3。1 DS18B20简介DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器,如图23。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通

6、过简单的编程实现912位的数字值读数方式.可以分别在93。75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果,其引脚功能如图2-4. DS18B20具有如下特点:(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器

7、与DS18B20的双向通讯。 (2)在使用中不需要任何外围元件。 (3)可用数据线供电,电压范围:+3.0 +5.5 V。 (4)测温范围:-55 +125 .固有测温分辨率为0.5 。 (5)通过编程可实现912位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。 (8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。图2-3 DS18B20的引脚排列图2-4 引脚功能描述2.3。2 DS18B20的测温原理低温度系数晶振的振荡频率受温度的影响很小1,用于产生固定频率的脉冲信号送给减

8、法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到

9、减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。2。3.3温度转换计算方法举例例如当DS18B20采集到+125的实际温度后,输出为07D0H,则:实际温度=07D0H0。0625=20000。0625=125C。例如当DS18B20采集到55的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:实际温度=370H0.0625=

10、8800。0625=55CDS18B20工作过程一般遵循以下协议:初始化ROM操作命令-存储器操作命令-处理数据2。3.4 DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的一脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图2-5所示单片机端口接单线总线,为保证有效的DS18B20始终周期内提供足够的电流,可以用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us.采用寄生电源供电方式时VDD端接地。由于单线制只有一

11、根线,因此发送接口必须是三态的。图2-5 DS18B20与单片机接口2.3.5 1602液晶说明 3.系统硬件电路设计3。1主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主板电路等,如图31所示。图3-1 单片机主板电路3.2 显示电路显示电路是使用的1602液晶显示,这种显示最大的优点就是使用方便,接线简单,显示比较清楚,并能结合所需的字母显示。如图32. 1602与单片机连接图3-2。3。3温度连接电路 温度传感器使用18B20只有三个引脚,连接比较简单,如图33。 图334。系统软件的设计4。1主程序主要功能是负责温度的实时显示,读出并处理DS18B20的测量的当

12、前温度值,温度测量每1s进行一次,这样可以在一秒之内测量一次温度,其程序流程如图4-1所示。4.2读程序主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图4-2.图4-1 主程序流程图 图42 读温度流程图4。3温度转换命令子程序主要是发温度转换开始命令,本程序采用1s显示程序延时法等待转换的完成。其程序流程图如图43。图43温度转换命令流程图4。4计算温度子程序将RAM中读取进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4-4。图4-4 计算温度流程图 图45 显示数据刷新流程图4.5主程序源代码 为了方便使用,将1

13、8B20温度模块和1602显示模块的程序的函数声明做成函数库,分别为”18b20.h,“lcd.h”。则在主程序中可以直接调入,主程序如下所示:include”lcd.h”#include”18b20。hchar data wendu=” Temp 000.0C ”;char data Test1=” chen yang ;char data shuzi=0,1,2,3,4,5,6,7,8,9;uint temp;main()unsigned char TempH,TempL; InitLcd(); /初始化LCDDelayMs(15); /延时保证信号稳定while(1) ShowStrin

14、g(0,Test1); ShowString(1,wendu); wendu8=shuziTempH/100; /百位温度 wendu9=shuzi(TempH100)/10; /十位温度 wendu10=shuzi(TempH100)10 ;/个位 wendu12=shuziTempL; temp=ReadTemperature(); if(temp&0x8000) / 数据处理 temp=temp; / 取反加1 temp +=1; else TempH=temp4; TempL=temp&0x0F; TempL=TempL6/10;/小数近似处理4.6 1602显示源代码 参照1602显

15、示的原理图和时序,进行编写程序初始化,读指令,读数据等操作,编写的时候注意结合时序图来进行。源程序如下: “lcd。h”库:#ifndef _LCD_H_define _LCD_H_include /标准输入输出#includeintrins。hvoid DelayUs(unsigned char us);/ 微秒延时函数void DelayMs(unsigned char ms);/ 毫秒函数声明void WriteCommand(unsigned char c);/写入命令函数void WriteData(unsigned char c); /写入数据函数void ShowChar(uns

16、igned char pos,unsigned char c);/ 写入字节函数 void ShowString (unsigned char line,char *ptr);/写入字符串函数void InitLcd();/初始化函数#endif 显示程序: 名称:LCD1602/#includereg52。h /*包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/includestdio。h /标准输入输出#includeintrins.hincludelcd。h”sbit RS = P24; /Pin4sbit RW = P25; /Pin5sbit E = P26; /Pi

17、n6#define Data P0/数据端口/*/* 微秒延时函数 /*/void DelayUs(unsigned char us)/delay us unsigned char uscnt; uscnt=us1; /12MHz频率/ while(-uscnt);/*/* 毫秒函数声明 */*/void DelayMs(unsigned char ms) while(ms) DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); /*/* 写入命令函数 */*/void WriteCommand(unsigned char c) Del

18、ayMs(5);/操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0;/*/* 写入数据函数 */*/void WriteData(unsigned char c) DelayMs(5); /操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0;/*/ 写入字节函数 */*/void ShowChar(unsigned char pos,unsigned char c) unsigned char p; if (pos=0x10) p=pos+0xb0; /

19、是第二行则命令代码高4位为0xc else p=pos+0x80; /是第一行则命令代码高4位为0x8 WriteCommand (p);/写命令 WriteData (c); /写数据/*/* 写入字符串函数 /*/void ShowString (unsigned char line,char ptr) unsigned char l,i; l=line4; for (i=0;i16;i+) ShowChar (l+,*(ptr+i));/循环显示16个字符/*/* 初始化函数 /*/void InitLcd() DelayMs(15); WriteCommand(0x38); /disp

20、lay mode WriteCommand(0x38); /display mode WriteCommand(0x38); /display mode WriteCommand(0x06); /显示光标移动位置 WriteCommand(0x0c); /显示开及光标设置 WriteCommand(0x01); /显示清屏4。7 18B20温度源代码 18b20.h库#ifndef_18B20_H_define_18B20_H_includereg52.h /*包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/#includemath。h#include#define uchar

21、 unsigned chardefine uint unsigned intvoid delay1(uchar MS); /延时函数unsigned int ReadTemperature(void);/度温度void Init_DS18B20(void); /18B20初始化unsigned char ReadOneChar(void);/ 读一个字节void WriteOneChar(unsigned char dat); /写一个字节void delay2(unsigned int i); /延时函数#endif 18B20温度传感器源代码: /- 名称:18B20温度传感器该程序的关键

22、,从readtemperature中获得温度值,进而将数值分离显示-*/includereg52.h /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义include#include18b20.h”#define uchar unsigned chardefine uint unsigned int/*/* 定义端口 /*/sbit seg1=P20;sbit seg2=P21;sbit seg3=P22;sbit DQ=P13;/ds18b20 端口sfr dataled=0x80;/显示数据端口/ 延时函数 */*/void delay2(unsigned int i)/延时

23、函数 while(i-);/*/ 初始化 */*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay2(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay2(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay2(10); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay2(5);/*/* 读一个字节 */*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0

24、;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay2(5); return(dat);/*/ 写一个字节 */*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay2(5); DQ = 1; dat=1; delay2(5);/*/* 读取温度 /*/unsigned int ReadTemperature(void)unsigned

25、char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay2(200);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b=8;t=a+b;return(t);5.总结经过这段时间的努力,我终

26、于完成了数字温度计的设计,虽然没有完全达到设计要求,但从中学到了不少课堂上所学不到的实际知识。 我们认为,在这次的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,为了完成课程设计,我学会了通过多种渠道去获得课程设计所需用的各种资料,在通过查找大量资料,请教老师,以及不懈的努力的过程中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高.更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。 之所以使用单片机作为我们的执行核心,不仅是因为老师说单片机现在是社会上应用最广泛的工

27、具,也因为想通过使用单片机锻炼自己的c语言编程能力,养成良好的c语言编程风格。不管怎样,这些都是一种锻炼,一种知识的积累,能力的提高。完全可以把这个当作基础东西,只有掌握了这些最基础的,才可以更进一步,取得更好的成绩。很少有人会一步登天吧。永不言弃才是最重要的。 在程序设计方面我也增长了不少,1、写程序注释写得越详细越好、不要怕麻烦.比如我以前写了使用方法、结果起始地址是存高字节还是低字节等问题没有记录。还得测试,简直是浪费时间。 2、画流程图绝对有助于写程序以及日后核对。3、随时备份,建议版本形式备份,并写清楚该版本实现了什么,改进了什么,还没有实现什么.4、建立库,把程序做成模块化以便于将来编写其他程序的时候直接调用。 参考文献 1李广弟.单片机基础.北京:北京航空航天大学出版社,2011 2 周荷琴 吴秀清。微型计算机原理与接口技术(第4版)。中国科学技术大学出版社。2010 3 蒋辉平。基于Proteus的单片机系统设计与仿真实例。机械工业出版社.2009 4马忠梅。单片机的C语言应用程序设计。北京航空航天大学出版社,2007 24

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服