简易数字温度计设计

合集下载

简易数字温度计的设计

简易数字温度计的设计

简目录[摘要].................................................................................................................... 错误!未定义书签。

[Abstract]................................................................................................................... 错误!未定义书签。

1.前言 (1)2.总体设计方案 (2)2.1数字温度计方案 (2)2.2总体设计方案及框图 (2)3.系统组成及工作原理 (4)3.1单片机的选择 (4)3.1.1 AT89C51主要特性: (4)3.1.2 AT89C51引脚功能介绍 (4)3.2数字温度传感器DS18B20 (6)3.2.1 DS18B20的主要特性 (6)3.2.2 DS18B20的内部结构 (7)3.2.3 DS18B20工作原理 (7)3.3 复位电路的设计 (8)3.4 功能键 (8)3.5数码管串口显示 (9)4.系统软件设计 (11)4.1软件设计流程 (11)4.2 DS18B20读取数据流程 (12)5.仿真、测试及结果分析 (13)结论 .................................................................................................................... 错误!未定义书签。

致谢 .................................................................................................................... 错误!未定义书签。

数字简易温度计设计

数字简易温度计设计

目录引言 ------------------------------------------------------------------------------------ 1 设计目的-------------------------------------------------------------------------- 1 设计背景-------------------------------------------------------------------------- 1 1设计方案----------------------------------------------------------------------------- 21.1度计软件设计流程图 -------------------------------------------------------- 21.2元器件的选取:-------------------------------------------------------------- 21.3系统仿真图------------------------------------------------------------------- 2 2设计框图----------------------------------------------------------------------------- 32.1硬件电路框图:-------------------------------------------------------------- 32.2硬件电路概述:-------------------------------------------------------------- 32.3显示电路---------------------------------------------------------------------- 32.4温度传感器DS18B20 -------------------------------------------------------- 4 3软件设计----------------------------------------------------------------------------- 83.1主程序 ------------------------------------------------------------------------ 83.2读出温度子程序-------------------------------------------------------------- 93.3计算温度子程序 ------------------------------------------------------------ 103.4显示数据刷新子程序------------------------------------------------------- 103.51602的液晶显示程序设计 ------------------------------------------------- 103.6P ROTEUS程序设计 ---------------------------------------------------------- 11 4总结与体会 ------------------------------------------------------------------------- 12 参考文献------------------------------------------------------------------------------ 13 附录1 --------------------------------------------------------------------------------- 14 附录2 --------------------------------------------------------------------------------- 15 附录3 --------------------------------------------------------------------------------- 16引言设计目的本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机喜爱的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进行一一介绍,该系统可以方便的是实现温度采集和显示。

简易数字温度计设计

简易数字温度计设计

课程设计任务书2015—2016学年第二学期专业:学号姓名:课程设计名称:电子技术课程设计设计题目:简易数字温度计的设计完成期限:自2016年6月13日至2016年6月26日共2周一、设计依据本课题要求利用电子技术相关知识设计出一个能够实现±0.1℃精度的数字温度计。

电路由温度采集电路、数字频率计电路和LED显示电路构成。

通过本课题练习,学生的综合知识应用能力、设计能力将有较大提高,对今后从事电子产品的研制、生产、经营维修等打下基础。

二、主要内容及要求主要内容:1、给出详细的总体设计方案;2、完成各部分具体功能电路设计,主要包括基于热敏电阻的温度信号采集电路、555振荡电路、频率计电路、LED显示电路设计;3、给出正确的电路图,仿真、调试验证各部分设计的正确性;4、整理设计成果,完成课程设计说明书的撰写。

要求所设计数字温度计的输出温度的范围-20~+45℃、误差范围±0.1℃,具体温度显示采用数码管实现。

三、途径和方法利用模拟电子技术和数字电子技术的相关知识设计一个数控温度计,可以先查阅相关资料(网上查找或参考相关书籍手册),明确课题的方向和目的,然后学习完成课题所需的理论知识,了解温度信号采集电路、555振荡电路、频率计电路、LED显示电路设计的工作原理;在理解的基础上确定设计电路方案,完成电路设计,画出原理图及PCB印制版图,通过仿真分析验证设计的正确性,最后提交课程设计说明书一份。

