基于51单片机的温度控制系统的设计说明书
《2024年基于51单片机的温度控制系统设计与实现》范文
《基于51单片机的温度控制系统设计与实现》篇一一、引言在现代工业控制领域,温度控制系统的设计与实现至关重要。
为了满足不同场景下对温度精确控制的需求,本文提出了一种基于51单片机的温度控制系统设计与实现方案。
该系统通过51单片机作为核心控制器,结合温度传感器与执行机构,实现了对环境温度的实时监测与精确控制。
二、系统设计1. 硬件设计本系统以51单片机为核心控制器,其具备成本低、开发简单、性能稳定等优点。
硬件部分主要包括51单片机、温度传感器、执行机构(如加热器、制冷器等)、电源模块等。
其中,温度传感器负责实时监测环境温度,将温度信号转换为电信号;执行机构根据控制器的指令进行工作,以实现对环境温度的调节;电源模块为整个系统提供稳定的供电。
2. 软件设计软件部分主要包括单片机程序与上位机监控软件。
单片机程序负责实时采集温度传感器的数据,根据设定的温度阈值,输出控制信号给执行机构,以实现对环境温度的精确控制。
上位机监控软件则负责与单片机进行通信,实时显示环境温度及控制状态,方便用户进行监控与操作。
三、系统实现1. 硬件连接将温度传感器、执行机构等硬件设备与51单片机进行连接。
具体连接方式根据硬件设备的接口类型而定,一般采用串口、并口或GPIO口进行连接。
连接完成后,需进行硬件设备的调试与测试,确保各部分正常工作。
2. 软件编程编写51单片机的程序,实现温度的实时采集、数据处理、控制输出等功能。
程序采用C语言编写,易于阅读与维护。
同时,需编写上位机监控软件,实现与单片机的通信、数据展示、控制指令发送等功能。
3. 系统调试在完成硬件连接与软件编程后,需对整个系统进行调试。
首先,对单片机程序进行调试,确保其能够正确采集温度数据、输出控制信号。
其次,对上位机监控软件进行调试,确保其能够与单片机正常通信、实时显示环境温度及控制状态。
最后,对整个系统进行联调,测试其在实际应用中的性能表现。
四、实验结果与分析通过实验测试,本系统能够实现对环境温度的实时监测与精确控制。
基于51单片机的温度控制系统设计
基于51单片机的温度控制系统设计引言:随着科技的不断进步,温度控制系统在我们的生活中扮演着越来越重要的角色。
特别是在一些需要精确控制温度的场合,如实验室、医疗设备和工业生产等领域,温度控制系统的设计和应用具有重要意义。
本文将以基于51单片机的温度控制系统设计为主题,探讨其原理、设计要点和实现方法。
一、温度控制系统的原理温度控制系统的基本原理是通过传感器感知环境温度,然后将温度值与设定值进行比较,根据比较结果控制执行器实现温度的调节。
基于51单片机的温度控制系统可以分为三个主要模块:温度传感器模块、控制模块和执行器模块。
1. 温度传感器模块温度传感器模块主要用于感知环境的温度,并将温度值转换成电信号。
常用的温度传感器有热敏电阻、热敏电偶和数字温度传感器等,其中热敏电阻是最常用的一种。
2. 控制模块控制模块是整个温度控制系统的核心,它负责接收传感器传来的温度信号,并与设定值进行比较。
根据比较结果,控制模块会输出相应的控制信号,控制执行器的工作状态。
51单片机作为一种常用的嵌入式控制器,可以实现控制模块的功能。
3. 执行器模块执行器模块根据控制模块输出的控制信号,控制相关设备的工作状态,以实现对温度的调节。
常用的执行器有继电器、电磁阀和电动机等。
二、温度控制系统的设计要点在设计基于51单片机的温度控制系统时,需要考虑以下几个要点:1. 温度传感器的选择根据具体的应用场景和要求,选择合适的温度传感器。
考虑传感器的测量范围、精度、响应时间等因素,并确保传感器与控制模块的兼容性。
2. 控制算法的设计根据温度控制系统的具体要求,设计合适的控制算法。
常用的控制算法有比例控制、比例积分控制和模糊控制等,可以根据实际情况选择适合的算法。
3. 控制信号的输出根据控制算法的结果,设计合适的控制信号输出电路。
控制信号的输出电路需要考虑到执行器的工作电压、电流等参数,确保信号能够正常控制执行器的工作状态。
4. 系统的稳定性和鲁棒性在设计过程中,需要考虑系统的稳定性和鲁棒性。
单片机基于51单片机温度控制设计简介
单片机基于51单片机温度控制设计简介一、引言本文将介绍基于51单片机的温度控制设计,其中包括硬件设计和软件设计两个部分。
温度控制是工业自动化中非常重要的一部分,其应用范围非常广泛,如冷库、温室、恒温水槽等。
本文所介绍的温度控制设计可广泛应用于各种场合。
二、硬件设计1.传感器部分本设计采用DS18B20数字温度传感器,其具有精度高、抗干扰能力强等优点。
传感器的输出信号为数字信号,与51单片机通信采用单总线方式。
2.控制部分本设计采用继电器控制加热器的开关,继电器的控制信号由51单片机输出。
同时,为了保证控制精度,本设计采用PID控制算法,其中P、I、D系数均可根据实际情况进行调整。
3.显示部分本设计采用LCD1602液晶显示屏,可显示当前温度和设定温度。
4.电源部分本设计采用12V直流电源供电,其中需要注意的是,由于继电器的电流较大,因此需要采用稳压电源。
三、软件设计1.初始化在程序开始运行时,需要对各个模块进行初始化,包括DS18B20传感器、LCD1602液晶显示屏和PID控制器等。
2.采集温度程序需要不断地采集温度,通过DS18B20传感器获取当前温度值,并将其显示在LCD1602液晶显示屏上。
3.控制加热器根据当前温度和设定温度的差值,通过PID控制算法计算出控制信号,控制继电器的开关,从而控制加热器的加热功率。
4.调整PID参数为了保证控制精度,需要不断地调整PID控制算法中的P、I、D系数,以达到最优控制效果。
四、总结基于51单片机的温度控制设计,可以实现对温度的精确控制,具有应用广泛、控制精度高等优点。
本文所介绍的硬件设计和软件设计,可供读者参考和借鉴,同时也需要根据实际情况进行调整和改进。
基于51单片机的温度控制系统设计
基于51单片机的温度控制系统设计引言:随着科技的不断发展,温度控制系统在现代生活中应用广泛,例如空调、冰箱、温室等。
本文基于51单片机设计一个简单的温度控制系统,用于控制温度在一些合适的范围内。
一、系统功能设计本系统主要包括以下功能:1.温度采集:通过温度传感器实时采集环境温度数据;2.温度显示:将采集到的温度数据显示在液晶屏上,方便用户查看;3.温度控制:当环境温度超过设定的范围时,系统将自动启动风扇或制冷装置来降低温度;4.温度报警:当环境温度超过设定范围时,系统将通过报警器发出警报。
二、系统硬件设计1.51单片机2.LM35温度传感器:用于采集环境温度数据;3.ADC0804模数转换芯片:将LM35传感器输出的模拟电压转换为数字信号;4.LCD1602液晶屏:用于显示温度数据和系统状态;5. Buzzer报警器:用于发出警报;6.风扇或制冷装置:用于降低温度。
三、系统软件设计1.初始化:设置各个硬件模块的工作模式和初始化参数;2.温度采集:通过ADC0804芯片将LM35传感器输出的模拟信号转换为数字信号;3.温度显示:将采集到的数字信号转换为温度值,并通过LCD1602液晶屏显示;4.温度控制:根据设定的温度上下限值,判断当前温度是否超过范围,若超过则启动风扇或制冷装置进行温度控制;5. 温度报警:当温度超过设定范围时,通过Buzzer报警器发出声音警报;6.系统循环:以上功能通过循环执行,实现实时监控和控制。
四、系统流程图软件设计流程如下所示:```开始初始化系统循环执行以下步骤:采集温度数据显示温度数据温度控制判断温度报警判断结束```五、系统总结本文基于51单片机设计了一个简单的温度控制系统,通过温度采集、显示、控制和报警功能,实现了温度的实时监控和控制。
该系统可以广泛应用于家庭、办公室、温室等环境的温度控制,提高生活质量和工作效率。
六、系统展望本系统可以进行进一步的优化和扩展,例如添加温度传感器的校准功能,提高温度采集的精度;增加温度曲线图显示功能,方便用户了解温度变化趋势;引入无线通信模块,使用户可以通过手机或电脑远程监控和控制温度等。
基于51单片机水温检测控制系统说明书
基于单片机的水温检测控制系统设计学生姓名王培同院系名称机电学院专业名称机械电子工程班级机电132学号201300384228指导教师完成时间目录1 引言 (3)2 设计要求 (3)2.1 基本要求 (3)2.2 扩展功能 (3)3 总体方案设计 (3)3.1 方案论证 (3)3.1.1 方案一 (3)3.1.2 方案二 (4)4 硬件设计 (4)4.1 单片机系统 (4)4.2 数字温度传感器模块 (5)4.2.1 DS18B20性能 (5)4.2.2 DS18B20外形及引脚说明 (5)4.2.3 DS18B20接线原理图 (6)4.2.4 DS18B20时序图 (6)4.2.5 数据处理 (7)4.3 显示电路 (8)4.4 声光报警电路 (9)4.5 键盘输入电路 (10)5 软件设计 (11)5.1 主程序模块 (11)5.2 读温度值模块 (11)5.3 中断模块 (11)5.4 温度设定、报警模块 (12)6 源程序 (12)7 总结 (12)参考文献: (13)1 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。
数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。
其中数字温度计就是一个典型的例子。
数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。
其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C52RC单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LCD实现温度值显示。
2 设计要求2.1 基本要求实现实时温度显示,测温范围0~1200C,误差50C以内。
2.2 扩展功能温度报警,能任意设定温度范围实现温度的报警。
温度控制,利用继电器控制热得快,当设置好温度上下限后,当没有超过温度上限时,继电器吸合,热得快通电,加热水温。
基于 51 单片机的温度控制系统设计
基于 51 单片机的温度控制系统设计一、概述随着科技的不断进步,单片机技术在各个领域得到了广泛的应用,其中温度控制系统是其重要的应用之一。
温度控制系统的设计可以帮助我们在工业、农业、生活等领域实现精确的温度控制,提高生产效率和产品质量,降低能源消耗,提升人们的生活舒适度。
本文将讨论基于 51 单片机的温度控制系统设计。
二、系统设计原理1. 温度传感器原理温度传感器是温度控制系统中的关键元件,用于感知环境温度并将其转换为电信号。
常见的温度传感器包括热电偶、热敏电阻、半导体温度传感器等。
本系统选择半导体温度传感器,其工作原理是利用半导体材料的温度特性,通过材料的电阻、电压、电流等参数的变化来测量温度。
2. 控制系统原理温度控制系统的核心是控制器,它根据温度传感器采集到的温度信号进行逻辑判断,然后控制执行元件(如风扇、加热器等)来调节环境温度。
基于 51 单片机的控制系统,通过采集温度传感器信号,使用自身的算法进行温度控制,并输出控制信号给执行元件,从而实现温度的精确控制。
三、系统硬件设计1. 单片机选型本系统选择 51 单片机作为控制器,考虑到其成本低、易于编程和广泛的开发工具支持等优点。
常用的型号包括 STC89C51、AT89S51 等。
2. 温度传感器选型温度传感器的选型最终决定了系统测量的精度和稳定性。
选择适合的半导体温度传感器,如 LM35、DS18B20 等,其精度、响应时间、成本等因素需综合考虑。
3. 控制元件选型根据实际需要选择对应的执行元件,比如风扇、加热器、制冷器等,用于实现温度控制目标。
四、系统软件设计1. 控制算法设计控制系统应当具备良好的控制算法,通过对温度传感器信号的采集和处理,根据设定的温度范围和控制策略来输出对应的控制信号。
经典的控制算法包括比例积分微分(PID)控制算法、模糊控制算法等。
2. 硬件与软件接口设计单片机与传感器、执行元件之间的接口设计尤为重要,应当保证稳定可靠的通信。
基于51单片机的温度控制系统设计
基于51单片机的温度控制系统设计引言温度控制系统在现代生活中起着至关重要的作用。
它可以用于各种应用,如恒温器、空调、冰箱等。
本文将介绍基于51单片机的温度控制系统设计,详细讨论系统的架构、工作原理以及实现过程。
系统架构温度控制系统基于51单片机的设计,主要由以下几个部分组成: 1. 温度传感器:用于检测环境温度。
2. 51单片机:作为系统的核心控制器,负责接收温度传感器的数据并进行处理。
3. 显示模块:用于显示当前温度和控制状态。
4. 控制模块:根据温度数据和设定值,控制相关设备的开关。
工作原理温度控制系统的工作原理如下: 1. 温度传感器实时检测环境温度,并将数据传输给51单片机。
2. 51单片机接收到温度数据后,与设定值进行比较。
3. 如果当前温度高于设定值,51单片机将控制模块输出高电平信号,使相关设备工作。
4. 如果当前温度低于设定值,51单片机将控制模块输出低电平信号,停止相关设备工作。
5. 同时,51单片机将当前温度和控制状态发送给显示模块进行显示。
系统设计步骤以下是基于51单片机的温度控制系统设计的步骤:步骤一:电路设计1.连接温度传感器到51单片机的模拟输入引脚。
2.连接显示模块到51单片机的数字输出引脚。
3.连接控制模块到51单片机的数字输出引脚。
步骤二:编程设计1.初始化温度传感器和显示模块。
2.循环执行以下步骤:1.读取温度传感器的模拟输入值。
2.将模拟输入值转换为温度值。
3.与设定值进行比较,确定控制状态。
4.控制模块输出相应的电平信号。
5.将当前温度和控制状态发送给显示模块进行显示。
步骤三:调试和测试1.连接电路并烧录程序到51单片机。
2.使用温度源模拟不同温度条件,观察系统的控制效果。
3.根据实际测试结果,调整设定值和控制算法,以提高系统的稳定性和精度。
结论基于51单片机的温度控制系统设计可以实现对环境温度的精确控制。
通过合理的电路设计和编程实现,系统可以实时检测温度并根据设定值自动控制相关设备的工作状态。
基于51单片机的温度控制系统说明书
中北大学课程设计说明书学生姓名:学号:学院:机械与动力工程学院专业:机械电子工程题目:基于51单片机的温度控制系统设计职称: 讲师2015 年 1 月 19 日目录第1章绪论 (2)1.1 题目背景 (2)1.2 题目简介 (2)第2章系统总体设计及方案 (3)2.1单片机的介绍 (3)2.2系统功能的确定 (3)2.3温度传感器DS18B20的介绍 (3)2.3.1DS18B20的内部结构 (4)2.3.2 DS18B20的引脚介绍 (6)2.4人机交互与串口通信 (6)第3章硬件设计 (8)3.1系统结构框图 (8)3.2人机交互与串口通信单元设计 (9)3.2.1 键盘输入电路 (9)3.2.2 串口通信电路 (9)3.2.3 LED七段数码动态显示电路 (10)3.2.4 控制执行单元设计 (11)第4章软件设计 (12)4.1设计思路、程序代码 (12)结束语 (22)参考文献 (23)第1章绪论1.1 题目背景不论是对于工业生产还是对于人们的日常生活,温度的变化都会对其产生一定程度的影响。
所以,适时和恰当的温度控制对生产生活具有非常重要的作用。
在过去,对温度的控制总是采用常规的模拟调节器,然而,这种调节器存在的缺点是控制精度低,具有滞后、非线性等特点。
-本文将采用微电子技术来提高温度控制的精度,因为微电子技术的电路设计简单,控制效果好,具有很强的实用性。
众所周知,在现代工业以及家用电器测控领域中,单片机系统的开发和运用给其带来了全新的技术创新和变革。
而且,自动化和智能化程度的高低均依赖于是否使用单片机。
试想:将单片机的温度控制方法如果能够运用到温度控制系统中的话,那么,就可以在一定程度上缓减和克服温度控制系统中存在的滞后现象,同时在很大程度的上,单片机的使用可以提高温度的控制效果以及控制精度。
在工业自动化控制中,温度的控制一直都占有非常特殊的地位。
在本文中作者针对电烤箱的温控系统利用单片机进行设计,从而达到精确控制电烤箱温度目的。
基于51单片机的温度控制系统设计
基于51单片机的温度控制系统设计温度控制系统是一种常见的自动化控制系统,它可以通过传感器检测环境温度,并通过控制器对环境进行调节,以达到预设的温度值。
本文将介绍基于51单片机的温度控制系统设计。
一、系统设计思路本系统采用51单片机作为控制器,通过温度传感器检测环境温度,并通过继电器控制加热器或制冷器进行温度调节。
系统的设计思路如下:1. 采用DS18B20数字温度传感器检测环境温度。
2. 通过LCD1602液晶显示屏显示当前环境温度和设定温度。
3. 通过按键设置设定温度,并将设定温度保存在EEPROM中。
4. 根据当前环境温度和设定温度控制继电器,实现加热或制冷。
二、系统硬件设计1. 51单片机控制器本系统采用STC89C52单片机作为控制器,它具有强大的计算能力和丰富的外设资源,可以满足本系统的需求。
2. DS18B20数字温度传感器DS18B20是一种数字温度传感器,具有精度高、抗干扰能力强等优点,可以满足本系统的温度检测需求。
3. LCD1602液晶显示屏LCD1602是一种常见的液晶显示屏,可以显示2行16列的字符,可以满足本系统的显示需求。
4. 继电器本系统采用继电器控制加热器或制冷器进行温度调节。
5. 按键本系统采用按键设置设定温度。
三、系统软件设计1. 温度检测本系统采用DS18B20数字温度传感器检测环境温度,通过单总线协议与51单片机通信,读取温度值并进行转换,最终得到环境温度值。
2. 温度显示本系统采用LCD1602液晶显示屏显示当前环境温度和设定温度,通过51单片机控制液晶显示屏进行显示。
3. 温度控制本系统根据当前环境温度和设定温度控制继电器,实现加热或制冷。
当当前环境温度低于设定温度时,继电器控制加热器加热;当当前环境温度高于设定温度时,继电器控制制冷器制冷。
4. 温度设定本系统通过按键设置设定温度,并将设定温度保存在EEPROM中,下次启动时可以读取保存的设定温度。
四、系统实现效果本系统经过实际测试,可以准确检测环境温度,并根据设定温度控制加热或制冷,实现温度控制的功能。
基于51单片机的温度控制器
温度控制器本设计要求温度控制器实现以下基本功能:(1).数码管准确显示温度值,测量精度为±0.5C︒;(2).五个按键操作(设置温度,加键、复位);(3).可以温度设置,超过设定温度,继电器吸合(且蜂鸣器发出报警声)。
Proteus仿真图仅供学习参考Main.c/*==========================================================说明:基于DS18b20的温度控制报警程序作者:kks创建时间:2013-03-18修改时间:============================================================*/#include "config.h"#include "type.h"#include "DS18B20.h"/*===================全局定义===============================*/ static uint8 uKeyValue=0; //键值static uint16 unTemp=0; //读取的温度值static uint8 uCnt=0; //定时器计数值bit b2msflag=0; //2ms时间标志位bit b2mskeyflag=0; //2ms标志,用于按键扫描bit b50msflag=0;uint8 uKeyCnt=0; //按键延时计数uint8 code SegTable[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90, /*不带小数点的断码表*/0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10, /*带小数点的断码表*/0xbf,0xff,0x86,0x88}; //-,不显示,E,Ruint8 code BitTable[]={0xfe,0xfd,0xfb,0xf7}; //位码uint8 DisBuff[]={0,0,0,0}; //显示缓存区/**************************************************************函数名:Delay250us*输入:无*输出:无*功能:蜂鸣器延时函数**************************************************************/void Delay250us(void){uint8 j;for(j=28;j>0;j--) //250us基准延时程序{;}}/**************************************************************函数名:Init*输入:无*输出:无*功能:程序初始化**************************************************************/void Init(void){P0=P1=P2=P3=0XFF; //IO口初始化TMOD=0x01; //定时器0方式1TH0=0xf8; //定时2msTL0=0x30;ET0=1;EX0=1;EA=1;TR0=1;}/************************************************************* *函数名:KeyHandle*输入:tem*输出:返回温度上下限设置值,上限最大值为90,下限为0*功能:按键处理程序**************************************************************/ uint8 KeyHandle(uint8 tem){if(KEYUP==0){uKeyCnt++;if(uKeyCnt>=2) //消抖{uKeyCnt=0;if(KEYUP==0){tem++;if(tem>99)tem=0;while(!KEYUP);}}}if(KEYDOWN==0){uKeyCnt++;if(uKeyCnt>=2){uKeyCnt=0;if(KEYDOWN==0){tem--;if(tem==-1){tem=99;}while(!KEYDOWN);}}}if(KEYWRITE==0){uKeyCnt++;if(uKeyCnt>=2){uKeyCnt=0;if(KEYWRITE==0){CopyToEEPROM(); //将上下限拷贝到E2PROMwhile(!KEYWRITE);}}}return tem;}/************************************************************* *函数名:Buzz*输入:无*输出:无*功能:蜂鸣器报警函数**************************************************************/ void Buzz(void){uint8 i;for(i=10;i>0;i--){BEEP=0;Delay250us();Delay250us();BEEP=1;Delay250us();}BEEP=1;}/**************************************************************函数名:TemAlarm*输入:无*输出:无*功能:温度报警检测**************************************************************/ void TemAlarm(void){if((unTemp>uTHigh*10)||(unTemp<uTLow*10)){RELAY=0; //继电器动作Buzz(); //蜂鸣器报警}else{RELAY=1; //继电器复位BEEP=1; //关闭蜂鸣器}}/************************************************************* *函数名:DispTem*输入:无*输出:无*功能:温度数码管显示**************************************************************/ void DisTem(void){uint8 i,j;for(i=30;i>0;i--){for(j=0;j<4;){P0=SegTable[DisBuff[j]];P2=BitTable[j];if(b2msflag){b2msflag=0;P2=0xff;j++;}}}}/**************************************************************函数名:CopyToDisBuff*输入:tem*输出:无*功能:将温度数据写入显示缓存区**************************************************************/ void CopyToDisBuff(uint16 tem){DisBuff[0]=sign;DisBuff[1]=tem/100;DisBuff[2]=tem%100/10+10;DisBuff[3]=tem%10;}/************************************************************* *函数名:Error*输入:无*输出:无*功能:若无DS18b20或其故障,显示ERR**************************************************************/ void Error(void){DisBuff[0]=21; //不显示DisBuff[1]=22; //EDisBuff[2]=23; //RDisBuff[3]=23; //R}/************************************************************* *函数名:SoftReset*输入:无*输出:无*功能:单片机软件复位**************************************************************/ void SoftReset(void){((void(code*)(void))0x0000)(); //函数指针reset指向地址0}/************************************************************* *函数名:main*输入:无*输出:无*功能:主函数,程序入口**************************************************************/ void main(void){Init();if(Reset18b20()){GetFromEEPROM(); //读取温度上下限值unTemp=ReadTem(); //读取温度uTHigh=uTemHigh; //将上下限值复制到临时存储区uTLow=uTemLow;}else{Error();while(Reset18b20()==0){DisTem();}SoftReset(); //软件复位}while(1){DisTem(); //调用显示switch(uKeyValue){case 0:if(b50msflag){b50msflag=0;unTemp=ReadTem(); //读取温度CopyToDisBuff(unTemp); //更新显示缓存区TemAlarm(); //温度报警检测}break;case 1:if(b2mskeyflag){b2mskeyflag=0;uTHigh=KeyHandle(uTHigh); //设置温度上限CopyToDisBuff(uTHigh*10); //更新显示缓存区}break;case 2:if(b2mskeyflag){b2mskeyflag=0;uTLow=KeyHandle(uTLow); //设置温度下限CopyToDisBuff(uTLow*10); //更新显示缓存区}break;default:uKeyValue=0;break;}}}/************************************************************* *函数名:Timer0ISR*输入:无*输出:无*功能:T0中断服务函数**************************************************************/ void Timer0ISR(void) interrupt 1 using 1{TH0=0xf8; //重赋初值TL0=0x30;b2msflag=1; //2ms时间标志b2mskeyflag=1;uCnt++;if(uCnt>=25){uCnt=0;b50msflag=1;}}/************************************************************* *函数名:INT0ISR*输入:无*输出:无*功能:INT0中断服务函数**************************************************************/ void INT0ISR(void) interrupt 0 using 0{uKeyValue++;if(uKeyValue>=3){uKeyValue=0;}}Config.H/*========================================================== 说明:硬件配置信息作者:kks创建时间:2012-09-03修改时间:2013-03-18============================================================*/#ifndef _CONFIG_H_#define _CONFIG_H_#include <reg52.h>/*******独立按键********/sbit KEYUP=P1^4; //加sbit KEYDOWN=P1^5; //减sbit KEYWRITE=P1^6; //写入/*******蜂鸣器********/sbit BEEP=P3^6;/*******继电器********/sbit RELAY=P3^7;/*******DS18B20信号线********/sbit QS=P3^3;#endifType.h/*========================================================== 说明:数据类型定义作者:kks创建时间:2012-09-03修改时间:2013-03-18============================================================*/#ifndef __TYPE_H__#define __TYPE_H__/*================================================整型数据类型================================================*/typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;typedef char int8;typedef int int16;typedef long int32;typedef unsigned char WPARAM;typedef unsigned char LPARAM;/*================================================枚举数据类型================================================*/typedef enum{FALSE,TRUE}BOOL;#endifDS18b20.h#ifndef _DS18B20_H_#define _DS18B20_H_#ifndef _DS18B20_C_#define _EXTERN#endif/*===================全局定义===============================*//*===================全局变量===============================*/ #ifdef _EXTERNextern uint8 uTemHigh; //温度上限extern uint8 uTemLow; //温度下限extern uint8 uTHigh;extern uint8 uTLow;extern uint8 sign; //符号位#undef _EXTERN#endif/*===================全局函数===============================*/ bit Reset18b20(void);uint8 Rbyte18b20(void);void Wbyte18b20(uint8 dat);uint16 ReadTem(void);void CopyToEEPROM(void);void GetFromEEPROM(void);#endifDS18B20.c/*========================================================== 说明:DS18B20驱动程序作者:kks创建时间:2012-03-19优化时间:2013-03-20============================================================*/#define _DS18B20_C_#include <intrins.h>#include "config.h"#include "type.h"#include "DS18B20.h"uint8 uTemHigh=0; //温度上限uint8 uTemLow=0; //温度下限uint8 uTHigh=0; //温度上限临时存储uint8 uTLow=0; //温度下限临时存储uint8 sign=0xff; //用来判断暂存器的高5位是否为负float f_temp=0; //定义浮点型的温度数据/************************************************************* *函数名:Delay15us*输入:uint16 t*输出:无*功能:单位为15us延时函数,延时时间=15(1+t)us**************************************************************/ void Delay15us(uint16 t){uint16 i;for(i=t;i>0;i--){_nop_(); _nop_(); _nop_(); _nop_();}_nop_(); _nop_();}/************************************************************* *函数名:Reset18b20*输入:无*输出:1-复位成功,0-复位失败*功能:复位DS18b20,检测DS18b20工作是否正常**************************************************************/ bit Reset18b20(void){bit rest=1;QS=1; //QS复位Delay15us(1); //延时30usQS=0; //拉低总线Delay15us(32); //延时495usQS=1; //释放总线Delay15us(4); //延时15-60us,rest=QS; //记录DS返回的状态Delay15us(15); //延时240us后,释放总线QS=1;return (~rest); //返回复位结果}/************************************************************* *函数名:Wbyte18b20*输入:dat-待写字节数据*输出:无*功能:DS18b20写一字节数据**************************************************************/ void Wbyte18b20(uint8 dat){uint8 i;for(i=8;i>0;i--){QS=0; //拉低总线,产生写时序_nop_(); _nop_(); //至少延时1usQS=dat&0x01; //从最低位写起Delay15us(3); //延时60usQS=1; //释放总线dat>>=1; //数据右移一位,准备写下一位}}/************************************************************* *函数名:Rbyte18b20*输入:无*输出:dat-读出数据*功能:DS18b20读一字节数据**************************************************************/ uint8 Rbyte18b20(void){uint8 i,dat=0;for(i=8;i>0;i--){dat>>=1;QS=0; //产生读时序_nop_(); _nop_(); //至少延时1usQS=1; //释放总线_nop_(); _nop_();_nop_(); _nop_(); //延时4us后读数据if(QS)dat |=0x80;Delay15us(3); //延时60us}return dat;}/**************************************************************函数名:ReadTem*输入:无*输出:temp-读出温度*功能:读取温度**************************************************************/uint16 ReadTem(void){uint8 TL=0,TH=0;uint16 temp=0; //温度数据/*======开始转换=====*/if(Reset18b20()) //总线复位{Wbyte18b20(0xcc);//写跳过读ROM指令Wbyte18b20(0x44); //写温度转换指令Delay15us(15); //稍作延时}/*======读取温度=====*/if(Reset18b20()) //总线复位{Wbyte18b20(0xcc);//写跳过读ROM指令Wbyte18b20(0xbe); //读暂存器,读内部RAM中9字节的温度数据TL=Rbyte18b20(); //读低8位TH=Rbyte18b20(); //读高8位uTemHigh=Rbyte18b20();//读温度上限uTemLow=Rbyte18b20();//读温度下限Reset18b20(); //复位,终止读temp=TH;temp<<=8; //左移八位temp=temp|TL; //两个字节组成一个字if(TH>0x07) //符号位为负{sign=20; //符号位显示为'-'temp=~temp+1;//取temp的补码}else{sign=21; //符号位不显示temp=temp;}f_temp=temp*0.0625; //温度在寄存器中为12位,分辨率为0.0625temp=f_temp*10+0.5; //乘10是取一位小数,加0.5是四舍五入return (temp); //temp是整型}elsereturn 0;}/**************************************************************函数名:CopyToEEPROM*输入:无*输出:无*功能:将温度上下限写入E2PROM**************************************************************/ void CopyToEEPROM(void){if(Reset18b20()){Wbyte18b20(0xcc);Delay15us(1);Wbyte18b20(0x4e); //写暂存器Delay15us(1);Wbyte18b20(uTHigh); //写上限Wbyte18b20(uTLow); //写下限}if(Reset18b20()){Wbyte18b20(0xcc);Delay15us(1);Wbyte18b20(0x48); //复制暂存器}}/**************************************************************函数名:GetFromEEPROM*输入:无*输出:无*功能:从EEPROM中得到TH,TL的值**************************************************************/ void GetFromEEPROM(void){if(Reset18b20()){Wbyte18b20(0xcc);Delay15us(1);Wbyte18b20(0xb8);Delay15us(15);}}。
基于51单片机的温控系统设计
基于51单片机的温控系统设计1.引言1.1 概述概述部分的内容可以包括以下几个方面:温控系统是一种广泛应用于各个领域的实时温度控制系统。
随着科技的发展和人们对生活质量的要求提高,温控系统在工业、家居、医疗、农业等领域得到了广泛应用。
温度作为一个重要的物理量,对于许多过程和设备的稳定运行至关重要。
因此,设计一种高效可靠的温控系统对于提高工作效率和产品质量具有重要意义。
本文将基于51单片机设计一个温控系统,通过对系统的整体结构和工作原理的介绍,可以深入了解温控系统在实际应用中的工作机制。
以及本文重点研究的51单片机在温控系统中的应用。
首先,本文将介绍温控系统的原理。
温控系统的核心是温度传感器、控制器和执行器三部分组成。
温度传感器用于实时检测环境温度,通过控制器对温度数据进行处理,并通过执行器对环境温度进行调节。
本文将详细介绍这三个组成部分的工作原理及其在温控系统中的作用。
其次,本文将重点介绍51单片机在温控系统中的应用。
51单片机作为一种经典的微控制器,具有体积小、功耗低、性能稳定等优点,广泛应用于各种嵌入式应用中。
本文将分析51单片机的特点,并介绍其在温控系统中的具体应用,包括温度传感器的数据采集、控制器的数据处理以及执行器的控制等方面。
最后,本文将对设计的可行性进行分析,并总结本文的研究结果。
通过对温控系统的设计和实现,将验证51单片机在温控系统中的应用效果,并对未来的研究方向和发展趋势进行展望。
通过本文的研究,可以为温控系统的设计与应用提供一定的参考和指导,同时也为利用51单片机进行嵌入式系统设计的工程师和研究人员提供一定的技术支持。
1.2文章结构文章结构部分的内容可以包含以下内容:文章结构部分旨在介绍整篇文章的组织结构和各个部分的内容。
本篇文章基于51单片机的温控系统设计,总共分为引言、正文和结论三部分。
引言部分主要包括概述、文章结构和目的三个小节。
首先,概述部分介绍了本文的主题,即基于51单片机的温控系统设计。
基于51系列单片机的温度控制系统设计要点
目录摘要 (3)一、课程设计任务 (2)二、基于51系列单片机的温度控制系统设计 (2)2.1 方案设计 (2)2.1.1 方案选择 (2)方案一:热电偶采集温度 (2)方案二:数字温度传感器DS18B20采集温度 (2)2.1.2 方案论证 (2)2.2 基本芯片及PID算法简介 (3)2.2.1单片机STC89C52 (3)2.2.2 DS18B20基本工作原理 (3)2.2.3 PID算法 (4)三、系统硬件设计 (6)3.1 数码管显示模块 (6)3.2 键盘输入模块 (7)3.3 温度采集模块 (7)3.4 报警模块 (8)四、系统软件设计 (9)4.1 主程序流程图 (9)4.2 温度检测子程序 (9)4.3 PID计算子程序 (10)4.4 PWM子程序 (13)五、系统功能设计与实现 (13)5.1 测试系统特性及其传递函数 (13)5.2 实际温度显示功能的实现 (14)5.2.1 Proteus仿真图 (14)5.2.2 实物图 (15)5.3 控制温度的设定功能的实现 (16)5.3.1 Proteus仿真图 (16)5.3.2 实物图 (16)5.3.3 系统调试 (17)六、总结 (18)基于51系列单片机的温度控制系统摘要:温度是工业控制中主要的被控参数之一,对典型的温度控制系统进行研究具有很广泛的意义。
根据不同场所、不同温度范围、精度等要求,所采用的测温元件、测温方法以及对温度的控制方法也不同。
本文以实验室提供的SET-300型温度测量控制仪为被控对象,以STC89C52单片机为控制核心,采用温度传感器DS18B20作为检测变送器,通过键盘向单片机输入设置温度,单片机将温度偏差进行PID运算后,输出PWM波。
PWM波作为执行机构的输入从而来决定温度控制仪工作电压的大小,最终实现温度的智能控制,整个系统的电路结构简单,可靠性能高。
经实验测试,该系统无震荡现象,响应时间较短,稳态误差较小,达到超调量小于等于5%,调节时间小于等于30s的指标要求。
51温控系统说明书
基于单片机的简单温控系统机控学院 自动化12-2 潘星光 3120619213实现功能:利用单片机89C52和热电偶进行测量发热电阻的温度,利用 LCD1602进行显示的温度和人工可设置温度的上限与下限值,即有两个按键是 来控制上限值的大小,而另两个按键则是控制下限值的大小的。
发热电阻从系统 上电后就立即通电发热,设置好所需要温度范围,则测量温度显示的数值会随发 热电阻通电时间的增大而增大,当测量的温度超出所设定的上限值时, 就会驱动 蜂鸣器报警,发热电阻停止通电,同时也会驱动马达扇风来降温; 而当测量温度 低于所设定的下限值时,也会进行报警,但电机不会被启动和发热电阻也继续通 电发热。
当然当测量温度在上限值和下限值之间时, 是不会进行报警和驱动马达 的,但发热电阻仍处于通电状态中。
电路原理图:C1Z 3EX-X EHcrl dE总fill I w I ?LCD1KQDS1&E2:1KQ NO 昌口 口 A主程序:#in clude<reg52.h> dat=ds; _nop_();#i nclude<1602.h> TempDelay(12); }#i ncludevi ntri ns.h> return dat; dat>>=1;sbit ds = P2A2; } }sbit beep =卩2八3; uchar ds_read_byte() }sbit rd = P3A7; { 一一sbit k = P1A0;uchar i,j,value; void ds_cha nge()bit flag; for(i=0;i<8;i++) {uchar ds_rom[8]; { ds_reset();uchar H,L,Key_value; j=ds_read_bit(); ds_write_byte(0xcc); void TempDelay(uchar ds_write_byte(0x44) us) value=(j<<7)|(value>J{ >1); }while(us--); 〃6.51us } uchar get_temperature() } retur n value; {void ds_reset() } uint temp;{ _ void ds_write_byte(uchar uchar a,b,c;ds=1; dat) ds_reset();_nop_(); { ds_write_byte(0xcc);ds=0; uchar i,o nebit; ds_write_byte(0xbe);TempDelay(80);//52 for(i=0;i<8;i++) a=ds_read_byte();0us { b=ds_read_byte();ds=1; temp=b;TempDelay(5); on ebit=dat&0x01; temp<<=8;if(ds==0) if(on ebit) temp|=a;flag=1; //写1 c = temp*0.0625;else { return c;flag=0; ds=0; }TempDelay(20);ds=1; TempDelay(l); void key()} ds=1; {bit ds_read_bit() _nop_(); Key_value = P3; { 一一} Key_value = bit dat; else //写 0 Key_value & 0x0f;ds=0; { if ( Key_value !=_nop_(); ds=0; 0x0f )_nop_(); {ds=1; TempDelay(11); dela y(5);_nop_(); ds=1; if(Key_value != OxOf )_ {switch(Key_value) { _case OxOe: H++; break;case0x0d: H--; break;case0x0b: L++; break;case0x07: L--; break;}}}}void mai n(){uchar i;rd = 0;in it_1602();write_com( 0x80 + 0 + 3);write_data( 'H');write_com( 0x80 + 0 + 8);-write_data( 'L');lcd_dis( 0,5,ucharto s tr( H ));lcd_dis( 0,10,ucharto str( L ));if ( i>=H){beep = 0; k= 0;}else if(i<=L) {beep = 0; k =1;} else{beep =1; k =1;}key();}}lcd_distostr(1,1,0);H = 35;L = 25;k = 1;while(1){ds_cha nge();i =get_temperature();lcd_dis( 1,14,ucharto str( i ));头文件1602.h程序:#define uchar unsigned char#defi ne uint un sig ned int sbit wela = P2A7;sbit dula =卩2八6;sbit LCDEN =卩3八4; sbit rs = P3A5;sbit rw = P3A6;uchar datstr[] = "Temperature:";uchar str[4];//uchartostr 函数转换的字符串同时可以把16进制转成10进制void delay( uint z) 〃延时函数{uint x,y;for(x=z;x>0;x__)for(y=120;y>0;y--);}void write_com(uchar com) //写命令{P0=com;rs=0;LCDEN=0; delay(10);LCDEN=1; delay(10);LCDEN=0;}void write_data(uchar date) //写数据{P0=date;rs=1;LCDEN=0; delay(10);LCDEN=1;delay(10); LCDEN=0;}void in it_1602(){rw=0;dula=0;wela=0;write_com(0x38);//显示模式设置:16 x 2 显示,5X 7点阵,8位数据接口delay(20);write_com(0x0c);//显示模式设置delay(20);write_com(0x06);〃显示模式设置:光标右移,字符不移delay(20);write_com(0x01);//清屏幕指令,将以前的显示内容清除delay(20);}uchar *uchartostr(ucharnum) //将一个字节的数据转换为字符串或10进制{uchar x2,x1,x0,i;x2=num/100; x仁num%100/10;x0=num%100%10;i=0;if(x2!=0){str[i]=x2+48; i++;} if(x1!=0){str[i]=x1+48; i++;} str[i]=x0+48;i++; str[i]='\0'; returnstr;}void lcd_dis(ucharX,uchar Y,uchar *dis) // 显示数据数组{uchar pos; switch(X){case 0:X=0x00;break;case 1:X=0x40;break;break;default:break;}pos =0x80+X+Y;write_com(pos);//显示地址while(*dis!='\0'){ write_data(*dis++);}}void lcd_distostr(ucharX,uchar Y,uchar dis)// 显示字符串数组{uchar pos,i;i=dis; //设定从数组中的第几个字符串开始显示switch(X){case O:X=OxOO; break;case 1:X=0x40; break; break; defaultbreak;}pos =0x80+X+Y; write_com(pos);//显示地址while(datstr[i] !='\0') {write_data(datstr[i]);i++;主要问题:在只使用一个电源供电时,马达启动的瞬间,单片机会掉电重启以致使系统不能稳定工作下去。
基于51单片机的空调温度控制设计说明
基于MCS-51单片机的空调智能温控器的设计与开发摘要本控制电路是以8051单片机为控制核心。
整个系统硬件部分包括温度采样电路,自激式A/D转换器,按键电路,驱动电路,时序电路,和8段译码器,LED数码显示器。
在配合用汇编语言编制的程序使软件实现,实现空调温度智能转换的基本功能。
本控制电路成本低廉,功能实用,操作简便,有一定的实用价值。
本文从3个方面展开论述,首先是硬件电路的描述;接着软件部分的设计;最后实现功能。
关键词8051单片机温度控制 LED数码显示一系统总体设计方案1.1 课题背景电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么单片机技术的出现则是给现代工业控制测控领域带来了一次新的革命。
目前,单片机在工业控制系统诸多领域得到了极为广泛的应用。
特别是其中的C51系列的单片机的出现,具有更好的稳定性,更快和更准确的运算精度,推动了工业生产,影响着人们的工作和学习。
在现代社会中,温度控制不仅应用在工厂生产方面,其作用也体现到了各个方面,随着人们生活质量的提高,酒店厂房与家庭生活中都会见到温度控制的影子,温度控制将更好的服务于社会.而今,空调等家用电器随着生产技术的发展和生活水平的提高越来越普与,一个简单,稳定的温度控制系统能更好的适应市场。
而本次设计就是要通过以MCS-51系列单片机为控制核心,实现空调机温度控制器的设计。
方案一通过温度传感器对空气进行温度采集,将采集到的温度信号传输给单片机,再由. . . .单片机控制显示器,并比较采集温度与设定温度是否一致,然后驱动空调机的加热或降温循环对空气进行处理,从而模拟实现空调温度控制单元的工作情况。
空调温控器主要单片机,时序电路,温度采样电路,A/D转换电路,温度显示电路,温度输入电路,驱动电路等组成。
系统原理图见图1所示:图1 空调机温度控制系统框图方案二DS18B20单线连接方案,方案二采用单线连接,就是四块DS18B20连到单片机的一个IO口上,这种方案只用到单片机的一个IO口,大大的节约了单片机的IO口资源。
基于51单片机的温度控制系统设计方案
基于51单片机的温度控制系统设计方案文章标题:基于51单片机的温度控制系统设计方案引言:温度控制系统在许多领域中都发挥着重要作用,如工业生产、农业温室、医疗设备等。
本文将介绍基于51单片机的温度控制系统的设计方案,通过深入探讨关键技术和原理,以及提供总结和回顾性内容,一步一步帮助读者理解并实现该系统。
关键词:温度控制系统、51单片机、设计方案一、系统概述温度控制系统是通过测量环境温度并根据设定值进行控制,以维持恒定的温度。
基于51单片机的设计方案可以实现精确、可靠的温度控制,因其成本低、易于操作、广泛可用而备受青睐。
二、硬件设计1. 传感器选择:温度传感器是温度控制系统中的核心组件,应选用精度高、响应快的传感器。
常见的温度传感器有热电偶、热敏电阻和半导体传感器等,根据需求选择适合的传感器。
2. 信号采集:51单片机的ADC模块可以将模拟信号转换为数字信号,实现温度的精确采集。
通过将传感器和51单片机连接,读取传感器输出的模拟电压,并进行AD转换,得到相应的温度值。
3. 控制器选择:在51单片机设计中,可选择使用PID控制器实现温度的精确控制。
PID控制器通过比较实际温度与设定温度的差异,对控制信号进行调整,使得实际温度逐渐趋近于设定温度。
三、软件设计1. 传感器驱动:根据所选传感器的型号和接口,编写相应的传感器驱动程序,实现数据的读取和处理。
驱动程序应具有良好的稳定性和兼容性,以确保准确的温度测量。
2. 控制算法:PID控制算法是温度控制系统中常用的算法。
该算法根据控制目标和误差值,计算出控制信号,并将其应用于温度调节装置,实现温度的精确控制。
在编写PID控制算法时,应考虑参数调节、稳定性和动态响应等因素。
3. 界面设计:通过LCD显示模块和按键板,可以实现温度的实时显示和设定参数的调整。
界面设计应简洁明了,方便用户操作和监控系统状态。
四、系统优化1. 参数调节:对PID控制器的参数进行适当调节,可以优化系统的控制效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的温度控制系统设计1.设计要求要求设计一个温度测量系统,在超过限制值的时候能进行声光报警。
具体设计要求如下:①数码管或液晶显示屏显示室内当前的温度;②在不超过最高温度的情况下,能够通过按键设置想要的温度并显示;设有四个按键,分别是设置键、加1键、减1键和启动/复位键;③DS18B20温度采集;④超过设置值的±5℃时发出超限报警,采用声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。
2.方案论证根据设计要求,本次设计是基于单片机的课程设计,由于实现功能比较简单,我们学习中接触到的51系列单片机完全可以实现上述功能,因此可以选用AT89C51单片机。
温度采集直接可以用设计要求中所要求的DS18B20。
报警和指示模块中,可以选用3种不同颜色的LED灯作为指示灯,报警鸣笛采用蜂鸣器。
显示模块有两种方案可供选择。
方案一:使用LED数码管显示采集温度和设定温度;方案二:使用LCD液晶显示屏来显示采集温度和设定温度。
LED数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。
LCD显示屏可识别性较好,背光亮度可调,而且比LED 数码管显示更多字符,但是编程要求比LED数码管要高。
综合考虑之后,我选用了LCD显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒值设定时同样可以采集并显示当前温度,可以直观的看到实际温度与警戒温度的对比。
LCD 显示模块可以选用RT1602C。
3.硬件设计根据设计要求,硬件系统主要包含6个部分,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD 显示模块、报警与指示模块。
其相互联系如下图1所示:图1 硬件电路设计框图3.1单片机时钟电路形成单片机时钟信号的方式有内部时钟方式和外部时钟方式。
本次设计采用内部时钟方式,如图2所示。
单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为此放大器的输入端和输出端,其频率范围为1.2~12MHz ,经由片外晶体振荡器或陶瓷振荡器与两个匹配电容一起形成了一个自激振荡电路,为单片机提供时钟源。
3.2复位电路复位是单片机的初始化操作,其作用是使CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作,以防止电源系统不稳定造成CPU 工作不正常。
在系统中,有时会出现工作不正常的情况,为了从异常状态中恢复,同时单片机时钟电路复位电路键盘接口模块温度采集模块单 片 机LCD 显示模块报警与指示模块图2 单片机内部时钟方式电路图3 单片机按键复位电路也为了系统调试方便,需要设计一个复位电路。
单片机的复位电路有上电复位和按键复位两种形式,因为本次设计要求需要有启动/复位键,因此本次设计采用按键复位,如图3。
复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。
3.3键盘接口模块本次设计需要的按键有4个,除去一个复位按键外,还有3个功能按键,因此选择独立式键盘。
如图4,将键盘直接与单片机P1口的P1.0、P1.1、P1.2相连。
3个键设计思路如下:当按下S1键时,系统进入上下限警戒值调整状态;当第一次按下S1键时,进行上限图4 键盘接口模块警戒值设定,当第二次按下S1键时,进行下限警戒值设定,当第三次按下S1键时,回到正常工作状态。
在警戒值调整状态下,按下S2键,上下限警戒值加1,按下S3键,上下限警戒值减1,正常工作状态下,按下S2和S3键无作用。
3.4温度采集模块本次设计中的温度传感器使用的是DALLAS公司的单总线数字温度传感器DS18B20,这是一种常用的温度传感器,具有体积小、硬件开销低、抗干扰能力强、精度高的特点。
DS18B20采用独特的一线接口,具有只需要一条口线通信多点的能力,简化了分布式温度传感应用,无需外部元件。
可用数据总线供电,电压范围为3.0 V 至 5.5V,测量温度的范围为-55℃至+125 ℃,在-10℃至+85℃范围内精度为±0.5℃。
温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制、工业系统、消费电子产品温度计、或任何热敏感系统。
由于DS18B20是一条口线通信,所以中央微处理器与DS18B20只有一个一条口线连接。
因为每一个DS18B20的包含一个独特的序号,多个DS18B20可以同时存在于一条总线,这使得温度传感器放置在许多不同的地方。
它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。
图5 DS18B20封装及引脚DS18B20的核心功能是它的直接读数字的温度传感器。
温度传感器的精度为用户可编程的9、10、11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。
在上电状态下默认的精度为12位。
DS18B20启动后保持低功耗等待状态;当需要执行温度测量和AD转换时,总线控制器必须发出[44h]命令。
在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。
当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序”,DS18B20正在温度转换中返回0,转换结束返回1。
如果DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值。
在硬件上,DS18B20与单片机的连接有两种方法:一种是VDD接外部电源,GND接地,DQ与单片机的I/O口相连;另一种是用寄生电源供电,此时,VDD、GND接地,DQ接单片机的I/O口。
无论是接外部电源还是用内部寄生电源,I/O口线要接5kΩ左右的上拉电阻。
本次设计中,采用外部电源方式,其连接方式如图6所示。
单总线DQ端接单片机的P1.7口,DQ端接一个4.7kΩ的上拉电阻,这样单总线DQ在闲置状态时为高电平。
图6 DS18B20外部电源连接方式3.5 LCD 显示模块在本次设计中,使用RT1602C 字符型液晶显示模块(LCM)来设计当前温度和上下限警戒值的显示电路。
RT1602C 字符型液晶显示模块是16字×2行的采用5×7点阵图形来显示字符的液晶显示器,采用标准的16脚接口,其引脚定义如图7所示。
引脚号 引脚名 说 明 引脚号 引脚名 说 明1 GND/V ss 电源地 7 D0 8位双向数据线2 V dd +5V 电源 8 D13 V L 液晶显示偏压信号 9 D24 RS 数据/命令控制,H/L 10 D35 R/W 读/写控制,H/L11 D4 6 E 使能端 12 D5 15 BLA 背光源正极 13 D6 16BLK背光源负极14D7图7 RT1602C 的引脚定义RT1602C 的内部结构可以分为3个部分:LCD 控制器、LCD 驱动器、LCD 显示器,其中LCD 控制器采用的是HD44780。
RT1602C 与单片机的连线如图8所示。
图8 RT1602C 与单片机连线LCM的数据总线与单片机的P0口通过一个上拉电阻排相连,LCM的三条控制线RS、RW、EN分别与单片机的I/O口P2.0、P2.1、P2.2相连,第1、2引脚分别与地、电源相连,第3引脚使用一个10kΩ的可调电阻对显示屏的明亮进行调整。
3.6报警与指示模块在本次设计中,采用LED发光二极管作为系统指示灯,采用蜂鸣器作为报警鸣笛。
当温度高于上限警戒值时,点亮红色发光二极管,蜂鸣器发出响声;当温度低于下限警戒值时,点亮黄色发光二极管,蜂鸣器发出响声;温度在正常范围内时,图9 报警与指示模块点亮黄色发光二极管。
整个报警与指示电路如图9所示,其中绿、红、黄色指示灯分别接单片机P2.0、P2.1、P2.2口,电平拉低时点亮LED,蜂鸣器电路接单片机的P2.7口,电平拉高时蜂鸣器响。
至此便完成了整个硬件电路的设计工作,整个系统的原理图见附录二,系统I/O分配表如下:I/O口功能说明I/O口功能说明P0.0~P0.7 LCM数据口P2.1 LCM读/写控制P1.0~P1.3 键盘输入P2.2 LCM使能P1.7 DS18B20温度采集P2.4~P2.6 LED信号输出P2.0 LCM数据/命令控制P2.7 报警信号输出4.软件设计单片机应用系统的设计中,软件设计占有重要的位置。
在本次设计中,根据功能要求,可以把系统程序划分为5个模块,即主程序模块、显示模块、温度测量模块、键盘扫描模块、其它子程序模块,如图10所示。
图10 软件设计框图4.1主程序设计主程序的内容包括单片机初始化、相关部件初始化和一些其它子程序的调用等。
主程序清单如下,程序流程图如图11所示。
/************主程序************/ void main(void) { P1=0xff; //初始化P1P2|=0x70; P2&=0x7f;Temp_set1=90; //上限报警温度初值 Temp_set2=10; //下限报警温度初值 Delay(500); //延时500ms 启动 init_LCD(); //LCD 初始化 init_18B20(); //DS18B20初始化 Display_str(0,0,str2); //开机界面 Display_str(0,1,str2); //开机界面Delay(2000);图11 主程序流程图Display_str(0,0,str0); Display_str(0,1,str1); while(1) { Key_scan(); //扫描键盘 Read_temp(); //读取温度 Change();Display(); //显示Alarm(); //指示灯与报警程序 Delay(1000);}}4.2显示模块显示程序主要完成的功能是模式、上下限警戒值和测量温度值的显示,模块中包含LCD 初始化、显示单个字符子函数、显示一个字符串子函数。
程序流程图如图12所示,LCD 初始化程序如下,其它子函数程序详见附录一。
/************LCD 初始化************/ void init_LCD(void) { P0=0; Delay(15);LCD_Command(0x38,0); Delay(5);LCD_Command(0x38,0); Delay(5);LCD_Command(0x38,0); Delay(5);LCD_Command(0x38,1); //8位数据传送,2行显示,5*7字形LCD_Command(0x08,1); //关闭显示图12 显示程序流程图LCD_Command(0x01,1); //清屏LCD_Command(0x06,1); //显示光标右移设置LCD_Command(0x0c,1); //显示屏打开,光标不显示不闪烁}4.3温度测量模块温度测量程序主要功能是读出数字温度传感器的温度值。