单片机温度检测记录系统
- 格式:doc
- 大小:942.50 KB
- 文档页数:26
单片机课程设计报告基于MEGA16单片机温度检测系统-------张坤张磊黄大明(作品图)一,系统设计目的,用途,功能1,目的。
通过基于MEGA16芯片和DS18B20温度传感器控制温度,熟悉芯片的使用,温度传感器的功能,实验电路板的焊接,数码显示管的使用,汇编语言的设计。
锻炼团队合作能力,动手设计能力以及发现问题并且解决问题的能力。
2,用途。
温度是工业控制中主要的被控参数之一。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的使用。
单片机具有处理能强、运行速度快、功耗低等优点,使用在温度测量和控制方面,控制简单方便,测量范围广,精度较高。
本文设计了一种基于MEGA16单片机的温度测量和控制装置,能对环境温度进行测量,在温度过高时,蜂鸣器发出蜂鸣声,有利于保障工业控制中的安全性。
并且能根据温度给定值给出调节量,控制执行机构,实现调节环境温度的目的。
3,功能.DS18b20温度传感器温度的精确度高达0.1度,在许多工业控制中已经足够。
可以满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
从用途上讲,该单片机类似于温度计,但用途又不仅仅集限于温度计,由于蜂鸣器的使用,编写程序后,超过预设温度后,蜂鸣器发出蜂鸣声,为工业控制的安全保驾护航。
二,硬件设计思想和电路原理图下图为温度传感器驱动电路图104电容硬件连接图如上.三,详细说明如何使用硬件单元1,七段数码管型号是LG5641AH(共阴极)的使用。
该显示管总共有12 个引脚,包括a-g和dp以及四个位选g1-g4。
将a-f分别和ATmega芯片的PB1-PB6连接,g1-g4分别和PD0-PD3连接。
2,蜂鸣器的连接。
蜂鸣器的两个引脚分别和ATmega芯片的PC2,PC1连接,其中,前者接负极,后者接正极。
3,DS18B20温度传感器的连接。
基于单片机的智能体温检测系统设计摘要:由于新冠疫情的爆发给大众的生活带来了巨大变化,为了满足疫情条件下对温度快速测量的需求,采用无接触式测温既有效规避病毒传染风险,又可以第一时间检测疑似病例。
在此基础上添加口罩识别功能极大减轻了工作人员人工识别的负担,为防疫工作提供保障。
目前市场现有系统存在价格高以及不易携带的问题,并且目前市场应用的大部分装置都是单独的口罩识别或是无接触测温系统。
与之相比该系统将两种功能结合在同一系统中,具有体积小、便携、易操作等优点,为操作人员提供了极大便利。
此装置适用于学校、工厂、商场等人流密集场所,可以为进出人员提供检测服务。
人机交互式装置在疫情防控中发挥重要作用,节省人力物力,并且其效率远高于人工检测。
关键词:单片机;智能体温;检测系统;设计引言患新冠肺炎的主要症状是发热,因此体温检测是疫情防控的第一道防线。
以当今人流密集场所疫情防控情况为背景,设计并实现了一款基于STM32单片机的非接触式体温测量与身份识别系统。
该系统利用OPENMV对目标人脸进行快速检测,精准识别目标身份信息和口罩佩戴情况,利用MLX90614准确测量目标体表温度,实时将测量信息通过显示屏直观地展示并通过蓝牙发送到手机App上,实现系统逻辑结构的完整性与任务完成的效率最优解。
1系统的组成及其工作原理1.1系统的组成以单片机作为系统控制基础,利用传感器测量温度,通过通信和控制技术,形成温度测量控制系统。
具体可分为基于MLX90614红外测温传感器的温度检测模块、LCD12864液晶屏显示模块、4X4矩阵键盘模块、电源模块、复位模块、晶振模块、报警模块、继电器控制模块和震动传感器模块。
1.2系统工作原理该系统基于STC12C5A60S2单片机进行设计,包括电源电路、复位电路、晶振电路、红外测温传感器、震动传感器、LCD显示电路、蜂鸣器报警电路、键盘输入电路和继电器控制电路,通过MLX90614红外温度传感器实现温度数据的处理。
基于单片机的室内温湿度检测系统的设计
一、系统简介
本系统基于单片机,能够实时检测室内的温度和湿度,显示在
液晶屏幕上,并可通过串口输出到PC端进行进一步数据处理和存储。
该系统适用于家庭、办公室和实验室等场所的温湿度检测。
二、硬件设计
系统采用了DHT11数字温湿度传感器来实时检测室内温度和湿度,采用STC89C52单片机作为控制器,通过LCD1602液晶屏幕显示
温湿度信息,并通过串口与PC进行数据通信。
三、软件设计
1、采集数据
系统通过DHT11数字温湿度传感器采集室内的温度和湿度数据,通过单片机IO口与DHT11传感器进行通信。
采集到的数据通过计算
得到实际温湿度值,并通过串口发送给PC端进行进一步处理。
2、显示数据
系统将采集到的室内温湿度数据通过LCD1602液晶屏幕进行显示,可以实时观察室内温湿度值。
3、通信数据
系统可以通过串口与PC进行数据通信,将数据发送到PC端进
行存储和进一步数据处理。
四、系统优化
为了提高系统的稳定性和精度,需要进行优化,包括以下几点:
1、添加温湿度校准功能,校准传感器的测量误差。
2、添加系统自检功能,确保系统正常工作。
3、系统可以添加温湿度报警功能,当温湿度超过设定阈值时,系统会自动发送报警信息给PC端。
以上是基于单片机的室内温湿度检测系统的设计。
单片机C语言课题设计报告设计题目:温度检测电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来1摘要本课题以51单片机为核心实现智能化温度测量。
利用18B20温度传感器获取温度信号,将需要测量的温度信号自动转化为数字信号,利用单总线和单片机交换数据,最终单片机将信号转换成LCD 可以识别的信息显示输出。
基于STC90C516RD+STC90C516RD+的单片机的智能温度检测系统,的单片机的智能温度检测系统,设计采用18B20温度传感器,其分辨率可编程设计。
本课题设计应用于温度变化缓慢的空间,综合考虑,以降低灵敏度来提高显示精度。
设计使用12位分辨率,因其最高4位代表温度极性,故实际使用为11位半,位半,而温度测量范围为而温度测量范围为而温度测量范围为-55-55-55℃~℃~℃~+125+125+125℃,℃,则其分辨力为0.06250.0625℃。
℃。
设计使用LCD1602显示器,可显示16*2个英文字符,显示器显示实时温度和过温警告信息,和过温警告信息,传感器异常信息设。
传感器异常信息设。
传感器异常信息设。
计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,计使用蜂鸣器做警报发生器,当温度超过当温度超过设定值时播放《卡农》,当传感器异常时播放嘟嘟音。
单片机C 语言课题设计报告语言课题设计报告电动世界,气定乾坤2目录一、设计功能一、设计功能................................. ................................. 3 二、系统设计二、系统设计................................. .................................3 三、器件选择三、器件选择................................. .................................3 3.1温度信号采集模块 (3)3.1.1 DS18B20 3.1.1 DS18B20 数字式温度传感器数字式温度传感器..................... 4 3.1.2 DS18B20特性 .................................. 4 3.1.3 DS18B20结构 .................................. 5 3.1.4 DS18B20测温原理 .............................. 6 3.1.5 DS18B20的读写功能 ............................ 6 3.2 3.2 液晶显示器液晶显示器1602LCD................................. 9 3.2.1引脚功能说明 ................................. 10 3.2.2 1602LCD 的指令说明及时序 ..................... 10 3.2.3 1602LCD 的一般初始化过程 (10)四、软件设计四、软件设计................................ ................................11 4.1 1602LCD 程序设计流程图 ........................... 11 4.2 DS18B20程序设计流程图 ............................ 12 4.3 4.3 主程序设计流程图主程序设计流程图................................. 13 五、设计总结五、设计总结................................. ................................. 2 六、参考文献六、参考文献................................. ................................. 2 七、硬件原理图及仿真七、硬件原理图及仿真......................... .........................3 7.1系统硬件原理图 ..................................... 3 7.2开机滚动显示界面 ................................... 4 7.3临界温度设置界面 ................................... 4 7.4传感器异常警告界面 (4)电气系2011级通信技术一班级通信技术一班通才达识,信手拈来通才达识,信手拈来3温度温度DS18B20 LCD 显示显示过温函数功能模块能模块传感器异常函数功能模块数功能模块D0D1D2D3D4D5D6D7XT XTAL2AL218XT XTAL1AL119ALE 30EA31PSEN29RST 9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C51X1CRYST CRYSTAL ALC122pFC222pFGNDR110kC31uFVCCGND234567891RP1RESPACK-8VCC0.0DQ 2VCC 3GND 1U2DS18B20R24.7K LCD1LM016LLS2SOUNDERMUC八、程序清单八、程序清单................................. .................................5 一、设计功能·由单片机、温度传感器以及液晶显示器等构成高精度温度监测系统。
基于单片机的温湿度检测系统的设计一、引言温湿度是常见的环境参数,对于很多应用而言,如农业、生物、仓储等,温湿度的监测非常重要。
因此,设计并实现一个基于单片机的温湿度检测系统是非常有实际意义的。
本文将介绍该温湿度检测系统的设计方案,并详细阐述其硬件和软件实现。
二、系统设计方案1.硬件设计(1)传感器选择温湿度传感器的选择非常关键,常用的温湿度传感器包括DHT11、DHT22、SHT11等。
根据不同应用场景的精度和成本要求,选择相应的传感器。
(2)单片机选择单片机是整个系统的核心,需要选择性能稳定、易于编程的单片机。
常用的单片机有51系列、AVR系列等,也可以选择ARM系列的单片机。
(3)电路设计温湿度传感器与单片机的连接电路包括供电电路和数据通信电路。
供电电路通常采用稳压电源,并根据传感器的工作电压进行相应的电压转换。
数据通信电路使用串行通信方式。
2.软件设计(1)数据采集单片机通过串行通信方式从温湿度传感器读取温湿度数据。
根据传感器的通信协议,编写相应的代码实现数据采集功能。
(2)数据处理将采集到的温湿度数据进行处理,可以进行数据滤波、校准等操作,以提高数据的准确性和可靠性。
(3)结果显示设计一个LCD显示屏接口,将处理后的温湿度数据通过串行通信方式发送到LCD显示屏上显示出来。
三、系统实现及测试1.硬件实现按照上述设计方案,进行硬件电路的实现。
连接传感器和单片机,搭建稳定的供电电路,并确保电路连接无误。
2.软件实现根据设计方案,使用相应的开发工具编写单片机的代码。
包括数据采集、数据处理和结果显示等功能的实现。
3.系统测试将温湿度检测系统放置在不同的环境条件下,观察测试结果是否与真实值相符。
同时,进行长时间的测试,以验证系统的稳定性和可靠性。
四、系统优化优化系统的稳定性和功耗,可以采用以下方法:1.优化供电电路,减小电路噪声和干扰,提高电路的稳定性。
2.优化代码,减小程序的存储空间和运行时间,降低功耗。
基于51单片机的温度检测系统程序及仿真概要
1. 系统概述
本系统采用51单片机作为控制核心,通过外接温度传感器进行温度检测,并在数码管上显示当前温度值。
同时,当温度超过设定阈值时,通过蜂鸣器进行警示。
2. 系统硬件设计
本系统采用DS18B20温度传感器作为温度检测模块,通过单总线连接到51单片机的
P2.0口,同时将P2.1口连接到蜂鸣器。
数码管采用共阳极数码管,通过P0口进行控制。
系统程序采用C语言编写,在主函数中进行如下操作:
(1) 初始化DS18B20,设置温度传感器工作模式。
(2) 读取温度传感器输出的温度值,进行温度判断。
(3) 将温度值转换为数码管显示的格式并显示在数码管上。
(4) 如果温度超过设定阈值,触发蜂鸣器进行警示。
(5) 循环执行以上操作。
4. 系统仿真
5. 总结
本系统基于51单片机实现了温度检测功能,并且能够进行数码管显示以及蜂鸣器警示,具有一定的实用价值。
本系统的设计和仿真过程对于初学者来说都是一个非常好的练手项目,也有助于掌握单片机的基本编程技能和原理知识。
基于51单片机的万年历与温度检测报警系统摘要随着社会发展需求的改变,电子万年历是一个应用非常广泛的实用日常计时工具,带有显示世纪,年,月,日,星期,时,分,秒和按键可调时间及其按键设置闹钟的功能,同时具有月末自动更新,闰年补偿功能等多种功能。
温度检测报警系统也是在日常生活和工业应用非常广泛的工具,能实时采集周围的温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不同的报警上下限。
此系统是基于STC89C52单片机设计的,包含液晶显示模块,DS12C887实时时钟模块,DS18B20温度采集模块,键盘扫描模块,报警模块,HX1838红外接收头模块。
STC89C52作为控制核心,具有功耗低,功能强等特点,电压可选5VUSB 供电。
显示模块采用12864液晶动态显示,相对数码管而言经济实用,占用空间小,对于显示数字、字母最为合适,而且与单片机连线简单,占用IO口相对较少。
实时时钟芯片DS12C887是一款与DS12C885实时时钟兼容的替代产品,该器件提供RTC/日历、定时闹钟等功能,如果检测到主电源故障,该器件可自动切换到备用电源供电,DS12C887将石英晶体与电池集成在一起,在断电后仍可精确走10年。
温度检测报警模块采用数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优点,易与单片机连接,模块电路组成简单并同时具有温度报警功能。
关键词:STC89C52,DS12C887,DS18B20,12864液晶显示,电子万年历,采集周围设备温度、温度报警一、设计要求与方案论证1.1设计要求设计一个能够实现世纪,年,月,日,星期,小时,分,秒显示附带温度检测显示的实时时钟电子万年历,同时具有时间调节和闹钟设置功能,以及时间预设报警、温度报警、报警解除等功能。
该产品共设有四个按键,每个按键具有多种功能,充分利用各个按键。
也可利用红外遥控来进行实时调节,体现时尚方便的特性,并且通过编程还可以控制12864液晶显示,随心所欲。
基于单片机的温度检测系统的设计一、引言随着科技的发展和社会的进步,温度检测在各个领域中起着至关重要的作用。
为了实现对温度变化的准确监测和控制,本文将介绍一种基于单片机的温度检测系统的设计方案。
二、系统概述本系统通过采集环境温度数据,并通过单片机进行处理和控制,实现对温度的实时监测和报警功能。
三、硬件设计3.1传感器选择在温度检测系统中,传感器是获取环境温度信息的关键部件。
本系统选择了精度高、稳定性好的数字温度传感器DS18B20作为温度采集装置。
3.2单片机选择单片机是系统的核心控制部分,负责采集传感器数据、处理数据并输出相应信号。
为了满足系统的实时性和稳定性要求,本系统选择了常用的S T M32系列单片机作为控制器。
3.3电路设计基于上述选择的传感器和单片机,我们设计了相应的电路接口和连接方式,确保传感器能够正常采集数据,并将数据传输给单片机进行处理。
四、软件设计4.1系统架构本系统采用分层架构设计,包括传感器数据采集层、数据处理层和用户界面层。
每一层都有相应的功能模块,实现温度数据的采集、处理和显示。
4.2数据采集和处理系统通过定时中断方式,周期性地读取传感器数据,并通过计算得到温度值。
采集到的数据经过滤波和校正处理后,传递给用户界面层进行显示。
4.3用户界面为了方便用户操作和监测温度变化,系统设计了简洁直观的用户界面。
用户可以通过L CD显示屏上的菜单操作,查看温度数值和设置相关参数,同时系统还具备温度报警功能。
五、系统测试与结果分析5.1硬件测试在硬件实现完毕后,进行了必要的硬件测试。
通过测量不同环境下的温度,并与实际温度进行比对,验证了系统的准确性和可靠性。
5.2软件测试系统软件的测试主要包括功能测试和性能测试。
通过模拟实际使用场景,测试了系统在不同条件下的温度检测和报警功能是否正常。
六、总结与展望本文介绍了基于单片机的温度检测系统的设计方案。
通过合理的硬件选型和软件设计,实现了对温度数据的实时监测和报警功能。
基于单片机的温湿度监测系统毕业设计一、引言在现代社会中,温湿度的监测在许多领域都具有重要意义,例如农业生产、仓储管理、工业制造以及室内环境控制等。
为了实现对温湿度的准确、实时监测,基于单片机的温湿度监测系统应运而生。
本毕业设计旨在设计并实现一种基于单片机的温湿度监测系统,以满足实际应用中的需求。
二、系统总体设计方案(一)系统功能需求分析本系统需要实现对环境温湿度的实时采集、数据处理、显示以及超限报警等功能。
能够在不同的环境中稳定工作,并具有较高的测量精度和可靠性。
(二)系统总体结构设计系统主要由单片机控制模块、温湿度传感器模块、显示模块、报警模块以及电源模块等组成。
单片机作为核心控制器,负责协调各个模块的工作,温湿度传感器用于采集环境温湿度数据,显示模块用于实时显示测量结果,报警模块在温湿度超限时发出警报,电源模块为整个系统提供稳定的电源。
三、硬件设计(一)单片机控制模块选择合适的单片机型号,如 STC89C52 单片机,其具有丰富的资源和良好的性价比。
单片机通过 I/O 口与其他模块进行通信和控制。
(二)温湿度传感器模块选用 DHT11 数字温湿度传感器,该传感器具有体积小、功耗低、测量精度高、响应速度快等优点。
通过单总线方式与单片机进行数据传输。
(三)显示模块采用液晶显示屏(LCD1602)作为显示设备,能够清晰地显示温湿度测量值。
通过并行接口与单片机连接。
(四)报警模块使用蜂鸣器和发光二极管作为报警装置,当温湿度超过设定的阈值时,蜂鸣器发声,发光二极管闪烁。
(五)电源模块设计稳定的电源电路,为整个系统提供 5V 直流电源。
可以采用电池供电或者通过电源适配器接入市电。
四、软件设计(一)系统主程序设计主程序主要负责系统的初始化、各模块的协调控制以及数据处理和显示。
首先对单片机进行初始化,包括设置 I/O 口状态、定时器和中断等。
然后循环读取温湿度传感器的数据,并进行处理和显示,判断是否超过阈值,若超过则启动报警。
基于PT100热电阻的单片机温度检测系统设计摘要本文介绍了一种基于PT100热电阻的单片机温度检测系统设计。
该系统采用了Maxim的MAX31865芯片来测量PT100热电阻的电阻值,并通过单片机将电阻值转换为温度值。
该系统可以实现高精度的温度测量,并且具有较低的功耗和较高的稳定性。
背景在许多工业应用中,需要对温度进行精确的测量。
PT100热电阻是一种常用的温度传感器,它的电阻值随着温度的变化而变化。
由于PT100热电阻的电阻值变化很小,因此需要使用高精度的电路来进行测量。
单片机是一种常见的控制器,它可以方便地集成多种功能。
将单片机与PT100热电阻结合使用,可以实现精确的温度测量,并且具有较低的功耗和较高的稳定性。
设计硬件设计硬件设计采用了MAX31865芯片来测量PT100热电阻的电阻值。
MAX31865是一种高精度热电偶转换器,可以方便地测量PT100热电阻的电阻值。
MAX31865还提供了冗余检测和安全防护功能,可以提高系统的可靠性。
MAX31865芯片的引脚与单片机的引脚连接如下:MAX31865引脚单片机引脚SDI MOSISDO MISOSCK SCLKCS SS其中,MOSI、MISO、SCLK和SS是SPI总线的引脚,用于与MAX31865进行通信。
单片机的中断引脚连接到MAX31865的RDY引脚,用于检测MAX31865是否准备好进行测量。
PT100热电阻的引脚连接到MAX31865的RTD+和RTD-引脚。
为了减小测量误差,应尽量将RTD+和RTD-的长度保持一致,并且尽可能靠近MAX31865芯片。
软件设计软件设计采用了Arduino环境,可以方便地进行程序开发和调试。
首先需要初始化SPI总线和MAX31865芯片。
可以使用Arduino的SPI库来初始化SPI总线,使用MAX31865库来初始化MAX31865芯片。
MAX31865库提供了方便的接口来进行温度测量和数据读取。
1 概述在人类的生活环境中,温度扮演着极其重要的角色。
温度是工业生产、现代农业乃至人们日常现实生活中经常会需要测量的一个重要物理量,如石油化工、环境控制、食品加工、实验研究、农业大棚等[1]。
温度的检测与控制是工业生产自动控制系统的重要任务之一,因此,各行各业对温度检测系统的便捷性、精确性、智能化要求越来越高。
由此可见,温度的检测和控制是非常重要的。
测量温度需要使用温度传感器,传统的温度传感器是模拟的,如热敏电阻、热电偶等[2]。
热敏电阻采集温度变化的实质是电阻值,所以在实际使用过程中需要额外的辅助器件将其转化为电压信号并且通过调整后送到模拟-数字转化器件(A/D)才能让单片机处理,数字温度传感器的产生解决了这个问题。
本文采用内部集成了A/D 转换器、电路结构简单的数字化温度传感器DS18B20,与单片机技术相结合实现智能温度检测控制系统的设计。
系统只需要占用单片机的一个I/O 口,就能够实现实时温度检测,这使得系统具有很强的扩展性,并且应用前景广泛、实用价值高。
2 系统总体设计本系统设计的基于单片机的智能温度检测控制系统,总体设计框图如图1所示,主要包括单片机最小系统、温度采集电路、实时时钟电路、独立式按键电路、显示电路、报警电路、加热电路和散热电路,其中主控芯片采用功耗低、性能高的单片机STC89C52,温度采集电路采用数字温度传感器DS18B20,显示电路采用LCD1602液晶显示器,报警电路采用蜂鸣器、一个LED 指示灯设计实现声光报警,独立式按键用来设置当前实时时间(年、月、日、时、分、秒)和设定不同时间段温度报警的上下限阈值。
当实测环境温度值大于设定时间段的温度上限值时,系统自动进入散热模式,直流电机运转带动风扇工作,同时蜂鸣器响、LED 指示灯点亮;若低于设定时间段的温度下限阈值,系统自动进入加热模式,继电器控制加热设备工作,同时蜂鸣器响、LED 指示灯点亮;若当前温度处于设定时间段的温度上下限阈值之间时,关闭散热、加热及报警,从而使温度控制在设定的范围内。
引言:单片机作为一种集成电路,可以在温度检测和测量方面提供精确的结果。
在本文中,我们将探讨如何使用单片机制作一个温度计,并进一步深入了解其工作原理和应用。
概述:温度计是测量环境温度的一种常用工具。
传统的温度计通常使用热敏电阻、热电偶或半导体传感器等元件来实现温度测量。
而用单片机制作的温度计具有精度高、反应迅速、可编程性强等优点,因此在许多应用领域得到了广泛的应用。
正文内容:一、单片机温度计的工作原理1.1模拟输入信号处理1.1.1温度传感器的选择1.1.2传感器输出电压的测量1.1.3模拟信号滤波和放大1.2数字输入信号处理1.2.1模数转换器的配置1.2.2采样频率的选择1.2.3数字信号处理算法二、单片机温度计的电路设计2.1单片机的选择和配置2.1.1单片机性能参数考虑2.1.2单片机引脚的分配2.1.3单片机与温度传感器的连接2.2电源系统设计2.2.1电源电压选择2.2.2电源过滤和稳压2.2.3低功耗设计2.3外设设计2.3.1显示屏的选择和接口设计2.3.2按键输入和控制电路设计2.3.3声音提示电路设计三、单片机温度计的软件设计3.1系统初始化3.1.1时钟和定时器配置3.1.2IO口初始化3.1.3中断系统配置3.2温度测量算法3.2.1温度传感器信号处理算法3.2.2温度计算方法选择3.2.3温度显示和存储3.3用户界面设计3.3.1温度显示界面设计3.3.2操作界面设计和控制逻辑四、单片机温度计的功能拓展4.1温度报警功能4.1.1温度报警阈值设定4.1.2报警方式选择4.2温度记录和数据存储4.2.1温度数据存储方式4.2.2数据查询和导出4.3多温度传感器接入4.3.1多传感器引脚分配4.3.2数据采集和处理五、单片机温度计应用实例5.1家用温度监测系统5.2工业温度控制系统5.3医疗设备温度监测总结:本文详细介绍了使用单片机制作温度计的方法。
通过对单片机温度计的工作原理、电路设计、软件设计等方面的讲解,读者可以了解到单片机温度计的制作流程和相应的技术要点。
目录摘要 (I)ABSTRACT (II)1 绪论 (1)1.1选题的背景 (1)1.2课题研究的目的和意义 (1)1.3本文的结构 (1)2 系统总体方案设计 (1)2.1总体方案设计 (2)2.2部分模块方案选择 (3)2.2.1单片机的选择 (3)2.2.2温度检测方式的选择 (3)2.2.3显示部分的选择 (4)2.2.4电源模块的选择 (4)3 硬件电路的设计 (4)3.1 硬件电路设计软件 (4)3.2系统整体原理图 (5)3.3单片机最小系统电路 (6)3.4单片机的选型 (7)3.5温度测量模块 (8)3.5.1 DS18B20概述 (8)3.5.2 DS18B20测温工作原理 (11)3.5.3 DS18B20温度传感器与单片机的接口电路 (12)3.6 显示模块 (13)3.7 按键以及无线遥控模块 (15)3.7.1按键的相关知识 (15)3.7.2 5伏带解码四路无线接收板模块 (16)3.8 报警及指示灯模块 (18)3.9 电源模块 (19)4 系统软件设计及仿真部分 (20)4.1软件设计的工具 (20)4.1.1程序编写软件 (20)4.1.2仿真软件 (21)4.2各模块对应的软件设计 (22)4.2.1显示模块的程序 (22)4.2.2温度测量的程序 (26)4.2.3报警系统程序 (32)4.2.4按键程序 (33)4.2.5总体程序 (35)5 实物制作 (37)5.1电源部分 (37)5.2单片机最小系统部分 (37)5.3 总体实物 (37)6 总结 (38)7 致谢 (39)参考文献 (40)附录一 (41)附录二 (49)基于单片机的温度测量系统摘要随着测温系统的极速的发展,国外的测量系统已经很成熟,产品也比较多。
近几年来,国内也有许多高精度温度测量系统的产品,但是对于用户来说价格较高。
随着市场的竞争越来越激烈,现在企业发展的趋势是如何在降低成本的前提下,有效的提高生产能力。
基于单片机的温度检测系统设计温度检测系统是一种常见的电子设备,它可以用于监测环境温度并将数据传输到计算机或其他设备上。
基于单片机的温度检测系统是一种常见的设计方案,它可以通过使用单片机来实现温度检测和数据传输的功能。
本文将介绍基于单片机的温度检测系统的设计原理和实现方法。
一、设计原理基于单片机的温度检测系统的设计原理是通过使用温度传感器来检测环境温度,并将检测到的数据传输到单片机上进行处理和存储。
具体的设计流程如下:1.选择温度传感器温度传感器是温度检测系统的核心部件,它可以将环境温度转换为电信号并输出。
常见的温度传感器有热电偶、热敏电阻、半导体温度传感器等。
在选择温度传感器时,需要考虑其精度、响应时间、工作温度范围等因素。
2.连接温度传感器和单片机将温度传感器和单片机连接起来,可以使用模拟输入或数字输入方式。
模拟输入方式需要使用模拟转换器将传感器输出的模拟信号转换为数字信号,而数字输入方式则可以直接将传感器输出的数字信号输入到单片机中。
3.编写程序编写程序来实现温度检测和数据传输的功能。
程序需要包括温度传感器的初始化、数据采集、数据处理和数据传输等模块。
在数据传输模块中,可以选择使用串口通信、蓝牙通信或Wi-Fi通信等方式将数据传输到计算机或其他设备上。
二、实现方法基于单片机的温度检测系统的实现方法可以分为硬件设计和软件设计两个部分。
1.硬件设计硬件设计包括选择温度传感器、连接传感器和单片机、设计电路板等步骤。
在选择温度传感器时,可以选择DS18B20数字温度传感器,它具有精度高、响应速度快、工作温度范围广等优点。
连接传感器和单片机可以使用数字输入方式,将传感器输出的数字信号输入到单片机的GPIO口上。
设计电路板时,需要考虑电源、信号线路、滤波等因素。
2.软件设计软件设计包括编写程序、调试程序等步骤。
编写程序时,可以选择使用C语言或汇编语言等编程语言。
程序需要包括温度传感器的初始化、数据采集、数据处理和数据传输等模块。
计算机硬件(嵌入式)综合实践设计报告温度检测系统设计与制作一.系统概述1. 设计内容本设计主要从硬件和软件部分介绍了单片机温度控制系统的设计思路,简单说明如何实现对温度的控制,并对硬件原理图和程序框图作了简洁的描述。
还介绍了在单片机控制系统的软硬件设计中的一些主要技术关键环节,该系统主要以AT89S52单片机为核心, 同时利用DS18B20温度传感器采集温度,采用4位LED 显示管实施信息显示。
AT89S52单片机设计的温度检测电路是本次设计的主要内容,是整个单片机温度控制系统设计中不可缺少的一部分,该系统对温度进行实时采集与检测。
本设计介绍的单片机自动控制系统的主要内容包括:系统概述、元器件选择、系统理论分析、硬件设计、部分软件设计及主要技术性能参数。
2. 元器件选择单片机AT89S52:1个22uF电容:2个4.7K电阻:1个万能板:1个杜邦线:若干单排排针:若干DS18B20温度传感器:2个4位LED显示管:1个二.软件功能设计及程序代码1.总体系统设计思想框图如下:单片机应用软件调试软件编程系统测试和调试系统集成硬件调试选择单片机芯片定义系统性能指标硬件设计2.主程序流程图3.DS18B20数据采集流程图4.程序代码①、温度记录仪#include<reg52.h>#include<intrins.h>#include<SYSTEM.h>#include<LCD1602.h>#include<18B20.h>#include<EEPROM.h>bit rec_flag=0;//记录温度标志uchar autobac_tim=0;//自动跳转延时uchar code logos[]="****NT MUSIC****"; uchar incmin=0;//计分钟数bit overflag=0;//数据溢出标志位uchar mode=1;//系统运行模式uchar tempmode;//模式缓存void init(){lcd_init();eeprom_init();/***********开机效果****************/ display(l1," Starting NT",1);longdelay(10);display(l2," Ver 3.0.1",1);longdelay(20);write_cmd(0x01);//清屏/*************************************/ sys_init();}void comms() //模式公共进程{time2times(); //时间格式转换avtemp=gettemp();//获取温度avtemp2avtemps();//温度格式转换date_counter();//获取当前日期date2dates();//日期格式转换display(l2+1,times,0);display(l2+11,avtemps,0);}void progs(uint i,uint k)//进度条{uint j;write_cmd(0xc0);for(j=0;j<(i*16/k);j++){write_lcddata(0xff);}}void normal_run() //无记录运行模式{comms();if(time[2]%10<5){display(l1,logos,1);}else{display(l1,"***",0);display(l1+13,"***",0);display(l1+3,dates,0);}incmin=0;}void recding_run() //记录模式运行模式{uint WDTPT;//临时写地址指针变量存放comms();recfrq2recfrqs();if(time[2]%10<5){if(mss>50) display(l1," ",0);elsedisplay(l1,"R",0);display(l1+1,"-NUM",0);display(l1+5,datcounts,0);display(l1+9,"**EV",0);display(l1+13,recfrqs,0);}else{display(l1,"***",0);display(l1+13,"***",0);display(l1+3,dates,0);} /***********定时记录*************/if(incmin>=recfrq)//触发记录功能{incmin=0;//1清除进入记录标志if(WDTP>10240) //20个扇区overflag=1;if(overflag==0)//如果数据尚未溢出{if(date_recf==1)//记录年-月-日(格式:'z'+年+月+日)为十制数值{date_recf=0;//清除记录日期标志write_isp(WDTP,'z');//日期起始标志write_isp(WDTP,date[0]);write_isp(WDTP,date[1]);write_isp(WDTP,date[2]);//记录年、月、日}/***********记录时间************/write_isp(WDTP,time[0]);write_isp(WDTP,time[1]);//记录时分/***********记录温度************/write_isp(WDTP,avtemp/100);write_isp(WDTP,avtemp%100);/**********记录加一*********/datcount++;/**********写回数据指针****************/WDTPT=WDTP;if(FDTP==512){del_isp(0);//清空记录表FDTP=0;}write_isp(FDTP,WDTPT/256);write_isp(WDTP,WDTPT%256);write_isp(WDTP,datcount/256);write_isp(WDTP,datcount%256);FDTP=WDTP;WDTP=WDTPT;//交互完成}if(overflag==1)//如果数据溢出{display(l1,"Error!",1);display(l2,"Data Overflow!",1);autobac_tim=0;while(autobac_tim!=3);display(l2," ",1);}}}void data_run() //查看记录模式{uchar i=0;bit bacf=0;uint cou_t=0;//计数缓存变量uchar temp=0;//临时数据缓存uint cd=0;//进度条统计数据autobac_tim=0;while(bacf==0){if(autobac_tim>10)bacf=1;display(l1,"Ready for Export",1);display(l2,"D-Date T-Temp L!",1);if(RI==1){autobac_tim=0;RI=0;ser_rec=SBUF;switch(ser_rec){case 'L': //格式化display(l1,"Format?",1);display(l2," Y-Yes N-No",1);while(1){if(RI==1) {RI=0;ser_rec=SBUF;autobac_tim=0;}if(ser_rec=='Y')//确定格式化{display(l1,"Formatting...",1);display(l2," ",1);eeprom_format();display(l1,"Format Successed",1);longdelay(3);break;}if(ser_rec=='N') break;if(autobac_tim>10)break;}autobac_tim=0;break;case 'D'://输出日期时间display(l1,"Exporting Date..",1);display(l2," ",1);RDTP=512;//将读指针放到首位cou_t=datcount;cd=0;while(cou_t!=0){if(RI==1) RI=0;if(SBUF=='B'){display(l1,"Export stopped",1);cd=0;longdelay(3);break;}temp=read_isp(RDTP);// 预读判断RDTP--;if(temp=='z'){RDTP++;prf_date();//输出年月日}prf_time(); //输出时间RDTP=RDTP+2;cou_t--;cd++;progs(cd,datcount);}if(datcount==0){display(l1,"No Data!",1);longdelay(3);}autobac_tim=0;break;case 'T'://温度输出display(l1,"Exporting Temp..",1);display(l2," ",1);RDTP=516;//将读指针放到首位cd=0;cou_t=datcount;while(cou_t!=0){if(RI==1) RI=0;if(SBUF=='B'){display(l1,"Export stopped",1);cd=0;longdelay(3);break;}temp=read_isp(RDTP);// 预读判断RDTP--;if(temp=='z'){RDTP=RDTP+6;}else{RDTP=RDTP+2;}prf_temp();cou_t--;cd++;progs(cd,datcount);}if(datcount==0){display(l1,"No Data!",1);longdelay(3);}autobac_tim=0;break;case 'B':bacf=1;break;}ser_rec=0;}}mode=tempmode; display(l2," ",1);}void adj_settings() //设置模式{uchar i=0;//Counterbit endadj=0;//调整完毕标志uchar ser_temp=0;//接收缓存write_cmd(0x01);//清屏times[5]=':';//恢复数点display(l1,"Set time- ",1);display(l1+11,"hour",0);display(l2+11,"[ ]",0);display(l2+1,times,0);display(l2+12,recfrqs,0);write_cmd(0xC1+i);write_cmd(0x0f);//显示闪烁光标autobac_tim=0;//初始化自动返回时间常数while(!endadj){if(RI==1) //接收到数据{RI=0;autobac_tim=0;//自动返回清零ser_temp=SBUF;if((ser_temp>47)&&(ser_temp<58))//进行数值判断{if(i<8)times[i]=ser_temp;if(i>8&&i<14)recfrqs[i-11]=ser_temp;if(i>=14)dates[i-13]=ser_temp;i++;}if(ser_temp=='F') i++;//往前一步if(ser_temp=='B') endadj=1;//退出调整switch(i) //显示处理{case 2:i++;display(l1+11,"min ",0);break;case 5:i++;display(l1+11,"sec ",0);break;case 8:i=i+3;display(l1+11,"frq ",0);break;case 14:i++;display(l1+4,"date year ",0);display(l2," ",1);break;case 17:i++;display(l1+11,"moun",0);break;case 20:i++;display(l1+11,"day ",0);break;case 23:endadj=1;break;}if(i<14){display(l2+1,times,0);display(l2+12,recfrqs,0);write_cmd(0xC1+i);}else{display(l2+3,dates,0);write_cmd(0xC1+i-11);}}if(endadj==1)//写回参数{time[0]=(times[0]-48)*10+times[1]-48;time[1]=(times[3]-48)*10+times[4]-48;time[2]=(times[6]-48)*10+times[7]-48;recfrq=(recfrqs[0]-48)*100+(recfrqs[1]-48)*10+recfrqs[2]-48;date[0]=(dates[2]-48)*10+dates[3]-48;date[1]=(dates[5]-48)*10+dates[6]-48;date[2]=(dates[8]-48)*10+dates[9]-48;}if(autobac_tim>10)endadj=1;}display(l2," ",1);write_cmd(0x0c);//正常显示}void main(){init();while(1){switch(mode){case 1:normal_run();break;case 2:recding_run();break;case 3:data_run();break;}if(RI==1){RI=0;ser_rec=SBUF;switch(ser_rec)case 'A':adj_settings();break;case 'R':mode=2;break;case 'N':mode=1;break;case 'H':tempmode=mode;mode=3;break;case 'D':ser_sents(dates);break;case 'T':times[5]=':';ser_sents(times);break;case 'W':ser_sents(avtemps);break;case 'C':ser_sents(datcounts);break;case 'F':ser_sents(recfrqs);break;}ser_rec=0;}}}void miao() interrupt 1 //秒产生中断{TH0=(65535-9200)/256;TL0=(65535-9200)%256;mss++;if(mss==100){mss=0;time[2]++;autobac_tim++;}if(autobac_tim==255)autobac_tim=244;//保持溢出if(time[2]>=60){time[2]=0;time[1]++;incmin++;}if(time[1]>=60){time[1]=0;time[0]++;}if(time[0]>=24){time[0]=0;dayincf=1;//天自增标志置位date_recf=1;//日期需要记录}/*将返回时间[时分秒*/}②、system.h/******系统I/O******//*****LCD I/O*******/sbit RS=P1^2;sbit LCDEN=P1^1;/*****DS18B20*******/sbit DS=P1^0;#define uchar unsigned char#define uint unsigned intuchar code num[]={'0','1','2','3','4','5','6','7','8','9'};/********时间相关变量************/uchar time[]={23,28,00};//时分秒(10进制数)uchar times[]="15:37:00";//时分秒(ASCII码)uchar mss=0;uchar date[]={11,11,11};//年月日(10进制数)uchar dates[]="2011-10-29";//年月日(ASCII码)bit dayincf=0;bit date_recf=0;//日期记录标志/***********记录频率变量*******************/ uchar recfrq=2; //记录频率(10进制数)uchar recfrqs[]="001"; //记录频率(ASCII码)uint datcount=0;//记录总数uchar datcounts[]="0000";/**************串口接收变量****************/ uchar ser_rec;/*************温度相关变量****************/ uint avtemp=0;uchar avtemps[]="00.0";void delay(uchar z){uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void longdelay(uchar z){for(z;z>0;z--)delay(255);}void ser_sent(uchar sendata) //串口发送单字节{SBUF=sendata;while(TI!=1);TI=0;delay(1);}void ser_sents(uchar strings[]) //串口发送字符串{uchar i=0;while(strings[i]!='\0'){ser_sent(strings[i]);delay(20);i++;}ser_sent('\n');}void date_counter() //日期转变{uchar n;//月天数暂存uint year=2000+date[0];//将年转换为标准年if(dayincf==1){dayincf=0;switch(date[1])//根据月份制定月天数{case 1:n=31;break; case 2:if(year%4==0||year%400==0){n=29;} else {n=28;}break;case 3:n=31;break; case 4:n=30;break;case 5:n=31;break; case 6:n=30;break;case 7:n=31;break; case 8:n=31;break;case 9:n=30;break; case 10:n=31;break;case 11:n=30;break; case 12:n=31;break;}date[2]++;if(date[2]>n){date[2]=1;date[1]++;}if(date[1]>12){date[1]=1;date[0]++;}}}void sys_init() //系统初始化{EA=1;TMOD=0x21;TR1=1;REN=1;SM0=0;SM1=1;TH1=0xfA;TL1=0xfA;ET0=1;//允许定时器中断0TH0=(65535-9200)/256;TL0=(65535-9200)%256;// 定时器中断0初值TR0=1;//开中断(秒)ES=0;}void recfrq2recfrqs() //10进制记录频率转字符串{recfrqs[0]=num[recfrq/100];recfrqs[1]=num[recfrq%100/10];recfrqs[2]=num[recfrq%100%10];datcounts[0]=num[datcount/1000];datcounts[1]=num[datcount%1000/100];datcounts[2]=num[datcount%1000%100/10];datcounts[3]=num[datcount%1000%100%10];}void time2times()//10进制时间转字符串{times[0]=num[time[0]/10];times[1]=num[time[0]%10];times[3]=num[time[1]/10];times[4]=num[time[1]%10];if(mss<50) times[5]=':';else times[5]=' ';times[6]=num[time[2]/10];times[7]=num[time[2]%10];}void date2dates()//10进制日期转字符串{dates[2]=num[date[0]/10];dates[3]=num[date[0]%10];dates[5]=num[date[1]/10];dates[6]=num[date[1]%10];dates[8]=num[date[2]/10];dates[9]=num[date[2]%10];}void avtemp2avtemps()//10进制温度转字符串{avtemps[0]=num[avtemp/100];avtemps[1]=num[avtemp%100/10];avtemps[3]=num[avtemp%100%10];}③、LED1602.H#define l1 0x80#define l2 0xc0void write_cmd(uchar con){LCDEN=0;RS=0;P2=con;delay(2);LCDEN=1;delay(2);LCDEN=0;}void write_lcddata(uchar dat){LCDEN=0;RS=1;P2=dat;delay(2);LCDEN=1;delay(2);LCDEN=0;}void display(uchar line,uchar ttb[],bit sign) {uchar i=0;write_cmd(line);//第一行数据起始位while(ttb[i]!='\0'){write_lcddata(ttb[i]);i++;}if(sign==1)//覆盖所有空白{for(i;i<16;i++)write_lcddata(' ');}}void lcd_init(){LCDEN=0;write_cmd(0x38);//置功能write_cmd(0x0c);//显示开启write_cmd(0x06);//显示光标移动设置06右移04左移write_cmd(0x01);//清屏}三.硬件模块设计及原理图设计1.复位电路常见的上电复位和按键复位电路有上电复位、按键脉冲复位、按键电平复位。