四、时间安排课题讲解:2小时阅读资料:10小时撰写设计说明书:12小时修订设计说明书:6小时五、主要参考资料[1]孙丽霞.数字电子技术[M].北京:高等教育出版社,2006:174-196.[2]杨素行.模拟电子技术基础简明教程[M].北京:高等教育出版社,2007:40-92.[3]高吉祥.全国大学生电子设计竞赛培训系列教程-基本技能训练与单元电路设计[M].北京:电子工业出版社,2007:24-57.[4]黄智伟.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2005.1:43-66.[5]彭介华.电子技术课程设计指导[M].北京:高等教育出版社,2002.12:37-228.[6]陈永甫.新编555集成电路应用800例[M].北京:电子工业出版,2000:80-130.[7]萧宝瑾.protel99SE操作指导与电路设计实例(第一版)[M].太原:太原理工大学,2004:198-230.[8]张义申,陆坤.电子设计技术[M].西安:电子科技大学出版,1996:48-62.指导教师(签字):教研室主任(签字):批准日期:年月日简易数字温度计的设计摘要温度在现实生活中起着相当重要的作用,在电子科技越来越发达的当今时代,工业生产中对温度的测量又有了更精确的要求。

数字温度计的设计与制作课件

数字温度计的设计与制作课件

3.2 温度检测电路
VCC接高电平,DQ端接单片机的 P3.4口,这里利用了P3.4口双向 I/O口作用,单片机从DS18B20 读取温度和报警温度,此时作为 输入口,当设置报警温度时单片 机向DS18B20内部存储器写入数 据,此时作为数据输出端口。DQ 与VCC之间需要一个电阻值约为 5KΩ的上拉电阻。

报警设备


(ADC0809)
1.2 方案二:采用数字温度芯片DS18B20
AT98C51 DS18B20
报警点温度设置
液 晶
感 器
温 度




单制 片器 机
报 警 设


二 系统器件的选择
2.1 单片机的选择
AT89S52为 ATMEL 所生 产的一种低功耗、高性能CMOS8 位微控制器,具有8K在系统可编 程Flsah存储器。
3.3 液晶显示电路
在液晶显示电路的设计中选择具有单 向输出数据功能的P0端口向液晶显示 模块提供数据,P2.5、P2.6、P2.7口 作为控制液晶显示模块的端口,在PO 口上需要外加上拉电阻,才可以使液晶 显示模块正常显示。
3.4 报警电路设计
报警电路中使用P1.4-P1.7作为 控制按键输入端口,P1.0、P1.2 作为报警指示灯端口,P2.3作为 报警蜂鸣器端口,当它们对应的 端口为低电平时就会报警。
主要内容
一:设计方案选择 二:元器件的选择 三:设计过程 四:制作成果
一 设计方案选择
数字温度计的制作方法有很多种,最常见的有两种,一种 是利用热敏电阻测量温度的电路,另一种是利用数字温度 传感器DS18B20测量温度的电路。
1.1 方案一:采用热敏电阻

数字电路温度计设计

数字电路温度计设计

数字电路温度计设计全文共四篇示例,供读者参考第一篇示例:数字电路温度计设计数字电路温度计的设计原理主要是利用数字电路的优势,通过传感器将物体的温度信号转换为电信号,再通过数字电路进行处理和显示,从而实现温度的测量和显示。

数字电路温度计的设计原理主要包括传感器、模数转换器、显示器等几个关键部分。

首先是传感器部分,传感器是将温度信号转换为电信号的关键部件。

常用的传感器有热敏电阻、热电偶、半导体传感器等。

传感器的选择直接影响到数字电路温度计的测量精度和灵敏度。

在设计数字电路温度计时,我们需要根据实际需求选择合适的传感器,以确保温度测量的准确性。

最后是显示器部分,显示器是将数字信号转换为可视化信息的关键部件。

在设计数字电路温度计时,我们通常选择LED数码管、液晶显示屏等作为显示器。

显示器的选择不仅要考虑显示效果和美观度,还要考虑功耗、驱动电路等因素。

通过合理选择和设计显示器,我们可以实现数字电路温度计的数据显示和人机交互功能。

数字电路温度计的工作原理主要是通过传感器实时监测物体的温度变化,将温度信号转换为电信号后经过模数转换器转换为数字信号,最终通过显示器显示出温度数值。

在工作过程中,数字电路温度计还可以设置报警功能,当温度超出设定范围时会发出警报,提醒使用者及时处理。

制作数字电路温度计的流程主要包括以下几个步骤:第一步,设计电路原理图。

