基于单片机的智能温控系统的设计与实现

合集下载

基于单片机的室内温度控制系统设计与实现

基于单片机的室内温度控制系统设计与实现

基于单片机的室内温度控制系统设计与实现1. 本文概述随着科技的发展和人们生活水平的提高,室内环境的舒适度已成为现代生活中不可或缺的一部分。

作为室内环境的重要组成部分,室内温度的调控至关重要。

设计并实现一种高效、稳定且经济的室内温度控制系统成为了当前研究的热点。

本文旨在探讨基于单片机的室内温度控制系统的设计与实现,以满足现代家居和办公环境的温度控制需求。

本文将首先介绍室内温度控制系统的研究背景和意义,阐述其在实际应用中的重要性和必要性。

随后,将详细介绍基于单片机的室内温度控制系统的设计原理,包括硬件设计、软件编程和温度控制算法等方面。

硬件设计部分将重点介绍单片机的选型、传感器的选取、执行机构的搭配等关键环节软件编程部分将介绍系统的程序框架、主要功能模块以及温度数据的采集、处理和控制逻辑温度控制算法部分将探讨如何选择合适的控制算法以实现精准的温度调控。

在实现过程中,本文将注重理论与实践相结合,通过实际案例的分析和实验数据的验证,展示基于单片机的室内温度控制系统的实际应用效果。

同时,还将对系统的性能进行评估,包括稳定性、准确性、经济性等方面,以便为后续的改进和优化提供参考。

本文将对基于单片机的室内温度控制系统的设计与实现进行总结,分析其优缺点和适用范围,并对未来的研究方向进行展望。

本文旨在为读者提供一种简单、实用的室内温度控制系统设计方案,为相关领域的研究和实践提供有益的参考。

2. 单片机概述单片机,也被称为微控制器或微电脑,是一种集成电路芯片,它采用超大规模集成电路技术,将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种IO口和中断系统、定时器计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、AD转换器等电路)集成到一块硅片上,构成一个小而完善的微型计算机系统。

单片机以其体积小、功能齐全、成本低廉、可靠性高、控制灵活、易于扩展等优点,广泛应用于各种控制系统和智能仪器中。

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

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

基于单片机的温度智能控制系统的设计与实现共3篇基于单片机的温度智能控制系统的设计与实现1基于单片机的温度智能控制系统的设计与实现随着人们对生活质量的需求越来越高,温度控制变得愈发重要。

在家庭、医院、实验室、生产车间等场合,温度控制都是必不可少的。

本文将介绍一种基于单片机的温度智能控制系统的设计与实现。

设计思路本文所设计的温度智能控制系统主要由单片机、温度传感器、继电器和液晶屏幕等部件组成。

其中,温度传感器负责采集温度数据,单片机负责处理温度数据,并实现温度智能控制功能。

继电器用于控制加热设备的开关,液晶屏幕用于显示当前温度和系统状态等信息。

在实现温度智能控制功能时,本设计采用了PID控制算法。

PID控制算法是一种经典的控制算法,它基于目标值和当前值之间的误差来调节控制量,从而实现对温度的精确控制。

具体来说,PID控制器包含三个部分:比例控制器(P)用于对误差进行比例调节,积分控制器(I)用于消除误差的积累,微分控制器(D)用于抑制误差的未来变化趋势。

这三个控制器的输出信号加权叠加后,作为继电器的控制信号,实现对加热设备的控制。

系统实现系统硬件设计在本设计中,我们选择了常见的AT89S52单片机作为核心控制器。

该单片机运行速度快、稳定性好,易于编程,并具有较强的扩展性。

为了方便用户调节温度参数和查看当前温度,我们还选用了4 * 20的液晶屏。

温度传感器采用LM35型温度传感器,具有高精度、线性输出特性,非常适用于本设计。

系统电路图如下所示:系统软件设计在单片机的程序设计中,我们主要涉及到以下几个部分:1. 温度采集模块为了实现温度智能控制功能,我们首先需要获取当前的温度数据。

在本设计中,我们使用了AT89S52单片机的A/D转换功能,通过读取温度传感器输出的模拟电压值,实现对温度的采集。

采集到的温度数据存储在单片机的内部存储器中,以供后续处理使用。

2. PID控制模块PID控制模块是本设计的核心模块,它实现了对温度的精确控制。

《2024年基于51单片机的温度控制系统设计与实现》范文

《2024年基于51单片机的温度控制系统设计与实现》范文

《基于51单片机的温度控制系统设计与实现》篇一一、引言在现代工业控制领域,温度控制系统的设计与实现至关重要。

