基于单片机的智能温控系统的设计与实现
基于单片机的温度智能控制系统的设计与实现共3篇

基于单片机的温度智能控制系统的设计与实现共3篇基于单片机的温度智能控制系统的设计与实现1基于单片机的温度智能控制系统的设计与实现随着人们对生活质量的需求越来越高,温度控制变得愈发重要。
在家庭、医院、实验室、生产车间等场合,温度控制都是必不可少的。
本文将介绍一种基于单片机的温度智能控制系统的设计与实现。
设计思路本文所设计的温度智能控制系统主要由单片机、温度传感器、继电器和液晶屏幕等部件组成。
其中,温度传感器负责采集温度数据,单片机负责处理温度数据,并实现温度智能控制功能。
继电器用于控制加热设备的开关,液晶屏幕用于显示当前温度和系统状态等信息。
在实现温度智能控制功能时,本设计采用了PID控制算法。
PID控制算法是一种经典的控制算法,它基于目标值和当前值之间的误差来调节控制量,从而实现对温度的精确控制。
具体来说,PID控制器包含三个部分:比例控制器(P)用于对误差进行比例调节,积分控制器(I)用于消除误差的积累,微分控制器(D)用于抑制误差的未来变化趋势。
这三个控制器的输出信号加权叠加后,作为继电器的控制信号,实现对加热设备的控制。
系统实现系统硬件设计在本设计中,我们选择了常见的AT89S52单片机作为核心控制器。
该单片机运行速度快、稳定性好,易于编程,并具有较强的扩展性。
为了方便用户调节温度参数和查看当前温度,我们还选用了4 * 20的液晶屏。
温度传感器采用LM35型温度传感器,具有高精度、线性输出特性,非常适用于本设计。
系统电路图如下所示:系统软件设计在单片机的程序设计中,我们主要涉及到以下几个部分:1. 温度采集模块为了实现温度智能控制功能,我们首先需要获取当前的温度数据。
在本设计中,我们使用了AT89S52单片机的A/D转换功能,通过读取温度传感器输出的模拟电压值,实现对温度的采集。
采集到的温度数据存储在单片机的内部存储器中,以供后续处理使用。
2. PID控制模块PID控制模块是本设计的核心模块,它实现了对温度的精确控制。
《2024年基于51单片机的温度控制系统设计与实现》范文

《基于51单片机的温度控制系统设计与实现》篇一一、引言在现代工业控制领域,温度控制系统的设计与实现至关重要。
为了满足不同场景下对温度精确控制的需求,本文提出了一种基于51单片机的温度控制系统设计与实现方案。
该系统通过51单片机作为核心控制器,结合温度传感器与执行机构,实现了对环境温度的实时监测与精确控制。
二、系统设计1. 硬件设计本系统以51单片机为核心控制器,其具备成本低、开发简单、性能稳定等优点。
硬件部分主要包括51单片机、温度传感器、执行机构(如加热器、制冷器等)、电源模块等。
其中,温度传感器负责实时监测环境温度,将温度信号转换为电信号;执行机构根据控制器的指令进行工作,以实现对环境温度的调节;电源模块为整个系统提供稳定的供电。
2. 软件设计软件部分主要包括单片机程序与上位机监控软件。
单片机程序负责实时采集温度传感器的数据,根据设定的温度阈值,输出控制信号给执行机构,以实现对环境温度的精确控制。
上位机监控软件则负责与单片机进行通信,实时显示环境温度及控制状态,方便用户进行监控与操作。
三、系统实现1. 硬件连接将温度传感器、执行机构等硬件设备与51单片机进行连接。
具体连接方式根据硬件设备的接口类型而定,一般采用串口、并口或GPIO口进行连接。
连接完成后,需进行硬件设备的调试与测试,确保各部分正常工作。
2. 软件编程编写51单片机的程序,实现温度的实时采集、数据处理、控制输出等功能。
程序采用C语言编写,易于阅读与维护。
同时,需编写上位机监控软件,实现与单片机的通信、数据展示、控制指令发送等功能。
3. 系统调试在完成硬件连接与软件编程后,需对整个系统进行调试。
首先,对单片机程序进行调试,确保其能够正确采集温度数据、输出控制信号。
其次,对上位机监控软件进行调试,确保其能够与单片机正常通信、实时显示环境温度及控制状态。
最后,对整个系统进行联调,测试其在实际应用中的性能表现。
四、实验结果与分析通过实验测试,本系统能够实现对环境温度的实时监测与精确控制。
基于51单片机的智能家居温控热水器系统设计