根据数字电路温度计的设计要求,我们需要设计出完整的电路原理图,包括传感器、模数转换器、显示器等各个部分的连接关系和工作原理。

第三步,焊接电路板。

在选择好电子元器件后,我们需要进行电路板的焊接工作,将各个元器件按照设计原理图连接到电路板上,并进行焊接和固定,以组成完整的数字电路温度计电路。

第四步,进行测试和调试。

在焊接完成后,我们需要进行测试和调试工作,确保数字电路温度计正常工作。

在测试中,我们需要测试传感器的灵敏度、模数转换器的精度和显示器的正确性等。

第五步,封装和外壳设计。

简易数字温度计的方案设计书

简易数字温度计的方案设计书

目录引言 (3)1功能要求 (4)2系统方案论证与比较 (4)2.1数字温度计设计方案论证 (4)2.1.1方案一 (4)2.1.2方案二 (6)2.2方案二的总体设计框图 (7)3系统主要元器件的选择及介绍 (8)3.1 单片机的选用及功能介绍 (8)3.1.1单片机简介 (8)3.1.2单片机的产生与发展 (9)3.1.3单片机的应用 (10)3.1.4MCS-51单片机引脚及功能介绍 (11)3.2 温度传感器的选择 (13)3.2.1DS18B20 简单介绍 (14)3.2.2DS18B20 的性能特点和使用中的注意事项 (14)3.2.3DS18B20的引脚及内部结构 (16)3.2.4 DS18B20 的工作原理 (25)3.2.5DS18B20的单线协议和命令 (26)3.2.6温度数据的计算处理方法 (29)4系统硬件电路的设计 (32)4.1主板电路 (32)4.2显示电路 (32)4.3DS18B20温度传感器与单片机的接口电路 (33)5系统软件算法分析 (34)5.1主程序 (34)5.2读出温度子程序 (35)5.3温度转换命令子程序 (36)5.4计算温度子程序 (37)5.5显示数据刷新子程序 (38)6调试及性能分析 (39)结论 (40)致谢 (41)参考文献 (42)附录 (43)附录一原理图 (44)附录二控制源程序清单 (48)基于单片机的数字温度计的设计指导教师:宗文军2006级机电专业学号 20060279 姓名胡雄飞摘要随着时代的进步和发展,人类不断的需求,科技不断的进步。

温度计所给人类带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高。

由于老式温度计的精确度低,测量范围小,无法满足现代化生活:工业、教案、科研、旅游等等各个领域的需求。

随着集成电路技术的发展,单片微型计算机的功能也不断增强,由于单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,它属于多功能温度计。

基于单片机的简易数字温度计的设计

基于单片机的简易数字温度计的设计

基于单片机的简易数字温度计的设计张逊摘要本文介绍了一种基于单片机的简易数字温度计的设计。

该设计主要由三个模块组成:温度采集模块,数据处理模块及显示模块。

温度采集主要由温度传感器DS18B20来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。

数据处理则由芯片STC89C52RC来完成,其负责把DS18B20传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着芯片DS18B20相互通讯。

该系统的数字温度计电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。

此数字温度计可以测量得温度范围—55~+125℃并通过一个四位一体的7段数码管显示出来。

关键词单片机;数字温度计;温度传感器;STC89C52RC;DS18B20Based on single chip simple digitalthermometer designZhangXunAbstract This paper introduces a kind of based on single chip simple digital thermometer design. This design mainly consists of three modules: temperature acquisition module, data processing module and display module. Temperature acquisition is mainly composed of temperature sensor DS18B20 to complete, it is responsible for the collection of the analog conversion to the corresponding digital quantity in the transfer to the data processing module. Data processing by the chip STC89C52RC to complete, which is responsible for the DS18B20 transfer to the digital quantity in the course of data processing, produce the corresponding display code to display module display; In addition, it also control the chip DS18B20 mutual communication.The system of the digital thermometer circuit is simple, the element used less, low cost, and high measuring accuracy and reliability. The digital thermometer can measure temperature range - 55 ~ + 125 ℃ and through a quaternity seven period of digital tube display.Keywords Single-chip microcontroller; Digital thermometer; Temperature sensor; AT89C51; DS18b20目录1 引言 (1)2 设计总体方案 (2)2.1设计要求 (3)2.2 设计思路 (4)2.3 设计方案 (5)3 硬件电路设计 (6)3.1 温度采集模块 (3)3.2 单片机系统 (9)3.3 复位电路和时钟电路 (16)3.4 数码管显示系统设计 (18)3.5 总体电路设计 (21)4 程序设计 (14)4.1 程序设计总方案 (23)4.2 系统子程序设计 (23)5面包电路的搭建 (25)5.1 硬件的调试 (25)5.2 显示结果分析 (18)6实物的制作 (19)结论 (37)参考文献 (38)附录程序代码 (22)致谢 (39)1 引言在环境的舒适度测量中,温度、湿度和空气质量是最基本的三个被测量,其中温度的测量最为经常。

