单片机实验温度采集系统
- 格式:docx
- 大小:138.61 KB
- 文档页数:28
温度采集电子系统设计报告1. 简介本报告介绍了一个温度采集电子系统的设计。
该系统可以实时采集环境温度,并将数据传输到计算机进行处理和显示。
本报告将详细介绍系统的硬件设计和软件实现。
2. 硬件设计2.1 传感器选择为了实时采集温度数据,我们选择了一款精度高、响应快的温度传感器。
该传感器具有数字输出和I2C接口,能够方便地与单片机进行通信。
2.2 单片机选择我们选用了一款功能强大的单片机作为系统的主控芯片。
该单片机具有丰富的外设接口和强大的计算能力,能够满足系统的需求。
同时,该单片机还有丰富的开发资源和社区支持,使得开发过程更加便捷。
2.3 电路设计系统的电路设计主要包括传感器和单片机之间的连接电路和稳压电路。
传感器与单片机的连接采用了I2C接口,通过外部电阻进行电平转换和保护。
稳压电路采用了线性稳压芯片,确保供电电压的稳定性。
3. 软件实现3.1 硬件驱动为了与传感器进行通信,我们编写了相应的硬件驱动程序。
该驱动程序通过配置单片机的I2C接口,实现了与传感器的数据交换和控制。
3.2 数据采集与处理在软件实现中,我们使用了单片机的定时器和ADC模块来定期采集温度数据。
通过ADC转换,我们可以将模拟温度信号转换成数字信号。
随后,我们对这些数据进行滤波和校准,以获取准确的温度值。
3.3 数据传输与显示为了将采集到的温度数据传输到计算机,我们使用了串口通信。
通过配置单片机的UART模块和计算机的串口接口,我们可以实现数据的传输。
在计算机端,我们编写了相应的数据接收和显示程序,实现了温度数据的实时显示。
4. 实验结果与分析经过实验测试,系统能够准确、稳定地采集温度数据,并进行实时显示。
通过与其他温度计的比较,我们发现系统的测量误差在可接受范围内。
系统的响应速度也非常快,能够在短时间内实时更新温度数据。
5. 总结通过设计和实现温度采集电子系统,我们成功地实现了温度数据的实时采集和显示。
该系统具有稳定性高、响应速度快的特点,可以满足实际应用的需求。
一、实验目的1. 熟悉温度监测系统的基本组成和原理。
2. 掌握温度传感器的应用和数据处理方法。
3. 学会搭建简单的温度监测系统,并验证其功能。
二、实验原理温度监测系统主要由温度传感器、数据采集器、控制器、显示屏和报警装置等组成。
温度传感器将温度信号转换为电信号,数据采集器对电信号进行采集和处理,控制器根据设定的温度范围进行控制,显示屏显示温度信息,报警装置在温度超出设定范围时发出警报。
本实验采用DS18B20数字温度传感器,该传感器具有体积小、精度高、抗干扰能力强等特点。
数据采集器采用单片机(如STC89C52)作为核心控制器,通过并行接口读取温度传感器输出的数字信号,并进行相应的处理。
三、实验器材1. DS18B20数字温度传感器2. STC89C52单片机3. LCD显示屏4. 电阻、电容等电子元件5. 电源模块6. 连接线四、实验步骤1. 搭建温度监测系统电路,包括温度传感器、单片机、显示屏、报警装置等。
2. 编写程序,实现以下功能:(1)初始化单片机系统;(2)读取温度传感器数据;(3)将温度数据转换为摄氏度;(4)显示温度数据;(5)判断温度是否超出设定范围,若超出则触发报警。
3. 连接电源,启动系统,观察温度数据变化和报警情况。
五、实验结果与分析1. 系统搭建成功,能够稳定运行,实时显示温度数据。
2. 温度数据转换准确,显示清晰。
3. 当温度超出设定范围时,系统能够及时触发报警。
六、实验总结1. 本实验成功地搭建了一个简单的温度监测系统,实现了温度数据的采集、处理和显示。
2. 通过实验,加深了对温度传感器、单片机、显示屏等电子元件的理解和应用。
3. 实验过程中,学会了如何编写程序,实现温度数据的处理和显示。
七、实验建议1. 在实验过程中,注意电路连接的准确性,避免因连接错误导致实验失败。
2. 在编写程序时,注意代码的简洁性和可读性,便于后续修改和维护。
3. 可以尝试将温度监测系统与其他功能结合,如数据存储、远程传输等,提高系统的实用性和功能。
单片机数据采集系统实验报告1、被测量温度范围:0-120℃,温度分辨率为0.5℃。
2、被测温度点:2个,每5秒测量一次。
3、显示器要求:通道号2位,温度4位(精度到小数点后一位)。
显示方式为定点显示和轮流显示。
4、键盘要求:(1)定点显示设定;(2)轮流显示设定;(3)其他功能键。
设计内容:1、单片机及电源模块设计:单片机可选用AT89S51及其兼容系列,电源模块可以选用7805等稳压组件,本机输入电压范围9-12v。
2、存储器设计:扩展串行I2C存储器AT24C02。
要求:AT24C02的SCK接P3.2AT24C02的SDA接P3.42、传感器及信号转换电路:温度传感器可以选用PTC热敏电阻,信号转换电路将PTC输出阻值转换为0-5V。
3、A/D转换器设计:A/D选用ADC0832。
要求:ADC0832的CS端接P3.5ADC0832的DI端接P3.6ADC0832的DO端接P3.7ADC0832的CLK端接P2.14、显示器设计:6位共阳极LED显示器,段选(a-h)由P0口控制,位选由P2.2-P2.7控制。
数码管由2N5401驱动。
5、键盘电路设计:6个按键,P2.2-P2.7接6个按键,P3.4接公共端,采用动态扫描方式检测键盘。
6、系统软件设计:系统初始化模块,键盘扫描模块,数据采集模块,标度变换模块、显示模块等。
设计报告要求:设计报告应按以下格式书写:(1)封面;(2)设计任务书;(3)目录;(4)正文;(5)参考文献。
其中正文应包含以下内容:(1)系统总体功能及技术指标描述;(2)各模块电路原理描述;(3)系统各部分电路图及总体电路图(用PROTEL绘制);(4)软件流程图及软件清单;(5)设计总结及体会。
基于单片机的多点无线温度监控系统1. 引言1.1 背景介绍单片机是一种可以完成特定功能的微型计算机芯片,广泛应用于各种智能设备中。
随着物联网技术的不断发展,人们对于无线监控系统的需求也越来越大。
在很多场合中,需要对环境温度进行监控,以确保设备的正常运行和人员的安全。
传统的有线温度监控系统存在布线复杂、安装维护困难等问题,因此基于单片机的无线温度监控系统应运而生。
基于单片机的多点无线温度监控系统可以实现对多个监测点的温度数据实时监控和远程传输,极大地方便了用户对于温度的监测和管理。
通过该系统,用户可以随时随地通过手机或电脑等终端设备查看各监测点的温度情况,及时发现异常情况并进行处理。
这对于工业生产、医疗保健、农业种植等领域都具有重要的意义。
本研究旨在设计并实现一种基于单片机的多点无线温度监控系统,为用户提供便捷、高效的温度监测解决方案。
通过对系统架构设计、硬件设计、软件设计、无线通信协议等方面的研究,探讨系统在温度监控领域的应用前景和发展趋势。
【字数:239】1.2 研究意义温度监控在各种领域中都具有重要意义,例如工业生产、医疗保健、环境监测等。
随着科技的不断发展,人们对温度监控系统的要求也越来越高,希望能够实现实时、精准的温度监测。
基于单片机的多点无线温度监控系统的研究具有重要的实用价值和研究意义。
这种系统可以实现多点温度监测,可以同时监测多个位置的温度数据,实现对整个区域的全面监控。
这对于一些需要对多个点位进行监测的场景非常重要,能够提高监测的效率和准确性。
无线通信技术的应用使得温度数据的传输更加方便快捷。
不再需要通过有线连接来传输数据,可以实现远距离传输温度数据,大大提高了系统的灵活性和便利性。
通过研究基于单片机的多点无线温度监控系统,可以促进单片机技术与无线通信技术的结合,推动传感器网络技术的发展,为实现智能化、自动化的监控系统奠定技术基础。
这对于提高生产效率、降低能耗、改善生活质量等方面都具有重要意义。
基于单片机的智能体温检测系统设计摘要:由于新冠疫情的爆发给大众的生活带来了巨大变化,为了满足疫情条件下对温度快速测量的需求,采用无接触式测温既有效规避病毒传染风险,又可以第一时间检测疑似病例。
在此基础上添加口罩识别功能极大减轻了工作人员人工识别的负担,为防疫工作提供保障。
目前市场现有系统存在价格高以及不易携带的问题,并且目前市场应用的大部分装置都是单独的口罩识别或是无接触测温系统。
与之相比该系统将两种功能结合在同一系统中,具有体积小、便携、易操作等优点,为操作人员提供了极大便利。
此装置适用于学校、工厂、商场等人流密集场所,可以为进出人员提供检测服务。
人机交互式装置在疫情防控中发挥重要作用,节省人力物力,并且其效率远高于人工检测。
关键词:单片机;智能体温;检测系统;设计引言患新冠肺炎的主要症状是发热,因此体温检测是疫情防控的第一道防线。
以当今人流密集场所疫情防控情况为背景,设计并实现了一款基于STM32单片机的非接触式体温测量与身份识别系统。
该系统利用OPENMV对目标人脸进行快速检测,精准识别目标身份信息和口罩佩戴情况,利用MLX90614准确测量目标体表温度,实时将测量信息通过显示屏直观地展示并通过蓝牙发送到手机App上,实现系统逻辑结构的完整性与任务完成的效率最优解。
1系统的组成及其工作原理1.1系统的组成以单片机作为系统控制基础,利用传感器测量温度,通过通信和控制技术,形成温度测量控制系统。
具体可分为基于MLX90614红外测温传感器的温度检测模块、LCD12864液晶屏显示模块、4X4矩阵键盘模块、电源模块、复位模块、晶振模块、报警模块、继电器控制模块和震动传感器模块。
1.2系统工作原理该系统基于STC12C5A60S2单片机进行设计,包括电源电路、复位电路、晶振电路、红外测温传感器、震动传感器、LCD显示电路、蜂鸣器报警电路、键盘输入电路和继电器控制电路,通过MLX90614红外温度传感器实现温度数据的处理。
单片机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、系统架构:本系统的所有模块分为两个主要的部分:单片机部分和PC部分。
单片机部分是整个温度控制系统的中心模组,它负责多路温度传感器的信号采集、温度计算和显示,还有一些辅助操作,如温度上下限报警等;PC部分主要实现数据采集、分析、处理、显示等功能,与单片机的交互可通过RS485、USB等接口进行。
2、硬件设计:本系统设计确定采用AT89C52单片机作为系统的处理核心,在系统中应用TLC1543数据采集芯片,采用ADC转换器将多个温度传感器的数据采集,使系统实现多路温度检测同时显示.另外,为了实现数据采集记录,系统可以选用32K字节外部存储封装。
二、系统总控程序设计系统总计程序采用C语言进行编写,根据实际情况,主要分为以下几个主要的模块:(1)初始化模块:初始化包括外设初始化、中断处理程序初始化、定时器初始化、变量初始化等功能。
(2)温度采集模块:主要对多路温度传感器的采集、计算并存储等操作,还可以实现温度的报警功能。
(3)录波模块:提供数据的实时采集、数据的存取、数据的滤波处理等功能。
(4)通信模块:主要是用于实现数据透传,采用RS485接口与PC端的上位机联网,可实现远程调试、远程控制等功能。
(5)用户界面模块:实现数据显示功能,可以根据用户的要求显示多路温度传感器检测到的数据。
三、实验检验(1)检查系统硬件的安装是否良好;(2)采用实测温度值与系统运行的实测温度值进行比对;(3)做出多路温度信号的对比,以确定系统读取的数据是否准确;(4)检查温度报警功能是否可以正常使用,也可以调整报警范围,试验报警功能是否可靠;(5)进行通信数据采集的联网检测,确保上位机和系统可以进行实时、准确的通信。
《单片机原理与应用》课程实验报告院系:班级:学生:学号:指导教师:设计时间:哈尔滨工业大学1 实验的目的、内容和设备1.1 实验的目的单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。
1.2 实验内容实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。
通过该实验学习和掌握以下的内容:1)MPLAB开发环境的使用,程序编写和排错及软件仿真2)利用MPLAB和ICD2对程序进行在线仿真和调试3)使用万用表和示波器等仪器对硬件系统进行测量和调试4)PIC18F452单片机的I/O和PWM驱动及编程方法5)PIC18F452单片机LCD和键盘接口及编程方法6)PIC18F452单片机的USART编程及与PC机的通讯方法7)利用Timer1外接32.768kHz的晶振产生RTC1.3 实验设备1)运行MPLAB的PC机2)示波器、万用表3)直流电源4)ICD2仿真器5)APP001多功能实验板2 总体设计2.1 硬件总体设计系统组成方案图1系统框图2.2 软件总体设计图2主程序框图图3 中断程序框图3 硬件设计1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。
开发板上的指示灯D11由RB2,低电平亮,高电平灭。
基于AT89C51的温度采集与显示系统设计摘要:以AT89C51单片机为核心控制元件介绍了与DS18B20和MAX7219显示驱动组成的温度采集系统的设计方案利用单片机空余I/O口以及上述元件的特性,构成该系统。
通过Proteus进行仿真。
关键词:温度采集,AT89C51,DS18B20,MAX7219目录1、系统概述……………………………………………………………….2、硬件介绍……………………………………………………………….3、软件设计……………………………………………………………….4、仿真结果……………………………………………………………….5、小结…………………………………………………………………….6、参考文献……………………………………………………………….1、系统概述温度传感器选用目前常用的数字温度传感器DS18B20,采用数码LED显示,显示驱动为MAX7219,首先设计系统的总体原理图如下:系统可以简单地分为为5个模块,由外部提供8V-24V直流电源供电。
电源模块将输入8-24V的电源电压转换为5V,为系统中的芯片供电,可以使用7805等常用的三端稳压器芯片;温度传感器采集温度信号,温度传感器有模拟输出和数字输出两种形式,这里选择具有数字输出的DS18B20;单片机是系统的核心,选用AT89C51;系统采用LED数码显示器显示温度值,LED显示屏采用独立的显示驱动芯片MAX7219,单片机将待显示的字符写入MAX7219后,MAX7219将会动态的刷新显示内容,无需占用单片机过多的资源。
尽管DS18B20的分辨率可已达到0.0625°C,但测量精确度为0.5°C,因此设计4位数的LED数码显示管就可以了,显示3位整数,1位小数。
2、硬件介绍:1、数字温度传感器DS18B20DS18B20数字温度计提供9位-24位(二进制)温度读数,以指示器件的温度,数据经过单线接口送入DS18B20或从DS18B20送出,因此从主机CPU到DS18B20仅需要一条DQ。
单片机原理与运用课程设计课题名称:专业班级:学生姓名:指导老师:完成时间:温度采集与显示系统2012年7月4号摘要随着信息技术的飞速发展,嵌入式智能电子技术已渗透到社会生产、工业控制以及人们日常生活的各个方面。
单片机又称为嵌入式微型控制器,在智能仪表、工业控制、智能终端、通信设备、医疗器械、汽车电器、导航系统和家用电器等很多领域都有着广泛的应用,已成为当今电子信息领域应用最广泛的技术之一。
本文主要介绍了一个基于STC89C52单片机的温度采集与显示系统,详细描述了利用液晶显示器件温度传感器DS18B20开发测温系统的原理,重点对传感器与单片机的硬件连接和软件编程进行了详细分析。
主要地介绍了数字温度传感器DS18B20的数据采集过程,进而对各部分硬件电路的工作原理进行了介绍。
温度传感器DS18B20与STC89C52结合构成了最简温度检测系统,该系统可以方便的实现温度采集和显示,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。
关键词:单片机STC89C52、DS18B20温度传感器、液晶显示器LCD1602、AT24C02数据存储芯片目录一、绪论------------------------------------------41.1 、温度检测系统的介绍------------------------------41.2、温度检测的实际意义------------------------------41.3、设计内容及功能要求------------------------------4二、系统硬件部分---------------------------------52.1、单片机最小系统----------------------------------52.2、温度采集电路-----------------------------------52.3、LCD1602显示电路-------------------------------62.4、数据存储电路-----------------------------------72.5、报警电路--------------------------------------72.6、按键中断电路-----------------------------------8三、总电路图(仿真)----------------------------8四、系统软件部分---------------------------------94.1、程序流程图:-----------------------------------94.2、主程序(main.c)-------------------------------104.3、24c02.c-------------------------------------144.4、ds18b20.c-----------------------------------154.5、lcd.c---------------------------------------194.6、I2C.c---------------------------------------214.7、function.c-----------------------------------24五、元器件清单----------------------------------25六、安装与调试----------------------------------276.1、电路参数的选取与安装---------------------------276.2调试-----------------------------------------27七、总结-----------------------------------------28一、绪论1.1 、温度检测系统的介绍温度检测在各领域应用的非常广泛,可以说渗透到了社会的每一个领域。
人们的生活与温度检测息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
通过DS18B20采集温度数据,经I/O口传给单片机,单片机对接收到的数据进行实时在lcd上显示,并十秒采集通过I2C总线送到24c02进行储存,当按键按下时进入外部中断,并在外部中断中进行读取24c02所保存的值并在lcd上显示;拓展功能部分:在lcd的第二行显示时钟,并配有按键进行调时;温度报警电路,当温度上升到一定值时给蜂鸣器低信号,使其响起。
1.2、温度检测的实际意义在工业生产和实践研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等领域,温度常常是表征对象和过程状态的重要参数之一。
比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、柴油、煤油等产品。
没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。
由此可见,温度的检测对日常生活很重要。
1.3、设计内容及功能要求利用STC89C52、DS18B20、LCD1602、AT24C02等元器件设计温度采集与显示系统。
系统具有以下功能:1、能正确检测温度;2、在1602上实时显示温度;3、每隔10秒采集一次温度数据并保存到AT24C024、按键按下后,可逐个显示之前采集到的数据;5、其他功能可根据系统上的资源自行设定。
扩展功能:温度超过设定值,蜂鸣器报警;时间日期的显示;按键按下,重新开始采集温度等等。
二、系统硬件部分2.1、单片机最小系统单片机是指一个集成在一块芯片上的完整计算机系统。
它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
在内部ROM中载入程序既可以实现对其的操作控制。
我们使用了AT89S52这款单片机,它具有内部ROM空间大,工作速度快等优点,便于以后的升级扩展。
现在主流的MCS-51单片机要想正常工作必须配备复位和时钟电路,复位脚必需在振荡器起振后至少保持两个机器周期复位电平。
也就是说,复位脚(RST)复位电平保持时间应包含VCC的建立时间、振荡器起振时间和至少两个机器周期时间。
本次设计采用最基本的上电复位电路。
另外的时钟电路则为整个系统提供了系统的时基,主要有一个晶振来起振,另外两个电容可以增强时钟电路的稳定性。
图2.1为单片机最小系统电路:图2.1:单片机最小系统电路2.2、温度采集电路温度传感器的种类众多,在高精度、高可靠性的应用场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器比较理想。
它体积小,硬件开消低,抗干扰能力强,精度高,附加功能强。
与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
它具有独特的单线接口仅需要一个端口引脚进行通信,并可通过数据线供电,电压范围为3.0~5.5V。
采用单总线数字温度传感器DS18B20测量温度。
因为它直接输出数字信号,便于单片机进行处理及控制,同时也节省了硬件电路。
该芯片的物理化学性质很稳定,元件线形性能好。
当温度在0—100摄氏度范围内变化时,最大线形偏差小于1摄氏度。
图2.2为温度采集电路:图2.2:温度采集电路2.3、LCD1602显示电路采用液晶显示器件。
液晶显示具有平稳、省电、美观等优点,更容易满足题目要求。
而且对后续的工艺兼容性高,只需将修改软件中程序设计即可,可操作性强,也易于读数。
LCD1602液晶显示器具有两行十六个字符的显示,能同时显示其它的信息如日期、时间、星期、温度。
图2.3为LCD1602显示电路:图2.3:LCD1602显示电路2.4、数据存储电路AT24C02支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。
任何从总线接收数据的器件为接收器。
数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。
主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,由于A0、A1和A2可以组成000~111八种情况,即通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上,通过进行不同的配置进行选择器件。
选用这样的数据存储器件是比较合适的。
图2.4为数据存储电路图:图2.4:数据存储电路2.5、报警电路报警电路较为简单,只要由蜂鸣器组成,主要器件也是蜂鸣器。
蜂鸣器有正负端口,我在设计电路的时候将蜂鸣器的正端接+5V 的电源,另一端接到单片机的p1.0口,只要单片机在这个口输出低电平,则蜂鸣器接通后产生蜂鸣。
图2.5为报警电路图:图2.5:蜂鸣器报警电路2.6、按键中断电路在本次设计中我选用四个按键来控制温度显示中的一些步骤。
首先,采用一个中断来控制对AT24C02的锁存储数据的读取,然后显示在LCD1602上。
每按一次第一个按键所读取的温度不同。
其他三个按键为时间调整按键,可以通过这三个按键对液晶屏里面的时钟进行时间调整。
图 2.6为按键中断电路图:图2.6:按键中断电路三、总电路图(仿真)四、系统软件部分4.1、程序流程图:图4.1温度采集程序图图4.2按键中断程序图4.2、主程序(main.c)#include<reg52.h>#include<function.h>#define warn_35 350#define warn_11 110char miao,shi,fen,flag;uint s1num;ucharcount,m,n;uintsu,tt,mm;//uchar buff[4];unsigned char pDat[7],pDat1[7];sbit s1=P3^4;sbit s2=P3^5;sbit s3=P3^6;sbit beep=P1^0;//蜂鸣器void deal(uint tem){if((tem>warn_35)||(tem<warn_11)){beep=0;}else beep=1;}void main(){m=0;n=0;init();EX0=1;//init_com(); //包含了对定时器0的设定while(1){tempchange();tt=get_temp();if(flag==1){EA=0;flag=0;IRcvStr(0xa0,n,&pDat1[0],8);mm=pDat1[0]*100+pDat1[1]*10+pDat1[2];//pDat1[7]=0;n=n+0x08;if(n==0xf8)n=0;EA=1;}deal(tt);write_sfm(12,miao);write_sfm(9,fen);// write_sfm(6,shi);dis_temp1(mm);delay(5);dis_temp(tt);keyscan();}}void int_0() interrupt 0{flag=1;}void keyscan(){if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+12);//write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+9);}if(s1num==3){write_com(0x80+0x40+6);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(12,miao);write_com(0x80+0x40+12);//指针回原位}if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(9,fen);write_com(0x80+0x40+9);//指针回原位}if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(6,shi);write_com(0x80+0x40+6);//指针回原位}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){/* if(miao==0){miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}*/miao--;if(miao==-1)miao=59;write_sfm(12,miao);write_com(0x80+0x40+12);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(9,fen);write_com(0x80+0x40+9);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(6,shi);write_com(0x80+0x40+6);}}}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;su++;if(su==100){su=0;pDat[0]=tt/100;pDat[1]=(tt%100)/10;pDat[2]=tt%10;ISendStr(0xa0,m,&pDat[0],8); //存温度// pDat[7]=0;m=m+0x08;if(m==0xf8)m=0;}count++;if(count==20){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}// write_sfm(4,shi);}//write_sfm(7,fen);}//write_sfm(10,miao);}}4.3、24c02.c#include<Function.h>bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no){unsigned char i;Start_I2c(); /*启动总线*/SendByte(sla); /*发送器件地址*/if(ack==0) return(0);SendByte(suba); /*发送器件子地址*/if(ack==0)return(0);for(i=0;i<no;i++){SendByte(*s); /*发送数据*/if(ack==0)return(0);s++;}Stop_I2c(); /*结束总线*/return(1);}bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no){unsigned char i;Start_I2c(); /*启动总线*/ SendByte(sla); /*发送器件地址*/if(ack==0)return(0);SendByte(suba); /*发送器件子地址*/ if(ack==0)return(0);Start_I2c(); /*重新启动总线*/ SendByte(sla+1);if(ack==0)return(0);for(i=0;i<no-1;i++){*s=RcvByte(); /*发送数据*/Ack_I2c(0); /*发送就答位*/s++;}*s=RcvByte();Ack_I2c(1); /*发送非应位*/Stop_I2c(); /*结束总线*/return(1);}4.4、ds18b20.c#include <reg52.h>#include <stdio.h>#include<function.h>sbit ds=P1^1; //温度传感器信号线//sbit beep=P2^3; //蜂鸣器uint temp;float f_temp;void dsreset(void) //18B20复位,初始化函数{uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit tempreadbit(void) //读1位函数{uinti;bit dat;ds=0;i++; //i++ 起延时作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return (dat);}uchartempread(void) //读1个字节{uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}void tempwritebyte(uchardat) //向18B20写一个字节数据{uinti;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写 1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0; //写 0i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) //DS18B20 开始获取温度并转换{dsreset();delay(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}uintget_temp() //读取寄存器中存储的温度数据{uchara,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); //读低8位b=tempread(); //读高8位temp=b;temp<<=8; //两个字节组合为1个字temp=temp|a;f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;return temp; //temp是整型}////////////////////显示程序调用lcd中的write_sfm1 十位地址写4 个位为5 小数为7//////////////////////////void dis_temp(uint t){uinti;i=t/100;write_sfm1(0,i);i=(t%100)/10;write_sfm1(1,i);i=t%10;write_sfm1(3,i);}void dis_temp1(uint t) //显示储存的温度{uinti;i=t/100;write_sfm1(11,i);i=(t%100)/10;write_sfm1(12,i);i=t%10;write_sfm1(14,i);}/*void init_com(void){TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;}void comm(char *parr){do{SBUF = *parr++; //发送数据 while(!TI); //等待发送完成标志为1TI =0; //标志清零}while(*parr); //保持循环直到字符为'\0'}*////////////////////////////////////////////////*void warn(uints,uchar led) //蜂鸣器报警声音 ,s控制音调{uchari;i=s;beep=0;P1=~(led);while(i--){dis_temp(get_temp());}beep=1;P1=0XFF;i=s;while(i--){dis_temp(get_temp());}}void deal(uint t){uchari;if((t>warn_l2)&&(t<=warn_l1)) //大于25度小于27度{warn(40,0x01);}else if(t<=warn_l2) //小于25度{warn(10,0x03);}else if((t<warn_h2)&&(t>=warn_h1)) //小于32度大于30度 {warn(40,0x04);}else if(t>=warn_h2) //大于32度{warn(10,0x0c);}else{i=40;while(i--){dis_temp(get_temp());}}}4.5、lcd.c#include <reg52.h>#include<function.h>sbitrs=P2^6;sbitlcden=P2^7;//sbitrw=P2^5;uchar code tablenum[]= "0123456789";uchar code table[]= "00.0C Temp:00.0C";uchar code table1[]="Time: 00:00:00";uchar code table2[]=" MADE BY";uchar code table3[]=" CaiGuo Sen";void delay(uint z){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchardat){rs=1;lcden=0;P0=dat;delay(5);lcden=1;delay(5);lcden=0;}void init(){ucharnum;lcden=0;//rw=0;// fen=59;// miao=53;// shi=23;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<12;num++){write_date(table2[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<13;num++){write_date(table3[num]);delay(5);}delay(2000);write_com(0x80);for(num=0;num<16;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(ucharadd,uchardat)//写地址和自动显示两位数时间{uchars,g;s=dat/10;g=dat%10;write_com(0x80+0x40+add);write_date(tablenum[s]);write_date(tablenum[g]);}void write_sfm1(ucharadd,uchardat) //写温度值十位地址写4 个位为5 小数为7{write_com(0x80+add);write_date(tablenum[dat]);}4.6、I2C.c#include<reg52.h>#include <intrins.h>#include<Function.h>#define NOP() _nop_() /* 定义空指令 */#define _Nop() _nop_() /*定义空指令*/sbit SCL=P2^1; //I2C 时钟sbit SDA=P2^0; //I2C 数据bit ack; /*应答标志位*/void Start_I2c(){SDA=1; /*发送起始条件的数据信号*/_Nop();SCL=1;_Nop(); /*起始条件建立时间大于4.7us,延时*/_Nop();_Nop();_Nop();_Nop();SDA=0; /*发送起始信号*/_Nop(); /* 起始条件锁定时间大于4μs*/_Nop();_Nop();_Nop();SCL=0; /*钳住I2C总线,准备发送或接收数据 */_Nop();_Nop();}void Stop_I2c(){SDA=0; /*发送结束条件的数据信号*/_Nop(); /*发送结束条件的时钟信号*/SCL=1; /*结束条件建立时间大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1; /*发送I2C总线结束信号*/_Nop();_Nop();_Nop();_Nop();}void SendByte(unsigned char c) {unsigned char BitCnt;for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/ {if((c<<BitCnt)&0x80)SDA=1; /*判断发送位*/elseSDA=0;_Nop();SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/ _Nop();_Nop(); /*保证时钟高电平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1; /*8位发送完后释放数据线,准备接收应答位*/_Nop();_Nop();SCL=1;_Nop();_Nop();if(SDA==1)ack=0;else ack=1; /*判断是否接收到应答信号*/SCL=0;_Nop();_Nop();}unsigned char RcvByte(){unsigned char retc;unsigned char BitCnt;retc=0;SDA=1; /*置数据线为输入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0; /*置时钟线为低,准备接收数据位*/_Nop();_Nop(); /*时钟低电平周期大于4.7μs*/_Nop();_Nop();_Nop();SCL=1; /*置时钟线为高使数据线上数据有效*/_Nop();_Nop();retc=retc<<1;if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */ _Nop();_Nop();}SCL=0;_Nop();_Nop();return(retc);}void Ack_I2c(bit a){if(a==0)SDA=0; /*在此发出应答或非应答信号 */ elseSDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop(); /*时钟低电平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/_Nop();_Nop();}4.7、function.c#define uchar unsigned char#define uint unsigned intextern void write_sfm(ucharadd,uchardat);extern void delay(uint z);extern void dsreset(void); //18B20复位,初始化函数extern bit tempreadbit(void); //读1位函数extern uchartempread(void); //读1个字节extern void tempwritebyte(uchardat); //向18B20写一个字节数据extern void tempchange(void); //DS18B20 开始获取温度并转换extern uintget_temp(); //读取寄存器中存储的温度数据extern void dis_temp(uint t);//显示程序extern void dis_temp1(uint t);//extern void warn(uints,uchar led); //蜂鸣器报警声音 ,s控制音调//extern void deal(uint t);//extern void init_com(void);//extern void comm(char *parr);extern void write_com(uchar com);extern void write_date(uchardat);extern void init();extern void write_sfm(ucharadd,uchardat);//写地址和自动显示两位数时间extern void write_sfm1(ucharadd,uchardat); //写温度值十位地址写4 个位为5 小数为7extern void keyscan();/****h函数声明部分***********/extern bit ack;//起动总线函数extern void Start_I2c();//结束总线函数extern void Stop_I2c();//应答子函数extern void Ack_I2c(bit a);//字节数据发送函数extern void SendByte(unsigned char c);//有子地址发送多字节数据函数extern bit ISendStr(unsigned char sla,unsigned char suba,unsigned char*s,unsigned char no) ;//无子地址发送多字节数据函数extern bit ISendStrExt(unsigned char sla,unsigned char *s,unsigned char no); //无子地址读字节数据函数extern unsigned char RcvByte();//有子地址读取多字节数据函数extern bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char*s,unsigned char no);五、元器件清单六、安装与调试6.1、电路参数的选取与安装在确定了电路主要的器件之后,我们可以查阅参考文献确定具体的电路参数,具体如下:单片机选择AT89S52一片,单片机的复位电路需要22uf电容和1K电阻各一,时钟电路需要12M晶振一个60pf电容两个,测温电路只需要一个DS18B20和一个10K的电阻即可,显示电路只要一块LCD1602就可以完成显示任务。