基于51单片机的智能家居温控热水器系统设计一、引言随着科技的不断发展,智能家居成为了人们生活中的重要组成部分。
智能家居可以为人们的生活带来更加便利和舒适的体验,其中智能温控热水器系统更是受到了广泛关注。
本文将介绍基于51单片机的智能家居温控热水器系统设计,旨在为人们的生活提供更加智能化的温控服务。
二、系统设计理念基于51单片机的智能家居温控热水器系统设计的理念主要体现在以下几个方面:1. 智能化:系统能够根据用户的需求自动调节水温,满足不同用户的需求,提供更加智能化的温控服务。
2. 节能环保:系统设计考虑了能源利用效率和环保性,采用先进的温控技术,有效节约能源消耗,达到节能环保的目的。
3. 安全可靠:系统在设计时充分考虑了热水器的安全性和可靠性,保障用户在使用过程中的安全和舒适。
三、系统设计方案1. 系统硬件设计(1)传感器部分:系统采用温度传感器,通过对水温的实时监测,可以实现对热水器温度的智能控制。
(2)控制部分:系统采用51单片机作为核心控制器,通过对传感器采集的数据进行处理,实现对热水器加热、停止加热的控制。
(3)显示部分:系统采用液晶显示屏,可以实时显示热水器的温度,方便用户进行观测和调节。
2. 系统软件设计(1)温度控制算法:系统通过对传感器采集的数据进行分析,制定合理的温控算法,实现对水温的智能控制。
(2)用户界面设计:系统设计了用户友好的界面,用户可以通过按键或者触摸屏等方式进行温度设定和查看当前温度。
3. 系统整体设计系统整体设计采用模块化设计思想,可以方便地对系统进行扩展和维护。
系统设计了温度达到设定值后自动停止加热,并具备过温保护功能,确保热水器的安全使用。
四、系统应用场景基于51单片机的智能家居温控热水器系统设计可以在家庭、酒店、公共浴室等场所得到广泛应用。
在家庭场景中,用户可以通过手机APP等方式对热水器进行远程控制,实现智能化的温控服务。
在酒店、公共浴室等场所,系统能够实现多人同时使用的需求,提供更加便捷的温控服务。
基于单片机的温度控制系统设计与应用

基于单片机的温度控制系统设计与应用温度控制系统是一种常见的自动控制系统,用于维持设定温度范围内的温度稳定。
本文将介绍基于单片机的温度控制系统的设计与应用。
一、系统设计1.功能需求:(1)温度检测:获取环境温度数据。
(2)温度显示:将检测到的温度数据以数字方式显示。
(3)温度控制:通过控制输出信号,自动调节温度以维持设定温度范围内的稳定温度。
2.硬件设计:(1)单片机:选择适合的单片机,如51系列、AVR系列等,具有较强的计算和控制能力。
(2)温度传感器:选择适当的温度传感器,如DS18B20、LM35等,能够准确检测环境温度。
(3)显示屏:选择适当的数字显示屏,如LCD显示屏、数码管等,用于显示温度数据。
(4)执行机构:根据具体需求选择合适的执行机构,如继电器、风扇等,用于控制温度。
3.软件设计:(1)温度检测:通过单片机采集温度传感器的模拟信号,并通过数字转换获得温度数据。
(2)温度显示:将获取到的温度数据进行处理,通过数字显示屏显示。
(3)温度控制:通过控制执行机构,如继电器等,根据温度数据的变化进行调节,将温度维持在设定范围内。
二、系统应用1.家居温控系统:家庭中的空调、暖气等设备可以通过单片机温度控制系统实现智能控制。
通过温度传感器检测室内温度,并将温度数据显示在数字显示屏上。
通过设定温度阈值,当室内温度超出设定范围时,系统控制空调或暖气进行启停,从而实现室内温度的调节和稳定。
这不仅提高了居住舒适度,还能节约能源。
2.工业过程控制:在工业生产过程中,一些特定的应用需要严格控制温度,以确保产品质量或生产过程的稳定。
通过单片机温度控制系统,可以实时检测并控制生产环境的温度。
当温度超过或低于设定的阈值时,系统可以自动调整控制设备,如加热器、冷却器等,以实现温度的控制和稳定。
3.温室农业:温室农业需要确定性的环境温度来保证作物的生长。
通过单片机温度控制系统,可以监测温室内的温度,并根据预设的温度范围,自动启停加热或降温设备,以维持温室内的稳定温度。
单片机温度控制系统设计及实现