数字温度计设计课程设计范本

数字温度计设计课程设计范本

数字温度计设计课程设计范本
设计题目:数字温度计设计
设计目的:通过设计数字温度计,学习数字电路设计基础知识,掌握数字温度计的设计方法和实现过程。

设计要求:
1.温度测量范围:-40℃ ~ 120℃;
2.温度分辨率:0.1℃;
3.显示方式:7段LED数码管显示,至少显示4位数字,其中小
数点占据一位;
4.温度传感器:使用DS18B20数字温度传感器;
5.显示方式:采用共阴极数码管,使用74HC595锁存器进行驱动,
使用AT89C51单片机进行控制;
6.设计过程:包括硬件设计和软件设计两个部分,其中硬件设计
包括电路原理图设计和PCB板设计,软件设计包括单片机程序
设计和烧录。

设计步骤:
1.硬件设计
1)根据DS18B20数字温度传感器的特性,设计传感器电路,包括电源电路和传感器接口电路。

2)根据温度范围和分辨率要求,设计ADC电路,将传感器输出的模拟信号转换为数字信号。

3)设计数码管驱动电路,使用74HC595锁存器进行驱动。

4)设计单片机接口电路,将数字信号传输到单片机,实现温度数据的处理和显示。

5)根据硬件设计结果,绘制电路原理图和PCB板图。

2.软件设计
1)根据硬件设计结果,编写单片机程序,实现温度数据的读取、处理和显示。

2)使用Keil C51软件进行编程和调试。

3)将程序烧录到单片机中。

4)进行系统测试和调试,确保数字温度计的正常工作。

设计结果:
1.电路原理图和PCB板图。

2.单片机程序。

3.数字温度计实物。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录摘要 (1)1系统设计 (1)1.1设计任务 (1)1.2设计要求 (1)2系统方案论证 (1)2.1主控模块的论证与选择 (1)2.2显示模块的论证与选择 (2)2.3按键模块的论证与选择 (2)3系统理论分析与计算 (2)3.1 DS18B20的理论分析与计算 (2)4电路与程序设计 (3)4.1电路的设计 (3)4.2程序的设计 (6)5测试方案与测试数据 (7)5.1测试方案 (7)5.2 测试条件与仪器 (8)5.3 测试结果 (8)6 总结 (8)附录主要源程序 (9)摘要:本系统利用单片机AT89C52采用程序设计方法来测试温度,还可以通过两个按键设置温度报警上限,当测试温度超过设定的温度上限时,蜂鸣器器就会报警且绿灯关闭,红灯点亮;当温度低于上限时蜂鸣器关闭且红灯关闭,绿灯点亮。

并通过液晶屏1602显示其测试温度以及设置的上限温度。

关键词:STC89C52、LCD1602、DS18B20简易数字温度计设计1系统设计1.1设计任务设计一数字温度测量系统,能自动实现实际温度的测量与显示。

1.2设计要求1.2.1基本功能(1)测温范围-30℃~+120℃。

(2)测量误差在±0.5℃之内。

(3)能正常显示测量的温度。

1.2.2扩展功能(1)增加温控功能,并可修改设置温控的上下限。

(2)增加温控报警功能。

2系统方案论证本系统主要由主控模块、显示模块、按键模块、蜂鸣器模块、LED模块、传感器模块组成,下面分别论证这几个模块的选择。

2.1主控模块的论证与选择方案一:AT89C52单片机是一种高性能8位单片微型计算机。

内核本身具有丰富的指令集,足够实现本次作品的全部基本功能和部分拓展功能,相比Atmega16我们对AT89C52更为熟悉,且芯片价格较低,性价比高。

方案二:采用ATmega16芯片作为主控芯片。

由于对芯片的不熟悉,导致如果想要实现温度计全部基本功能和部分拓展功能,较为困难。

综上所述,选择方案一。