为了满足不同场景下对温度精确控制的需求,本文提出了一种基于51单片机的温度控制系统设计与实现方案。

该系统通过51单片机作为核心控制器,结合温度传感器与执行机构,实现了对环境温度的实时监测与精确控制。

二、系统设计1. 硬件设计本系统以51单片机为核心控制器,其具备成本低、开发简单、性能稳定等优点。

硬件部分主要包括51单片机、温度传感器、执行机构(如加热器、制冷器等)、电源模块等。

其中,温度传感器负责实时监测环境温度,将温度信号转换为电信号;执行机构根据控制器的指令进行工作,以实现对环境温度的调节;电源模块为整个系统提供稳定的供电。

2. 软件设计软件部分主要包括单片机程序与上位机监控软件。

单片机程序负责实时采集温度传感器的数据,根据设定的温度阈值,输出控制信号给执行机构,以实现对环境温度的精确控制。

上位机监控软件则负责与单片机进行通信,实时显示环境温度及控制状态,方便用户进行监控与操作。

三、系统实现1. 硬件连接将温度传感器、执行机构等硬件设备与51单片机进行连接。

具体连接方式根据硬件设备的接口类型而定,一般采用串口、并口或GPIO口进行连接。

连接完成后,需进行硬件设备的调试与测试,确保各部分正常工作。

2. 软件编程编写51单片机的程序,实现温度的实时采集、数据处理、控制输出等功能。

程序采用C语言编写,易于阅读与维护。

同时,需编写上位机监控软件,实现与单片机的通信、数据展示、控制指令发送等功能。

3. 系统调试在完成硬件连接与软件编程后,需对整个系统进行调试。

首先,对单片机程序进行调试,确保其能够正确采集温度数据、输出控制信号。

其次,对上位机监控软件进行调试,确保其能够与单片机正常通信、实时显示环境温度及控制状态。

最后,对整个系统进行联调,测试其在实际应用中的性能表现。

四、实验结果与分析通过实验测试,本系统能够实现对环境温度的实时监测与精确控制。

单片机温度控制系统设计及实现

单片机温度控制系统设计及实现

单片机温度控制系统设计及实现温度控制是很多自动化系统中的重要部分,可以应用于许多场景,如家用空调系统、工业加热系统等。

本文将介绍如何利用单片机设计和实现一个简单的温度控制系统。

一、系统设计1. 硬件设计首先,我们需要选择合适的硬件来搭建我们的温度控制系统。

一个基本的温度控制系统由以下几个组件组成:- 传感器:用于检测环境的温度。

常见的温度传感器有热敏电阻和温度传感器。

- 控制器:我们选择的是单片机,可以根据传感器的读数进行逻辑判断,并控制输出的信号。

- 执行器:用于根据控制器的指令执行具体的动作,例如开启或关闭空调。

2. 软件设计温度控制系统的软件部分主要包括,传感器读取、温度控制逻辑和执行器控制。

我们可以使用C语言来编写单片机的软件。

- 传感器读取:通过串口或者模拟输入端口来读取传感器的数据,可以利用类似的库函数或者自己编写读取传感器数据的函数。

- 温度控制逻辑:根据读取到的温度值,判断当前环境是否需要进行温度调节,并生成相应的控制信号。

- 执行器控制:将控制信号发送到执行器上,实现对温度的调节。

二、系统实施1. 硬件连接首先,将传感器连接到单片机的输入端口,这样单片机就可以读取传感器的数据。

然后,将执行器连接到单片机的输出端口,单片机可以通过控制输出端口的电平来控制执行器的开关。

2. 软件实现编写单片机的软件程序,根据前面设计的软件逻辑,实现温度的读取和控制。

首先,读取传感器的数据,可以定义一个函数来读取传感器的数据并返回温度值。

其次,根据读取到的温度值,编写逻辑判断代码,判断当前环境是否需要进行温度调节。

如果需要进行温度调节,可以根据温度的高低来控制执行器的开关。

最后,循环执行上述代码,实现实时的温度检测和控制。

三、系统测试和优化完成软硬件的实施之后,需要对温度控制系统进行测试和优化。

1. 测试通过模拟不同的温度情况,并观察控制器的输出是否能够正确地控制执行器的开关。

可以使用温度模拟器或者改变环境温度来进行测试。

基于单片机的智能温控系统设计

基于单片机的智能温控系统设计

基于单片机的智能温控系统设计随着科学技术的发展,人们需要更加便捷高效的生活方式。

智能家居作为一种新兴的科技应用,吸引了越来越多的人的关注。

其中,智能温控系统是人们更为关心的一部分,因为温度直接关系到人们的身体健康。