单片机温度控制系统设计及实现温度控制是很多自动化系统中的重要部分,可以应用于许多场景,如家用空调系统、工业加热系统等。
本文将介绍如何利用单片机设计和实现一个简单的温度控制系统。
一、系统设计1. 硬件设计首先,我们需要选择合适的硬件来搭建我们的温度控制系统。
一个基本的温度控制系统由以下几个组件组成:- 传感器:用于检测环境的温度。
常见的温度传感器有热敏电阻和温度传感器。
- 控制器:我们选择的是单片机,可以根据传感器的读数进行逻辑判断,并控制输出的信号。
- 执行器:用于根据控制器的指令执行具体的动作,例如开启或关闭空调。
2. 软件设计温度控制系统的软件部分主要包括,传感器读取、温度控制逻辑和执行器控制。
我们可以使用C语言来编写单片机的软件。
- 传感器读取:通过串口或者模拟输入端口来读取传感器的数据,可以利用类似的库函数或者自己编写读取传感器数据的函数。
- 温度控制逻辑:根据读取到的温度值,判断当前环境是否需要进行温度调节,并生成相应的控制信号。
- 执行器控制:将控制信号发送到执行器上,实现对温度的调节。
二、系统实施1. 硬件连接首先,将传感器连接到单片机的输入端口,这样单片机就可以读取传感器的数据。
然后,将执行器连接到单片机的输出端口,单片机可以通过控制输出端口的电平来控制执行器的开关。
2. 软件实现编写单片机的软件程序,根据前面设计的软件逻辑,实现温度的读取和控制。
首先,读取传感器的数据,可以定义一个函数来读取传感器的数据并返回温度值。
其次,根据读取到的温度值,编写逻辑判断代码,判断当前环境是否需要进行温度调节。
如果需要进行温度调节,可以根据温度的高低来控制执行器的开关。
最后,循环执行上述代码,实现实时的温度检测和控制。
三、系统测试和优化完成软硬件的实施之后,需要对温度控制系统进行测试和优化。
1. 测试通过模拟不同的温度情况,并观察控制器的输出是否能够正确地控制执行器的开关。
可以使用温度模拟器或者改变环境温度来进行测试。
基于单片机的智能温控系统设计

基于单片机的智能温控系统设计随着科学技术的发展,人们需要更加便捷高效的生活方式。
智能家居作为一种新兴的科技应用,吸引了越来越多的人的关注。
其中,智能温控系统是人们更为关心的一部分,因为温度直接关系到人们的身体健康。
通过单片机技术的应用,可以设计出一种高效智能的温控系统。
一、智能温控系统的设计方案1. 系统硬件设计:主机采用单片机AT89S52和温度传感器DS18B20组成,温度控制功能通过智能继电器,整个系统实现了硬件基础框架。
2. 系统软件设计:主要涉及到单片机程序的编写和控制,具体涉及到诸如温度检测、温度控制、屏幕显示等功能。
3. 系统人机交互设计:通过显示屏幕和按键控制实现人机交互操作。
4. 系统通信设计:通过WiFi模块实现远程通信功能。
二、温度传感器DS18B20的原理及应用DS18B20是一款基于数字信号输出的温度传感器,原理是利用温度对半导体器件的电阻或电压的变化,来达到测量温度的目的。
它具有精度高、响应速度快、口径小的特点,因此常被应用于智能家居领域中的温控系统。
三、智能继电器的原理及应用智能继电器是利用单片机技术,将微处理器县的高低电平输出与继电器的通断控制相结合,达到了计算机智能化的效果。
它的最大优点就是可以通过计算机远程控制,从而实现智能化管理。
在温控系统中,可以根据温度的不同值,实现启动或关闭继电器,调节温度的稳定值。
四、智能温控系统的应用前景智能温控系统作为智能家居领域中的一部分,已经逐渐开始运用到人们的现实生活中。
随着人们对于生活品质的不断提高,智能家居的应用市场不断扩大,而温控系统作为其一部分也将得到更加广泛的应用。
尤其在一些高结构化的场所中,例如办公楼、酒店等场所,都需要通过温度的调节来实现舒适性的提升。
因此,智能温控系统的发展前途广阔。
总之,通过单片机技术的应用,可以实现智能温控系统的设计,这样的设计不仅降低了使用成本,提高使用效率,还具有自动化、智能化、人性化的特点,深受人们欢迎。
基于单片机的温度控制系统设计方案