2.2显示模块的论证与选择方案一:采用LCD1602显示。

LCD1602相对便宜,虽然其本身不能显示中文,但是温度计只需显示数字和一些英文,符合这次设计要求。

方案二:采用LCD12864显示。

LCD12864屏幕显示细腻直观,且可以显示中文,但是相对昂贵。

综上所述,选择方案一。

2.3按键模块的论证与选择方案一:采用4X4矩阵按键。

尽管按键一目了然,但连线复杂,扫描过程烦琐,会耗费大量的系统资源。

方案二:独立按键,我们只使用了两个按键来调节上限,大大节省了系统硬件资源,便于系统扩展。

综上所述,选择方案二。

3系统理论分析与计算3.1 DS18B20的理论分析与计算DS18B20 通过编程,可以实现最高 12 位的温度存储值,在寄存器中,以补码的格式存储,如图1所示。

图1 DS18B20 温度数据格式寄存器一共 2 个字节,LSB 是低字节,MSB 是高字节,其中 MSb 是字节的高位,LSb 是字节的低位。

大家可以看出来,二进制数字,每一位代表的温度的含义,都表示出来了。

其中 S表示的是符号位,低 11 位都是 2 的幂,用来表示最终的温度。

DS18B20 的温度测量范围是从-55 度到+125 度,而温度数据的表现形式,有正负温度,寄存器中每个数字如同卡尺的刻度一样分布,如图 2所示。

图2 DS18B20 温度值二进制数字最低位变化 1,代表温度变化 0.0625 度的映射关系。

当 0 度的时候,那就是0x0000,当温度 125 度的时候,对应十六进制是 0x07D0,当温度是零下 55 度的时候,对应的数字是 0xFC90。

反过来说,当数字是 0x0001 的时候,那温度就是 0.0625 度了。

4电路与程序设计4.1电路的设计4.1.1系统总体框图系统总体框图如图3所示图3 系统总体框图4.1.2控制按键&LED电路按下S1能增加温度报警上限,按下S2能减少温度报警上限。

测试温度低于上限时,绿灯LED1亮。

当温度超过设定的上限时,红灯LED2亮。

图4 控制按键&LED4.1.3蜂鸣器电路当测试温度超过设定温度时,蜂鸣器开启;当测试温度低于设定温度时,蜂鸣器关闭。

蜂鸣器电流相对较大,因此需要用三极管驱动,并且加了一个 1K欧的电阻作为限流电阻。

此外还加了一个 D1二极管,这个二极管叫做续流二极管。

图5 蜂鸣器电路显示电路使用LCD1602,第一行显示”Temperature”第二行显示测试温度和温度上限,两者中间显示一个”>”或”<”。

RP1为上拉排阻。

图6 显示电路4.1.5传感器电路图7 传感器电路图8 整体电路4.1.7电源使用5V直流电源。

4.2程序的设计4.2.1程序功能描述(1)能够测试-30℃~+120℃的温度。

(2)按下S1能增加温度报警上限,按下S2能减少温度报警上限。

(3)测试温度低于上限时,绿灯亮,蜂鸣器关闭。

当温度超过设定的上限时,红灯亮且蜂鸣器响起。

4.2.2程序流程图图9 程序流程图5测试方案与测试数据5.1测试方案5.1.1软件仿真测试用Proteus 7.5软件画出电路图,模拟硬件对程序进行调试。

5.1.2硬件软件联调将编写的单片机C语言程序下载到实际硬件中,进行硬件软件联调。

5.2 测试条件与仪器测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。

测试仪器:数字示波器,数字万用表。

5.3 测试结果系统上电运行后,LCD能正常显示测试温度且绿灯点亮,测试温度每秒更新。

按下S1能使报警温度上限 +1,按下S2能使报警温度上限-1。

当测试温度超过上限温度时,绿灯关闭,红灯点亮且蜂鸣器开启;当测试温度低于上限温度时,红灯关闭,绿灯点亮且蜂鸣器关闭。

6 总结本系统以单片机STC89C52芯片为核心部件,利用LCD1602、独立按键、蜂鸣器、DS18B20并配合C语言算法实现了简易数字温度计设计,完成此次设计题目中的全部基本功能和部分拓展功能。

在系统设计过程中,力求硬件线路简单,充分发挥软件编程方便灵活的特点,来满足系统设计要求。

在本次设计的过程中,遇到了许多突发事件和困难,设计制作曾一度止步不前,但通过仔细分析和调整后解决了一个又一个的问题。