通过单片机技术的应用,可以设计出一种高效智能的温控系统。

一、智能温控系统的设计方案1. 系统硬件设计:主机采用单片机AT89S52和温度传感器DS18B20组成,温度控制功能通过智能继电器,整个系统实现了硬件基础框架。

2. 系统软件设计:主要涉及到单片机程序的编写和控制,具体涉及到诸如温度检测、温度控制、屏幕显示等功能。

3. 系统人机交互设计:通过显示屏幕和按键控制实现人机交互操作。

4. 系统通信设计:通过WiFi模块实现远程通信功能。

二、温度传感器DS18B20的原理及应用DS18B20是一款基于数字信号输出的温度传感器,原理是利用温度对半导体器件的电阻或电压的变化,来达到测量温度的目的。

它具有精度高、响应速度快、口径小的特点,因此常被应用于智能家居领域中的温控系统。

三、智能继电器的原理及应用智能继电器是利用单片机技术,将微处理器县的高低电平输出与继电器的通断控制相结合,达到了计算机智能化的效果。

它的最大优点就是可以通过计算机远程控制,从而实现智能化管理。

在温控系统中,可以根据温度的不同值,实现启动或关闭继电器,调节温度的稳定值。

四、智能温控系统的应用前景智能温控系统作为智能家居领域中的一部分,已经逐渐开始运用到人们的现实生活中。

随着人们对于生活品质的不断提高,智能家居的应用市场不断扩大,而温控系统作为其一部分也将得到更加广泛的应用。

尤其在一些高结构化的场所中,例如办公楼、酒店等场所,都需要通过温度的调节来实现舒适性的提升。

因此,智能温控系统的发展前途广阔。

总之,通过单片机技术的应用,可以实现智能温控系统的设计,这样的设计不仅降低了使用成本,提高使用效率,还具有自动化、智能化、人性化的特点,深受人们欢迎。

《2024年基于8051单片机的温度控制系统》范文

《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.执行器:负责根据控制器的指令控制设备工作状态,如电风扇、加热器等。

4.显示器:用于显示当前环境温度和控制状态等信息。

系统的功能需求主要包括:1.温度监测:通过温度传感器实时获取环境温度数据。

2.温度控制算法:根据温度数据进行算法计算,判断是否需要调节设备工作状态。

3.设备控制:根据控制算法的结果控制设备的工作状态,如打开或关闭电风扇、加热器等。

4.信息显示:将当前环境温度及控制状态等信息显示在显示器上。

二、系统实现的具体步骤:1.硬件设计:(1)选择适合的单片机:根据系统功能需求选择合适的单片机,通常选择具有较多输入输出引脚、计算能力较强的单片机。

(2)温度传感器的选择:选择合适的温度传感器,常见的有热敏电阻、热电偶、数字温度传感器等。

(3)执行器的选择:根据实际需求选择合适的执行器,如电风扇、加热器等。

(4)显示器的选择:选择适合的显示器以显示当前温度和控制状态等信息,如液晶显示屏等。

2.软件设计:(1)编写驱动程序:编写单片机与传感器、执行器、显示器等硬件的驱动程序,完成数据的读取和输出功能。

(2)设计温度控制算法:根据监测到的温度数据编写温度控制算法,根据不同的温度范围判断是否需要调节设备工作状态。

(3)控制设备的逻辑设计:根据温度控制算法的结果设计控制设备的逻辑,确定何时打开或关闭设备。

(4)设计用户界面:设计用户界面以显示当前温度和控制状态等信息,提示用户工作状态。

单片机实现的智能温控系统设计

单片机实现的智能温控系统设计

单片机实现的智能温控系统设计随着科技的不断发展,越来越多的技术让我们的生活更加便利。

其中,智能家居技术越来越成熟,越来越普及。

以前需要人为控制的事情,现在可以通过智能控制设备来完成。

其中,温控系统作为智能家居的重要组成部分,也是很多家庭必备的设备。

单片机实现的智能温控系统设计,不仅可以实现更加精准、方便的温度控制,还可以通过程序实现更加灵活、智能的控制与调节。

一、单片机实现的智能温控系统设计原理智能温控系统的实现原理主要是通过传感器采集温度信号,传输到单片机,单片机通过程序进行处理,再通过对应的输出控制器进行输出控制,如开关继电器、控制阀门等。

其中,单片机作为核心部件,起着控制和调节的作用。

二、单片机实现的智能温控系统设计方案1. 硬件设计硬件方案是智能温控系统设计的重要部分,包括传感器模块、单片机模块、输出控制模块等。