基于单片机的温度控制系统设计方案设计方案:1. 系统概述:本温度控制系统采用单片机作为核心控制器,通过对温度传感器的采集并对温度进行处理,控制继电器的开关状态,实现对温度的精确控制。
系统可广泛应用于家庭、工业、医疗等领域中的温度控制需求。
2. 硬件设计:a. 单片机选择:根据系统需求,我们选择适用于温度控制的单片机,如8051、PIC、STM32等,具备较高的性能和稳定性。
b. 传感器:采用温度传感器(如DS18B20)进行温度的精确测量,传感器将温度值转化为数字信号进行输出,供单片机进行处理。
c. 屏幕显示:选用LCD液晶屏幕,实时显示当前温度值和设定的目标温度值。
3. 软件设计:a. 数据采集:单片机通过GPIO口连接温度传感器,采集传感器输出的数字信号,并进行AD转换,将模拟信号转化为数字信号。
b. 控制策略:单片机通过比较当前温度值和设定的目标温度值,根据控制算法判断是否需要开启或关闭继电器,从而实现对温度的控制。
c. 温度显示:单片机通过串口通信或I2C通信与LCD屏幕进行数据传输和显示,使用户能够随时了解当前温度和设定的目标温度。
4. 控制算法设计:a. ON/OFF控制:当当前温度值超过设定的目标温度值时,继电器闭合,使制冷或加热设备开始工作;当当前温度值低于设定的目标温度值时,继电器断开,使制冷或加热设备停止工作,实现温度的维持控制。
b. PID控制:根据温度的测量值和设定值,通过比例、积分、微分三个环节的控制,精确调节控制设备的工作状态,使温度尽可能接近设定值。
5. 系统实现和调试:a. 硬件连接:根据设计制作电路板,并连接单片机、温度传感器、继电器、液晶显示器等组件。
b. 程序编写:按照软件设计进行程序编写,并进行单片机的初始化设置、温度数据的采集和处理、继电器的控制等功能的实现。
c. 系统调试:通过实际应用场景中的温度测试数据,验证系统的稳定性和准确性,并根据实际情况进行调试和优化,确保系统达到要求的温度控制效果。
《2024年基于8051单片机的温度控制系统》范文