在整个过程中我们深刻的体会到团队精神的重要性,并提高了自己解决问题的能力。

附录主要源程序main程序:#include <reg52.h>sbit KEY1 = P1^0; // 上调报警温度sbit KEY2 = P1^1; // 下调报警温度sbit LED1 = P1^2; // 正常时绿灯亮sbit LED2 = P1^3; // 报警时红灯亮sbit BUZZ = P1^6;bit enBuzz = 0; //蜂鸣器使能标志bit flag1s = 0; //1s定时标志unsigned int warnT = 30; //报警温度值unsigned char T0RH = 0; //T0重载值的高字节unsigned char T0RL = 0; //T0重载值的低字节void ConfigTimer0(unsigned int ms);unsigned char IntToString(unsigned char *str, int dat);extern bit Start18B20();extern bit Get18B20Temp(int *temp);extern void InitLcd1602();extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); extern void LcdWriteCmd(unsigned char cmd);void main(){bit res;bit backup = 1;int temp; //读取到的当前温度值int intT, decT; //温度值的整数和小数部分unsigned char len,len1;unsigned char str[12],str1[12];EA = 1; //开总中断P1 = 0XF3;ConfigTimer0(1); //T0定时1msStart18B20(); //启动DS18B20InitLcd1602(); //初始化液晶while (1){if (flag1s) //每秒更新一次温度{flag1s = 0;res = Get18B20Temp(&temp); //读取当前温度if (res) //读取成功时,刷新当前温度显示{intT = temp >> 4; //分离出温度值整数部分decT = temp & 0xF; //分离出温度值小数部分len = IntToString(str, intT); //整数部分转换为字符串len1 = IntToString(str1, warnT); //报警温度转换为字符串str[len++] = '.'; //添加小数点decT = (decT*10) / 16; //二进制的小数部分转换为1//位十进制位str[len++] = decT + '0'; //十进制小数位再转换为//ASCII字符str[len++] = 0xdf; //添加字符串“℃”str[len++] = 'C';str[len++] = ' ';str[len] = '\0'; //添加字符串结束符str1[len1++] = 0xdf; //添加字符串“℃”str1[len1++] = 'C';str1[len1] = '\0'; //添加字符串结束符if (intT < warnT) //超过报警温度时执行报警{enBuzz = 0; //关闭蜂鸣器LcdWriteCmd(0x01); //清屏LcdShowStr(2, 0, "Temperature"); //显示第一行LcdShowStr(2, 1, str); //显示实时温度LcdShowStr(9, 1, "<");LcdShowStr(11, 1, str1); //显示报警温度}else{enBuzz = 1; //启动蜂鸣器发声LcdWriteCmd(0x01); //清屏LcdShowStr(4, 0, "Warning!"); //显示警告LcdShowStr(0, 1, "Temp:");LcdShowStr(5, 1, str); //显示实时温度LcdShowStr(11, 1, ">");LcdShowStr(12, 1, str1); //显示报警温度}}else //读取失败时,提示错误信息{LcdShowStr(4, 1, "error!");}Start18B20(); //重新启动下一次转换}}}/* 按键动作函数*/void KeyAction (){if (KEY1 == 0){KEY1 = 1;warnT++;}else if (KEY2 == 0){KEY2 = 1;warnT--;}}/* 整型数转换为字符串,str-字符串指针,dat-待转换数,返回值-字符串长度*/ unsigned char IntToString(unsigned char *str, int dat){signed char i = 0;unsigned char len = 0;unsigned char buf[6];if (dat < 0) //如果为负数,首先取绝对值,并在指针上添加负号{dat = -dat;*str++ = '-';len++;}do { //先转换为低位在前的十进制数组buf[i++] = dat % 10;dat /= 10;} while (dat > 0);len += i; //i最后的值就是有效字符的个数while (i-- > 0) //将数组值转换为ASCII码反向拷贝到接收指针上{*str++ = buf[i] + '0';}*str = '\0'; //添加字符串结束符return len; //返回字符串长度}/* 配置并启动T0,ms-T0定时时间*/void ConfigTimer0(unsigned int ms){unsigned long tmp; //临时变量tmp = 11059200 / 12; //定时器计数频率tmp = (tmp * ms) / 1000; //计算所需的计数值tmp = 65536 - tmp; //计算定时器重载值tmp = tmp + 28; //补偿中断响应延时造成的误差T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节T0RL = (unsigned char)tmp;TMOD &= 0xF0; //清零T0的控制位TMOD |= 0x01; //配置T0为模式1TH0 = T0RH; //加载T0重载值TL0 = T0RL;ET0 = 1; //使能T0中断TR0 = 1; //启动T0}/* T0中断服务函数,完成250ms, 1s定时*/void InterruptTimer0() interrupt 1{static unsigned int tmr1s = 0;static unsigned int tmrms = 0;TH0 = T0RH; //重新加载重载值TL0 = T0RL;if (enBuzz) //蜂鸣器发声处理{BUZZ = ~BUZZ; //启动蜂鸣器发声LED1 = 0;LED2 = 1;}else{BUZZ = 1; //关闭蜂鸣器LED1 = 1;LED2 = 0;}tmr1s++;tmrms++;if (tmrms >= 250) //延时250ms{tmrms = 0;KeyAction ();}if (tmr1s >= 1000) //定时1s{tmr1s = 0;flag1s = 1;}}DS18B20程序:#include <reg52.h>#include <intrins.h>sbit IO_18B20 = P3^2; //DS18B20通信引脚/* 软件延时函数,延时时间(t*10)us */ void DelayX10us(unsigned char t){do {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} while (--t);}bit Get18B20Ack(){bit ack;EA = 0;IO_18B20 = 0;DelayX10us(50);IO_18B20 = 1;DelayX10us(6);ack = IO_18B20;while(!IO_18B20);EA = 1;return ack;}void Write18B20(unsigned char dat) {unsigned char mask;EA = 0;for(mask=0x01; mask!= 0; mask<<=1) {IO_18B20 = 0;_nop_();_nop_();if((mask&dat) == 0)IO_18B20 = 0;elseIO_18B20 = 1;DelayX10us(6);IO_18B20 = 1;}EA = 1;}unsigned char Read18B20(){unsigned char dat;unsigned char mask;EA = 0;for(mask=0x01; mask!=0; mask<<=1){IO_18B20 = 0;_nop_();_nop_();IO_18B20 = 1;_nop_();_nop_();if(!IO_18B20)dat &= ~mask;elsedat |= mask;DelayX10us(6);}EA = 1;return dat;}bit Start18B20(){bit ack;ack = Get18B20Ack();if(ack == 0){Write18B20(0xCC);Write18B20(0x44);}return ~ack;}bit Get18B20Temp(int *temp){bit ack;unsigned char LSB, MSB;ack = Get18B20Ack();if(ack == 0){Write18B20(0xCC);Write18B20(0xBE);LSB = Read18B20();MSB = Read18B20();*temp = ((int)MSB<<8) + LSB;}return ~ack;}LCD1602程序:#include <reg52.h>#define LCD1602_DB P0sbit LCD1602_RS = P2^0;sbit LCD1602_RW = P2^1;sbit LCD1602_E = P2^2;/* 等待液晶准备好*/void LcdWaitReady()unsigned char sta;LCD1602_DB = 0xFF;LCD1602_RS = 0;LCD1602_RW = 1;do {LCD1602_E = 1;sta = LCD1602_DB; //读取状态字LCD1602_E = 0;} while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值*/void LcdWriteCmd(unsigned char cmd){LcdWaitReady();LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DB = cmd;LCD1602_E = 1;LCD1602_E = 0;}/* 向LCD1602液晶写入一字节数据,dat-待写入数据值*/void LcdWriteDat(unsigned char dat){LcdWaitReady();LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DB = dat;LCD1602_E = 1;LCD1602_E = 0;}/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/ void LcdSetCursor(unsigned char x, unsigned char y){unsigned char addr;if (y == 0) //由输入的屏幕坐标计算显示RAM的地址addr = 0x00 + x; //第一行字符地址从0x00起始elseaddr = 0x40 + x; //第二行字符地址从0x40起始LcdWriteCmd(addr | 0x80); //设置RAM地址}/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){LcdSetCursor(x, y); //设置起始地址while (*str != '\0') //连续写入字符串数据,直到检测到结束符{LcdWriteDat(*str++);}}/* 初始化1602液晶*/void InitLcd1602(){LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口LcdWriteCmd(0x0C); //显示器开,光标关闭LcdWriteCmd(0x06); //文字不动,地址自动+1LcdWriteCmd(0x01); //清屏}。

相关文档
最新文档