传感器主要是采集温度信号,单片机模块主要是对采集的信号进行处理以及与输出进行控制连接,输出控制模块主要是驱动继电器、阀门等。

传感器模块可以选择DS18B20数字温度传感器或者NTC恒温电阻,其优点是使用方便、精确度高,缺点是需要额外连接上拉电阻或串联电路。

输出控制模块可以采用继电器、MOS三极管、场效应管等,其中继电器通用性强,但会产生电磁干扰。

MOS管和场效应管控制精度高,但需要外加稳压、保护电路。

2. 软件设计软件设计是智能温控系统的核心,其主要功能是根据温度信号进行智能控制,实现更加灵活、方便的调节和控制。

主要包括如下几个方面:(1)温度采集调试:对传感器的信号进行采集调试,如调节温度系数、校准温度信号等。

(2)PID控制算法实现:PID控制算法是广泛应用于控制系统的一种算法,其主要作用是实现对温度的精确控制。

(3)输出控制:对输出控制进行调试,如控制继电器的开关、控制阀门的开关、控制风扇等。

三、单片机实现的智能温控系统优缺点1. 优点单片机实现的智能温控系统具有很多优点:(1)精度高:由于采用PID控制算法,可以实现对温度的精确控制。

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

课程设计报告设计名称基于单片机的智能温控系统的设计与实现学校陕西电子科技职业学院学院电子工程学院学生姓名王一飞班级1507指导教师聂弘颖时间2017年10月23日一、概述随着嵌入式技术、计算机技术、通信技术的不断发展与成熟。

控制系统以其直观、方便、准确、适用广泛而被越来越广泛地应用于工业过程、空调系统、智能楼宇等。

恒温控制系统,控制对象是温度。

温度控制在日常生活及工作领域应用的相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制,而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。

针对此问题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。

本项目设计是对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能:被控温度范围可以调整,初始范围25<=T<=35。

如果被测温度在25度到35度之间,则既不加热,又不报警;如果被测温度小于25度,则既加热,又报警;如果被测温度大于35度,则报警,不加热。

数码管显示温度,温度精确到整数。

二、方案设计采用单片机+单总线DS18B20的方案,其中单片机采用51兼容系列三、详细硬件设计及原件介绍3.1 单片机最小系统在基于单片机的应用系统中,其核心是单片机的最小系统,而单片机又是最小系统的核心,为了方便起见,采用的单片机型号是:STC89C52RC,内部资源有:8KB FLASH ,512B SRAM,4个8位I/O,2个TC,1个UART,带ISP和IAP功能。

是近年来流行的低端51单片机。

时钟电路采用12.0M晶体,复位电路采用简单的RC复位电路。

R=10K,C=10uF,详细电路见总体原理图3.2 DS18B20简介DS18B20是采用“1-wire”一线总线传输数据的集成温度传感器,信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线。

可采用外部电源供电,也可采用总线供电方式,此时,把VDD连接在一起作为数字电源。

因为每一个DS18B20有唯一的系列号(silicon serial number),因此多个DS18B20可以存在于同一条单线总线上,这允许在许多地方放置温度灵敏器件。

此特性的应用范围包括HVAC环境控制,建筑物、设备或机械内的温度检测。

3.2 DS18B20与单片机接口四、总体原理图见附录1五、程序设计1、主程序流程图六、项目总结通过对该项目的设计制作,我对简单的单片机控制系统的开发过程有了比较全面的理解,在这次实习中,我的体会有:1.细心,制作硬件和编写程序,调试程序,都需要细心,否则很容易失败。

2.基础,单片机不是万能的,它需要外部硬件电路的配合,这些电路不复杂,但是要弄明白它的原理,还是要下一番功夫的。

像基础的电子焊接,测量,元件的识别等都是。

3.团队合作,由于时间的关系,每个项目由几个人合作,这时就特别需要团队合作意识。

4.撰写设计文档,对写设计文档总感到是一种累赘——反正实物已经出来了,有没有文档关系不大。

现在需要在设计过程中随时记录一些东西,最后整理成设计文档。

5.将一个大的问题分割成几个相对独立的部分,更容易解决。

附录1:电路原理图附录2:代码:(1)名称:温控系统#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义//#include<INTRINS.H>#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;{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);}/******************************************************************//* 数据处理函数*//******************************************************************/{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温度传感器,温度在上位机显示公司:陕西圣弘科技有限公司编写:赵进全日期:2010.8------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<stdio.h>//#include<INTRINS.H>#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 T empH,buff[2];init_com();while(1){temp=ReadWD();//定时读取当前温度T empH=temp>>4;shi=T empH%100/10; //十位温度ge=T empH%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); }。

相关文档
最新文档