《基于8051单片机的温度控制系统》篇一一、引言随着科技的飞速发展,人们对各类生产与生活设备的智能性和精度要求不断提高。
其中,温度控制系统作为一种关键的工业和家庭自动化技术,已成为当今科学研究与技术应用的重点。
在众多的单片机技术中,基于8051单片机的温度控制系统因其实时性强、性价比高以及适应性强等优点而得到了广泛的应用。
本文旨在深入探讨基于8051单片机的温度控制系统的设计与实现过程。
二、系统概述基于8051单片机的温度控制系统是一种典型的自动化控制系统,该系统采用高精度的温度传感器进行实时检测,并将数据通过A/D转换器传输至8051单片机。
单片机根据预设的算法对数据进行处理,然后通过PWM(脉宽调制)或开关控制等方式对执行器进行控制,以达到调节温度的目的。
三、硬件设计1. 单片机选择:选用8051系列单片机作为核心控制单元,因其性能稳定、成本低、资源丰富等优点而成为行业内的主流选择。
2. 温度传感器:选择高精度的温度传感器进行实时检测,如DS18B20等。
3. A/D转换器:将传感器输出的模拟信号转换为单片机可以处理的数字信号。
4. 执行器:根据需要选择合适的执行器,如加热器、制冷器等。
四、软件设计软件设计是整个系统的核心部分,主要涉及单片机的编程和控制算法的实现。
1. 编程语言:采用C语言进行编程,因其具有代码可读性强、可移植性好等优点。
2. 控制算法:根据实际需求选择合适的控制算法,如PID (比例-积分-微分)控制算法等。
通过编程实现对温度的精确控制。
3. 人机交互:通过LCD显示屏等人机交互设备,实现对系统的实时监控和操作。
五、系统实现系统实现包括硬件连接、程序编写、调试与优化等步骤。
首先将硬件设备按照电路图进行连接,然后编写程序实现单片机的控制功能。
在调试过程中,需要不断优化控制算法和程序代码,以达到最佳的温控效果。
六、系统性能分析基于8051单片机的温度控制系统具有以下优点:1. 实时性强:能够实时检测温度并快速作出反应。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的智能温控系统的设计与实现文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]课程设计报告设计名称基于单片机的智能温控系统的设计与实现学校陕西电子科技职业学院学院电子工程学院学生姓名王一飞班级1507指导教师聂弘颖时间2017年10月23日一、概述随着嵌入式技术、计算机技术、通信技术的不断发展与成熟。
控制系统以其直观、方便、准确、适用广泛而被越来越广泛地应用于工业过程、空调系统、智能楼宇等。
恒温控制系统,控制对象是温度。
温度控制在日常生活及工作领域应用的相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制,而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。
针对此问题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。
本项目设计是对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能:被控温度范围可以调整,初始范围25<=T<=35。
如果被测温度在25度到35度之间,则既不加热,又不报警;如果被测温度小于25度,则既加热,又报警;如果被测温度大于35度,则报警,不加热。
数码管显示温度,温度精确到整数。
二、方案设计采用单片机+单总线DS18B20的方案,其中单片机采用51兼容系列三、详细硬件设计及原件介绍单片机最小系统在基于单片机的应用系统中,其核心是单片机的最小系统,而单片机又是最小系统的核心,为了方便起见,采用的单片机型号是:STC89C52RC,内部资源有:8KBFLASH ,512B SRAM,4个8位I/O,2个TC,1个UART,带ISP和IAP功能。
是近年来流行的低端51单片机。
时钟电路采用晶体,复位电路采用简单的RC复位电路。
R=10K,C=10uF,详细电路见总体原理图DS18B20简介DS18B20是采用“1-wire”一线总线传输数据的集成温度传感器,信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线。
可采用外部电源供电,也可采用总线供电方式,此时,把VDD连接在一起作为数字电源。
因为每一个DS18B20有唯一的系列号(silicon serial number),因此多个DS18B20可以存在于同一条单线总线上,这允许在许多地方放置温度灵敏器件。
此特性的应用范围包括HVAC环境控制,建筑物、设备或机械内的温度检测。
DS18B20与单片机接口四、总体原理图见附录1五、程序设计1、主程序流程图六、项目总结通过对该项目的设计制作,我对简单的单片机控制系统的开发过程有了比较全面的理解,在这次实习中,我的体会有:1.细心,制作硬件和编写程序,调试程序,都需要细心,否则很容易失败。
2.基础,单片机不是万能的,它需要外部硬件电路的配合,这些电路不复杂,但是要弄明白它的原理,还是要下一番功夫的。
像基础的电子焊接,测量,元件的识别等都是。
3.团队合作,由于时间的关系,每个项目由几个人合作,这时就特别需要团队合作意识。
4.撰写设计文档,对写设计文档总感到是一种累赘——反正实物已经出来了,有没有文档关系不大。
现在需要在设计过程中随时记录一些东西,最后整理成设计文档。
5.将一个大的问题分割成几个相对独立的部分,更容易解决。
附录1:电路原理图附录2:代码:(1)名称:温控系统#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义//#include<>#define uchar unsigned char#define uint unsigned int/******************************************************************//* 定义端口 *//******************************************************************/sbit DQ=P2^7;//ds18b20 端口sbit ledj=P1^1;//加热sbit ledb=P1^7;//报警sbit keyup=P3^0; //温度加sbit keydn=P3^1; //温度减/******************************************************************//* 全局变量 *//******************************************************************/uint tmax=30;uint tmin=26;uint temp;uchar shi,ge,temph,i,j,x;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //7段数码管段码表共阳/******************************************************************//* 函数声明 *//******************************************************************/ unsigned int ReadWD(void);void csh(void);unsigned char ReadOneChar(void);void WriteOneChar(uchar dat);void delay(uint i);void xs(uchar shi,uchar ge);void sjcl();/******************************************************************/ /* 主函数 *//******************************************************************/ void main(){//unsigned char temph;while(1){if(keyup==0){for(j=0;j<20;j++){for(i=0;i<20;i++){shi=tmax/10;ge=tmax%10;xs(shi,ge);}delay(5000);shi=10;ge=10;xs(shi,ge);if(keyup==0){tmax++;while(keyup==0);}if(keydn==0){tmax--;while(keydn==0);}}}else if(keydn==0){for(j=0;j<20;j++){for(i=0;i<20;i++){shi=tmin/10;ge=tmin%10;xs(shi,ge);}delay(5000);shi=10;ge=10;xs(shi,ge);if(keyup==0){tmin++;while(keyup==0);}if(keydn==0){tmin--;while(keydn==0);}}}else{if(x==0){temp=ReadWD();//定时读取当前温度temph=temp>>4;shi=temph/10; //十位温度ge=temph%10; //个位温度}}xs(shi,ge); //显示温度sjcl(); //数据处理}}/******************************************************************/ /* 显示函数 *//******************************************************************/ void xs(uchar shi,uchar ge){P2=2;P0=tab[shi];delay(500);P2=3;P0=tab[ge];delay(500);P2=4;P0=0xc6;delay(500);}/******************************************************************//* 数据处理函数 *//******************************************************************/ void sjcl(){if(temph>tmax){ledj=1;ledb=0;}else if(temph>=tmin&&temph<=tmax){ledj=1;ledb=1;}else{ledj=0;ledb=0;}}/******************************************************************//* 延时函数 *//******************************************************************/ void delay(unsigned int i)//延时函数{while(i--);}/******************************************************************//* 初始化 *//******************************************************************/ void csh(void){//unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于 480usDQ = 1; //拉高总线delay(10);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay(5);}/******************************************************************/ /* 读一个字节 *//******************************************************************/ unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ==1)dat|=0x80;delay(5);}return(dat);}/******************************************************************/ /* 写一个字节 *//******************************************************************/ void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8;i>0;i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}delay(5);}/******************************************************************//* 读取温度 *//******************************************************************/ unsigned int ReadWD(void){unsigned char a=0;unsigned int b=0;unsigned int t=0;csh();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay(200);csh();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); //低位b=ReadOneChar(); //高位b<<=8;t=a+b;return(t);}(2)名称:DS18B20温度计,温度值由单片机发给上位机并显示(扩展功能程序)/*-----------------------------------------------名称:18B20温度传感器,温度在上位机显示公司:陕西圣弘科技有限公司编写:赵进全日期:------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<>//#include<>#define uchar unsigned char#define uint unsigned int/******************************************************************//* 定义端口 *//******************************************************************/sbit DQ=P2^7;//ds18b20 端口/******************************************************************//* 全局变量 *//******************************************************************/uint temp;uchar shi,ge,bh;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //7段数码管段码表共阳/******************************************************************//* 函数声明 *//******************************************************************/ unsigned int ReadWD(void);void csh(void);unsigned char ReadOneChar(void);void WriteOneChar(uchar dat);void delay(uint i);void xs(uchar shi,uchar ge);/******************************************************************//* 主函数 *//******************************************************************/void init_com(void) //串口初始化函数{TMOD=0X20; //定时器1定时方式2//PCON=0X00;SCON=0X50; //串口方式1,允许接收TH1=0XFD; //波特率为9600TL1=0XFD;TR1=1;}void comm(char *parr) //串口发送数据函数{do{SBUF=*parr++; //发送数据while(!TI); //数据发送完标志位1TI=0; //标志清0}while(*parr); //保持循环直到字符为'\0'}main() //主函数{unsigned char TempH,buff[2];init_com();while(1){temp=ReadWD();//定时读取当前温度TempH=temp>>4;shi=TempH%100/10; //十位温度ge=TempH%100%10; //个位温度bh=0x39; //显示C符号xs(shi,ge);sprintf(buff,"%d",temp>>4); //将整型温度转换成字符型comm(buff); //将字符型温度由串口发送到上位机}}void xs(uchar shi,uchar ge){P2=1;P0=tab[shi];delay(500);P2=2;P0=0;P0=tab[ge];delay(500);P0=0;P2=3;P0=bh;delay(500);P0=0;}/******************************************************************/ /* 延时函数 */ /******************************************************************/ void delay(unsigned int i)//延时函数{while(i--);}/******************************************************************/ /* 初始化 *//******************************************************************/ void csh(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于 480usDQ = 1; //拉高总线delay(10);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay(5);}/******************************************************************/ /* 读一个字节 *//******************************************************************/ unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(5);}return(dat);}/******************************************************************/ /* 写一个字节 *//******************************************************************/ void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8;i>0;i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}delay(5);}/******************************************************************//* 读取温度 *//******************************************************************/ unsigned int ReadWD(void){unsigned char a=0;unsigned int b=0;unsigned int t=0;csh();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay(200);csh();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); //低位b=ReadOneChar(); //高位b<<=8;t=a+b;return(t);}。