单片机温度采集程序
单片机温控程序
单片机温控程序
单片机温控程序是一种用于控制温度的程序,它可以实现对温度的监测和控制。
通过使用单片机及其相关的传感器和执行器,可以实现对温度的精确控制,从而满足不同场景下的温度需求。
在温控程序中,首先需要使用温度传感器来检测当前的环境温度。
传感器将实时采集到的温度值转换成数字信号,并通过单片机进行处理。
单片机会根据预设的温度范围,判断当前温度是否处于合理范围内。
当温度超过预设范围时,单片机将启动执行器,通过控制电磁阀或者风扇等设备,调节环境温度。
当温度下降到合理范围内时,单片机会停止执行器的工作,从而实现温度的控制。
在温控程序中,关键是确定合理的温度范围和控制策略。
温度范围的确定需要根据具体的场景和需求来进行调整,以确保温度的稳定性和安全性。
控制策略的选择也很重要,可以根据不同的情况采用开环控制或闭环控制等不同的方式。
除了温度控制外,温控程序还可以实现其他功能,如温度显示、报警等。
通过在单片机上添加合适的显示模块和报警器,可以实现对温度的实时显示和异常温度的报警功能,从而提高温度监测的效果和准确性。
单片机温控程序是一种重要的技术应用,可以广泛应用于各种领域,
如家庭、工业、医疗等。
通过合理的温度控制,可以提高生活和工作环境的舒适度和安全性,为人们的生活和工作带来便利和保障。
基于单片机的多路温度采集系统软件设计
基于单片机的多路温度采集系统软件设计(附程序,元件清单)编辑:Nancy 来源: 作者:Team 指数:28 编号:544020120419 共2页: 上一页12下一页基于单片机的多路温度采集系统软件设计(附程序,元件清单)(任务书,开题报告,外文翻译,毕业论文9000字)摘要:随着现代信息技术的飞速发展〖资料来源:毕业设计(论文)网 〗温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响温度采集在林业,农业,化工甚至是军工领域都有广泛的应用,因此能否对这些地区的环境温度实现有效的监测。
是一个要解决的重要的课题。
采用温度传感器构成的电子监控装置是一种较好的解决方案,因此利用Mcs-51单片机系列设计了一个温度采集系统。
数字式多路温度采集系统由主控制器、温度采集电路、温度显示电路、报警控制电路及键盘输入控制电路组成。
它利用单片机AT89C51做控制及数据处理器、智能温度传感器DS18B20做温度检测器、LED数码显示管做温度显示输出设备。
实现多监测点的温度采集。
并且具有显示,报警等功能。
能够应用于一般的环境的温度采集环境。
软件设计主要采用汇编语言设计,设计工具用keil,程序主要由键盘扫描子程序,温度转换子程序,读出温度子程序,计算温度子程序,显示数据刷新子程序,报警控制子程序组成。
用汇编的主要优点是编程的效率高。
适用于简单的但是要求较高的电路。
本文主要是采用的是汇编语言设计。
. 〖资料来源:毕业设计(论文)网 〗关键词:温度传感器单片机软件software design base on SCM multi-channel temperature gathering system Abstract:With the rapid development of modern information technology,In temperature measurement control system of industrial, agricultural and People's Daily life playsa more and more important role in people's life, and it has very important effect,Temperature gathering in the forestry, agriculture, chemical and even military domain has a wide range of applications,So effective monitor the environment temperatureof these regions Is an important task to solve. A temperature sensor constitute electronic monitoring device is a better solution, so use Mcs - 51 SCM series designa temperature gathering system.the digital multi-channel temperature gathering system by the master control regulator, the temperature gathering electric circuit, the temperature display circuit, reports to the police the control circuit and the keyboard entry control circuit is composed .It makes the control and the data processor, intelligent temperature sensor DS18B20 using monolithic integrated circuit AT89C51 makes the temperature detector, the LED numerical code display tube makes the temperature demonstration output unit. Achieve more monitoring stations in the temperature gathering. And display, alarm functions. Can be used in the general environment temperature acquisition environment.〖资料来源:毕业设计(论文)网 〗The software design use assembly language,The design tool adopt keil, Program mainlyby the keypad scanning subroutine, the temperature conversion subroutine, read temperature subroutine, the calculation of temperature subroutine, display datarefresh subroutines, alarm control subroutines composition.The advantage of the assembly language is high efficiency, and fit for the circuit which simple but require expert . This paper is mainly uses assembler languageKeyword: temperature ensor monolithic integrated circuit software毕业设计(论文)使用的原始资料(数据)及设计技术要求:基于单片机的多路温度采集系统主要用于采集多个监测点的温度,当某个监测点的温度超过一定的范围时进行报警。
单片机的数字温度计设计方案(附代码与仿真)
基于STC89C52的数字温度计目录1、简介....... .......... ..... 3 _ _2、计划选择2.1。
主控片选 (3)2.2.显示模块.............................. (3)2.3、温度检测模块………………………………… .. 43、系统硬件设计3.1。
51单片机最小系统设计………………………… .4 .电源电路设计…………………… .. 5.液晶显示电路设计……………………………… ..63.4.温度检测电路设计………… . . . 74.系统软件设计4.1。
温度传感器数据读取流程图......... .. (9)4.2.系统编程………………… .105. 编程与仿真5.1、Keil编程软件………………… .. .. 115.2.变形杆菌 (11)5.3.模拟界面……………………… ..116.总结........ .......... ........ 12 _ _ _ _ _七、附录附录 1. 原理图........ .......... (12)附录 2. 程序清单…………………………………………………………………… ..131 简介进入信息飞速发展的21世纪,科学技术的发展日新月异。
科学技术的进步带动了测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。
我们已经进入高速发展的信息时代,测量技术也成为当今技术的主流,已经渗透到研究和应用工程的各个领域。
温度与人们的生活息息相关,温度的测量变得非常重要。
2.系统方案选择2.1 主控芯片选型方案一:STC89C52RCSTC89C52RC是8051内核的ISP在线可编程芯片,最高工作时钟频率为80MHz,芯片内含8KB Flash ROM,可反复擦写1000次。
该器件兼容MCS-51指令系统和8051引脚结构。
该芯片集成了通用8位中央处理器和ISP Flash存储单元,具有在线可编程特性,在PC端有控制程序,用户程序代码可下载到单片机部门,无需购买通用编程器,速度更快。
基于单片机的温度测量
引言:温度是一个常见的物理量,对于许多领域的应用来说,准确地测量温度非常重要。
单片机作为一种常见的嵌入式系统,具有强大的数据处理和控制能力。
本文将介绍基于单片机的温度测量技术及其应用。
概述:温度测量是一项广泛应用于工业自动化、环境监测、医疗设备等领域的技术。
传统的温度测量方法主要基于热敏电阻、热电偶、红外线等。
而基于单片机的温度测量技术则结合了传感器、单片机和通信等技术,能够实时、精确地监测和控制温度。
正文:1. 传感器选择1.1 热敏电阻热敏电阻是一种根据温度变化导致电阻值变化的传感器。
它的特点是响应速度快、精度高,但对环境温度和供电电压的稳定性要求较高。
1.2 热电偶热电偶是一种使用两个不同金属的导线连接的传感器。
它的优点是测量范围广,适用于极高或极低温度的测量,但精度较低,受电磁干扰影响较大。
1.3 红外线传感器红外线传感器是一种测量物体表面温度的传感器。
它可以通过接收物体发出的红外辐射来测量温度,适用于无接触测量,但精度受物体表面性质影响较大。
2. 单片机选择2.1 嵌入式系统单片机作为一种常见的嵌入式系统,集成了处理器、存储器和外设接口。
它具有较强的计算和控制能力,适用于温度测量应用中的数据处理和控制任务。
2.2 选择合适的单片机型号选择合适的单片机型号是确保系统稳定运行的关键。
应根据温度测量的要求确定所需要的计算能力、引脚数量、通信接口等因素,选择合适的单片机型号。
3. 温度采集与处理3.1 模拟信号采集通过选定的传感器,将温度信号转换为模拟电压信号。
使用单片机的模拟输入接口,对模拟电压信号进行采集,获取温度数据。
3.2 数字信号处理单片机通过内置的模数转换器(ADC)将模拟信号转换为数字信号。
根据所选单片机型号的计算能力,可以进行进一步的数据处理和算法运算,包括滤波、校正等。
4. 数据存储与通信4.1 存储器选择根据温度测量系统的要求,可以选择合适的存储器类型,如闪存、EEPROM等。
基于单片机的温度采集与液晶显示
1 绪论1.1 本课题研究的背景和意义温度,一个在日常生活和生产过程甚至科学实验中普遍而且重要的物理参数。
近年来,随着社会的发展和科技的进步,温度控制系统以及测温仪器已经广泛应用于社会生活的各个领域,尤其是在工业自动化控制中占有非常重要的地位。
人们通过温度计来采集温度,经过人工操作进行加热、通风和降温。
从而来控制温度,但是对于这些控制对象惯性大,滞后性严重,而且还存在有许多不定的因素,从而根本难以建立精确的数学模型。
这样不仅控制精度低、实时性差,而且操作人员的劳动强度大,并且有许多工业生产环节是人们不能直接介入的。
因此智能化已然成为现代温度控制系统发展的主流方向。
针对这一种实际情况,设计个温度控制系统,具有非常广泛的应用前景和实际意义[1]。
随着电子信息技术和微型计算机技术的飞速发展。
单片机技术也得到了飞速的发展。
尤其是在高集成度、高速度、低功耗还有高性能方面取得了巨大的进展。
使得单片机在电子产品当中的应用越来越广泛。
使用单片机对温度进行控制的技术也油然而生。
它不仅可以克服温度控制系统中存在的严重的滞后现象,同时还可以在提高采样频率的基础上很大程度的提高控制的效果和控制的精度。
并且随着技术日益发展和完善,相信越来越能显现出它的优越性。
1.2 目前国内外研究现状在国内外温度控制成了一门广泛应用于很多领域的技术。
像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等。
温度控制系统虽然在国内各行各业的应用已十分广泛,但是从温度控制器的生产角度来看,总体的发展水平仍不高。
跟美德日等先进国家相比,仍有着较大的差距。
“点位”控制和常规的PID控制器占领了成熟产品的主体份额。
但它只可以适用于一般的温度系统控制,而难于控制复杂、滞后、时变的温度控制系统。
此外,适于较高控制场合的智能化、自适应控制仪表,目前在国内还没有取得较好的研究成果。
并且,在形成商品化和仪表控制参数的自整定方面,一些先进国家虽已经有一批成熟的产品。
单片机控制温度采集系统设计
功 能需求 采取模块化方法进行设计 , 开发工具 采用 V B语 言和 C语言 , B语 言简单易用 、 发速度 快 , V 开 用来 编写友 好的人 机
界 面和数据库维护操作 ; 语 言执行效 率高 、 以操作 硬件 , C 可 用
来 编写对底 层 硬件 进行 访 问 的 函数 , 这些 函数 由 V B按 需 调 用 。软 件实现 的功能 主要 有用户 管理 、 系统设置 、 轴温数据 查 看、 曲线 图显示 、 报警记录查询和报表打 印等 。
据进行处理 , 并负责整 个系统 的管理。
控制台节点 的组成 与轴 温监测 节点类 似 , 同时 , 制 台节 控
点通过 R 2 2接 口实现 与 上位 机通 信 。上位 机 由 C U、 S一 3 P 存
储 区、 盘 、 键 显示器 、 口等单元 组成 , 户可 以通 过上位机 进 接 用 行轴温数据 监测 和系统管理 。
MA 17 X 6 8中有一 内置 电压 比较 器 , 电池 电压低 于设 定 的 电 当
压值时 , 模块通过 P O引脚 向 MS 4 0 2 7 F P3 F 24发送报警信 号 2 2 轴 温监 测控 制 台 设 计 . 轴温监测控 制 台设 在 机 车 中, 由控制 台节 点 与上位 机 组 成 。控 制 台节 点 与 轴 温 监 测 节 点 进 行 无 线 通 信 , 收 各 节 车 接 辆的轴温数据 , 然后传给上 位机 ; 位机 负责对 收集 的轴温 数
TX PW R UP、
— —
3 2 轴温监测控制 台管理软件设计 . 轴 温监 测控制 台管理 软件是 系统管 理 的核 心。软件按 照
E N接 通 用 1 口 , C AM、 R接 中 断 口 , 样 0 而 D、 D 这
单片机的温度采集系统 源代码
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
void tmpwritebyte(uchar dat) //写一个字节到DS18B20里
{
uint i;uchar j;bit testb;
for(j=1;j<=8;j++)
temp=tt*10+0.5; //放大十倍,将小数点后第一位转换为可显示数字,再四舍五入
return temp;
}
uchar tmpread(void) //读一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P3^3; //定义DS18B20接口
int temp; //全局温度变量
{
dsreset(); //初始化DS18B20
tmpwritebyte(0xcc); //跳过序列号命令
tmpwritebyte(0x44); //发送温度转换命令
}
int tmp() //获得温度
{
float tt;uchar a,b;
dsreset();
{
P2=0; //LED段选,共阴极 送1点亮某段
单片机温度采集课程设计
单片机温度采集课程设计一、课程目标知识目标:1. 学生能够理解单片机的基本原理,掌握温度传感器与单片机的连接方式。
2. 学生能够掌握温度采集程序的设计方法,理解相关算法和数据处理过程。
3. 学生了解温度传感器的工作原理,掌握不同类型温度传感器的特点和应用场景。
技能目标:1. 学生能够独立完成温度传感器与单片机的硬件连接,进行简单的电路搭建。
2. 学生能够编写并调试温度采集程序,实现对环境温度的实时监测。
3. 学生能够分析温度采集数据,解决实际问题,提高动手实践能力。
情感态度价值观目标:1. 培养学生对单片机及传感器技术的兴趣,激发学生探索精神和创新意识。
2. 培养学生良好的团队合作精神,学会倾听、交流、协作,提高沟通能力。
3. 培养学生关注现实问题,认识到科技在生活中的重要作用,树立正确的价值观。
课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握单片机温度采集的基本知识和技能。
学生特点:学生具备一定的单片机基础知识和编程能力,对传感器技术有一定了解,但实践经验不足。
教学要求:注重理论与实践相结合,充分调动学生的主观能动性,引导学生主动探究,培养学生的动手能力和创新能力。
在教学过程中,将课程目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. 理论知识:- 单片机原理与结构:介绍单片机的组成、工作原理及性能指标。
- 温度传感器原理:讲解温度传感器的种类、原理及性能参数。
- 程序设计基础:回顾C语言编程基础,强调在单片机编程中的应用。
2. 实践操作:- 硬件连接:指导学生完成温度传感器与单片机的硬件连接,搭建电路。
- 程序编写与调试:教授温度采集程序编写方法,指导学生进行程序调试。
- 数据分析与处理:教授温度数据采集、处理与分析方法,培养学生解决实际问题的能力。
3. 教学安排与进度:- 第一周:回顾单片机原理与结构,介绍温度传感器原理。
- 第二周:讲解程序设计基础,进行C语言编程训练。
基于单片机的多路温度采集控制系统的设计
基于单片机的多路温度采集控制系统的设计一、系统设计思路1、系统架构:本系统的所有模块分为两个主要的部分:单片机部分和PC部分。
单片机部分是整个温度控制系统的中心模组,它负责多路温度传感器的信号采集、温度计算和显示,还有一些辅助操作,如温度上下限报警等;PC部分主要实现数据采集、分析、处理、显示等功能,与单片机的交互可通过RS485、USB等接口进行。
2、硬件设计:本系统设计确定采用AT89C52单片机作为系统的处理核心,在系统中应用TLC1543数据采集芯片,采用ADC转换器将多个温度传感器的数据采集,使系统实现多路温度检测同时显示.另外,为了实现数据采集记录,系统可以选用32K字节外部存储封装。
二、系统总控程序设计系统总计程序采用C语言进行编写,根据实际情况,主要分为以下几个主要的模块:(1)初始化模块:初始化包括外设初始化、中断处理程序初始化、定时器初始化、变量初始化等功能。
(2)温度采集模块:主要对多路温度传感器的采集、计算并存储等操作,还可以实现温度的报警功能。
(3)录波模块:提供数据的实时采集、数据的存取、数据的滤波处理等功能。
(4)通信模块:主要是用于实现数据透传,采用RS485接口与PC端的上位机联网,可实现远程调试、远程控制等功能。
(5)用户界面模块:实现数据显示功能,可以根据用户的要求显示多路温度传感器检测到的数据。
三、实验检验(1)检查系统硬件的安装是否良好;(2)采用实测温度值与系统运行的实测温度值进行比对;(3)做出多路温度信号的对比,以确定系统读取的数据是否准确;(4)检查温度报警功能是否可以正常使用,也可以调整报警范围,试验报警功能是否可靠;(5)进行通信数据采集的联网检测,确保上位机和系统可以进行实时、准确的通信。
基于51单片机——Ds18B20温度采集,LCD显示汇编程序(附带proteus仿真图)
TEMP_ZH EQU 24H ;实测温度值存放单元TEMPL EQU 25HTEMPH EQU 26HTEMP_TH EQU 27H ;高温报警值存放单元TEMP_TL EQU 28H ;低温报警值存放单元TEMPHC EQU 29H ;正、负温度值标记TEMPLC EQU 2AHTEMPFC EQU 2BHK1 EQU P1.4 ;查询按键K2 EQU P1.5 ;设置/调整键K3 EQU P1.6 ;调整键K4 EQU P1.7 ;确定键BEEP EQU P3.7 ;蜂鸣器RELAY EQU P1.3 ;指示灯LCD_X EQU 2FH ;LCD 字符显示位置LCD_RS EQU P2.0 ;LCD 寄存器选择信号 LCD_RW EQU P2.1 ;LCD 读写信号LCD_EN EQU P2.2 ;LCD 允许信号FLAG1 EQU 20H.0 ;DS18B20是否存在标志 KEY_UD EQU 20H.1 ;设定按键的增、减标志 DQ EQU P3.3 ;DS18B20数据信号ORG 0000HLJMP MAINORG 0030HMAIN: MOV SP,#60HMOV A,#00HMOV R0,#20H ;将20H~2FH 单元清零MOV R1,#10HCLEAR: MOV @R0,AINC R0DJNZ R1,CLEARLCALL SET_LCDLCALL RE_18B20START: LCALL RST ;调用18B20复位子程序JNB FLAG1,START1 ;DS1820不存在LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序MOV TEMP_TH,#055H ;设置TH初值85度MOV TEMP_TL,#019H ;设置TL初值25度LCALL RE_18B20A ;调用暂存器操作子程序LCALL WRITE_E2 ;写入DS18B20LCALL TEMP_BJ ;显示温度标记JMP START2START1: LCALL MENU_ERROR ;调用显示出错信息子程序 LCALL TEMP_BJ ;显示温度标记SJMP $START2: LCALL RST ;调用DS18B20复位子程序JNB FLAG1,START1 ;DS18B20不存在MOV A,#0CCH ;跳过ROM匹配命令LCALL WRITEMOV A,#44H ;温度转换命令LCALL WRITELCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEMOV A,#0BEH ;读温度命令LCALL WRITELCALL READ ;调用DS18B20数据读取操作子程序LCALL CONVTEMP ;调用温度数据BCD 码处理子程序LCALL DISPBCD ;调用温度数据显示子程序LCALL CONV ;调用LCD显示处理子程序LCALL TEMP_COMP ;调用实测温度值与设定温度值比较子程序LCALL PROC_KEY ;调用键扫描子程序SJMP START2 ;循环;*************************** 键扫描子程序*****************************PROC_KEY:JB K1,PROC_K1LCALL BEEP_BLJNB K1,$MOV DPTR,#M_ALAX1MOV A,#1LCALL LCD_PRINTLCALL LOOK_ALARMJB K3,$LCALL BEEP_BLJMP PROC_K2PROC_K1: JB K2,PROC_ENDLCALL BEEP_BLJNB K2,$MOV DPTR,#RST_A1MOV A,#1LCALL LCD_PRINTLCALL SET_ALARMLCALL RE_18B20 ;将设定的TH,TL值写入DS18B20LCALL WRITE_E2PROC_K2: LCALL MENU_OKLCALL TEMP_BJPROC_END:RET;*************************** 设定温度报警值TH、TL ***************************SET_ALARM:LCALL LOOK_ALARMAS0: JB K1,AS00LCALL BEEP_BLJNB K1,$CPL 20H.1 ;UP/DOWN 标记AS00: JB 20H.1,ASZ01 ;20H.1=1,增加JMP ASJ01 ;20H.1=0,减小ASZ01: JB K2,ASZ02 ;TH值调整(增加)LCALL BEEP_BLINC TEMP_THMOV A,TEMP_THCJNE A,#120,ASZ011MOV TEMP_TH,#0ASZ011: LCALL LOOK_ALARMLCALL DELAYJMP ASZ01ASZ02: JB K3,ASZ03 ;TL值调整(增加) LCALL BEEP_BLINC TEMP_TLMOV A,TEMP_TLCJNE A,#99,ASZ021MOV TEMP_TL,#00HASZ021: LCALL LOOK_ALARMMOV R5,#10LCALL DELAYJMP ASZ02ASZ03: JB K4,AS0 ;确定调整LCALL BEEP_BLJNB K4,$RETASJ01: JB K2,ASJ02 ;TH值调整(减少) LCALL BEEP_BLDEC TEMP_THMOV A,TEMP_THCJNE A,#0FFH,ASJ011ASJ011: LCALL LOOK_ALARMMOV R5,#10LCALL DELAYJMP AS0ASJ02: JB K3,ASJ03 ;TL值调整(减少)LCALL BEEP_BLDEC TEMP_TLMOV A,TEMP_TLCJNE A,#0FFH,ASJ021JMP ASJ022ASJ021: LCALL LOOK_ALARM ;MOV R5,#10LCALL DELAYJMP AS0ASJ022: CPL 20H.1JMP ASZ01ASJ03: JMP ASZ03RETRST_A1: DB " SET ALERT CODE " ,0;*********************** 实测温度值与设定温度值比较子程序**********************TEMP_COMP:MOV A,TEMP_THSUBB A,TEMP_ZH ;减数>被减数,则JC CHULI1 ;借位标志位C=1,转 MOV A,TEMPFCCJNE A,#0BH,COMPSJMP CHULI2COMP: MOV A,TEMP_ZHSUBB A,TEMP_TL ;减数>被减数,则JC CHULI2 ;借位标志位C=1,转MOV DPTR,#BJ5LCALL TEMP_BJ3CLR RELAY ;点亮指示灯RETCHULI1: MOV DPTR,#BJ3LCALL TEMP_BJ3SETB RELAY ;熄灭指示灯LCALL BEEP_BL ;蜂鸣器响RETCHULI2: MOV DPTR,#BJ4LCALL TEMP_BJ3SETB RELAY ;熄灭指示灯LCALL BEEP_BL ;蜂鸣器响RET;-----------------------------------------TEMP_BJ3: MOV A,#0CEHLCALL WCOMMOV R1,#0MOV R0,#2BBJJ3: MOV A,R1MOVC A,@A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ3RETBJ3: DB ">H"BJ4: DB "<L"BJ5: DB " !";;**************************** 显示温度标记子程序***************************TEMP_BJ: MOV A,#0CBHLCALL WCOMMOV DPTR,#BJ1 ;指针指到显示消息MOV R1,#0MOV R0,#2BBJJ1: MOV A,R1MOVC A,@A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ1RETBJ1: DB 00H,"C";******************************** 显示正确信息子程序***************************MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_OK2 ;指针指到显示消息MOV A,#2 ;显示在第一行LCALL LCD_PRINTRETM_OK1: DB " DS18B20 OK ",0M_OK2: DB " TEMP: ",0;******************************** 显示出错信息子程序***************************MENU_ERROR:MOV DPTR,#M_ERROR1 ;指针指到显示消息MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_ERROR2 ;指针指到显示消息1MOV A,#2 ;显示在第一行LCALL LCD_PRINTRETM_ERROR1: DB " DS18B20 ERROR ",0M_ERROR2: DB " TEMP: ---- ",0;****************************DS18B20复位子程序*****************************RST: SETB DQNOPCLR DQMOV R0,#6BH ;主机发出延时复位低脉冲MOV R1,#04HTSR1: DJNZ R0,$MOV R0,#6BHDJNZ R1,TSR1SETB DQ ;拉高数据线NOPNOPNOPMOV R0,#32HTSR2: JNB DQ,TSR3 ;等待DS18B20回应DJNZ R0,TSR2JMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置1标志位,表示DS1820存在JMP TSR5TSR4: CLR FLAG1 ; 清0标志位,表示DS1820不存在 JMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,$ ; 时序要求延时一段时间TSR7: SETB DQRET;************************ DS18B20暂存器操作子程序***************************RE_18B20:JB FLAG1,RE_18B20ARETRE_18B20A:LCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEWR_SCRAPD:MOV A,#4EH ;写暂器LCALL WRITEMOV A,TEMP_TH ;TH(报警上限)LCALL WRITEMOV A,TEMP_TL ;TL(报警下限)LCALL WRITEMOV A,#7FH ;12位精度LCALL WRITERET;************************ 复制暂存器子程序*******************************WRITE_E2:LCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEMOV A,#48H ;把暂存器里的温度报警值拷贝到EEROMLCALL WRITERET;*********************** 重读EEROM子程序********************************READ_E2:LCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEMOV A,#0B8H ;把EEROM里的温度报警值拷贝回暂存器LCALL WRITERET;************************ 将自定义字符写入LCD的CGRAM中*********************STORE_DATA:MOV A,#40HLCALL WCOMMOV R2,#08HMOV DPTR,#D_DATAMOV R3,#00HS_DATA: MOV A,R3MOVC A,@A+DPTRLCALL WDATA ;写入数据INC R3DJNZ R2,S_DATARETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;*********************** DS18B20数据写入操作子程序************************WRITE: MOV R2,#8 ;一共8位数据CLR CWR1: CLR DQ ;开始写入DS18B20总线要处于复位(低)状态MOV R3,#07DJNZ R3,$ ;总线复位保持16微妙以上RRC A ;把一个字节DATA 分成8个BIT 环移给CMOV DQ,C ;写入一位MOV R3,#3CHDJNZ R3,$ ;等待100微妙SETB DQ ;重新释放总线NOPDJNZ R2,WR1 ;写入下一位SETB DQRET;********************** DS18B20数据读取操作子程序**************************READ: MOV R4,#4 ;将温度低位、高位、TH、TL从DS18B20中读出MOV R1,#TEMPL ;存入25H、26H、27H、28H单元RE00: MOV R2,#8RE01: CLR CYSETB DQNOPNOPCLR DQ ;读前总线保持为低NOPNOPNOPSETB DQ ;开始读总线释放MOV R3,#09 ;延时18微妙DJNZ R3,$MOV C,DQ ;从DS18B20总线读得一位MOV R3,#3CHDJNZ R3,$ ;等待100微妙RRC A ;把读得的位值环移给ADJNZ R2,RE01 ;读下一位MOV @R1,AINC R1DJNZ R4,RE00RET;************************ 温度值BCD 码处理子程序*************************CONVTEMP: MOV A,TEMPH ;判温度是否零下ANL A,#08HJZ TEMPC1 ;温度零上转CLR CMOV A,TEMPL ;二进制数求补(双字节)CPL A ;取反加1ADD A,#01HMOV TEMPL,AMOV A,TEMPHCPL AADDC A,#00HMOV TEMPH,AMOV TEMPHC,#0BH ;负温度标志MOV TEMPFC,#0BHSJMP TEMPC11TEMPC1: MOV TEMPHC,#0AH ;正温度标志MOV TEMPFC,#0AHTEMPC11: MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FH ;乘0.0625MOV DPTR,#TEMPDOTTABMOVC A,@A+DPTRMOV TEMPLC,A ;TEMPLC LOW=小数部分 BCDMOV A,TEMPL ;整数部分ANL A,#0F0H ;取出高四位SWAP AMOV TEMPL,AMOV A,TEMPH ;取出低四位ANL A,#0FHSWAP AORL A,TEMPL ;重新组合MOV TEMP_ZH,ALCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHC ;TEMPHC LOW = 十位数BCDMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP A ;TEMPLC HI = 个位数BCDORL A,TEMPLCMOV TEMPLC,AMOV A,R4JZ TEMPC12ANL A,#0FHSWAP AMOV R4,AMOV A,TEMPHC ;TEMPHC HI = 百位数BCDANL A,#0FHORL A,R4MOV TEMPHC,ATEMPC12: RET;************************ 二-十进制转换子程序*****************************HEX2BCD1: MOV B,#064HDIV ABMOV R4,AMOV A,#0AHXCH A,BDIV ABSWAP AORL A,BRETTEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小数部分码表DB 05H,05H,06H,06H,07H,08H,08H,09H;********************** 查询温度报警值子程序***************************LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指针指到显示信息区MOV A,#2 ;显示在第二行LCALL LCD_PRINTMOV A,#0C6HLCALL TEMP_BJ1MOV A,TEMP_TH ;加载TH数据MOV LCD_X,#3 ;设置显示位置LCALL SHOW_DIG2H ;显示数据MOV A,#0CEHLCALL TEMP_BJ1MOV A,TEMP_TL ;加载TL数据MOV LCD_X,#12 ;设置显示位置LCALL SHOW_DIG2L ;显示数据RETM_ALAX1: DB " LOOK ALERT CODE",0M_ALAX2: DB "TH: TL: ",0TEMP_BJ1: LCALL WCOMMOV DPTR,#BJ2 ;指针指到显示信息区 MOV R1,#0MOV R0,#2BBJJ2: MOV A,R1MOVC A,@A+DPTRLCALL WDATADJNZ R0,BBJJ2RETBJ2: DB 00H,"C";************************** LCD显示子程序**********************************SHOW_DIG2H: MOV B,#100DIV ABADD A,#30HPUSH BMOV B,LCD_XLCALL LCDP2POP BMOV A,#0AHXCH A,BDIV ABADD A,#30HINC LCD_XPUSH BMOV B,LCD_XLCALL LCDP2INC LCD_XMOV A,BMOV B,LCD_XADD A,#30HLCALL LCDP2RETSHOW_DIG2L: MOV B,#100DIV ABMOV A,#0AHXCH A,BDIV ABADD A,#30HPUSH BMOV B,LCD_XLCALL LCDP2POP BINC LCD_XMOV A,BMOV B,LCD_XADD A,#30HLCALL LCDP2RET;************************ 显示区BCD 码温度值刷新子程序**********************DISPBCD: MOV A,TEMPLCANL A,#0FHMOV 70H,A ;小数位MOV A,TEMPLCSWAP AANL A,#0FHMOV 71H,A ;个位MOV A,TEMPHCANL A,#0FHMOV 72H,A ;十位MOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,A ;百位DISPBCD2: RET;*************************** LCD 显示数据处理子程序*************************CONV: MOV A,73H ;加载百位数据MOV LCD_X,#6 ;设置位置CJNE A,#1,CONV1JMP CONV2CONV1: CJNE A,#0BH,CONV11MOV A,#"-" ;"-"号显示JMP CONV111CONV11: MOV A,#" " ;"+"号不显示CONV111: MOV B,LCD_XLCALL LCDP2JMP CONV3CONV2: LCALL SHOW_DIG2 ;显示数据CONV3: INC LCD_XMOV A,72H ;十位LCALL SHOW_DIG2INC LCD_XMOV A,71H ;个位LCALL SHOW_DIG2INC LCD_XMOV A,#'.'MOV B,LCD_XLCALL LCDP2MOV A,70H ;加载小数点位INC LCD_X ;设置显示位置LCALL SHOW_DIG2 ;显示数据RET;*************************** 第二行显示数字子程序*************************SHOW_DIG2:ADD A,#30HMOV B,LCD_XLCALL LCDP2RET;*************************** 第二行显示数字子程序*************************LCDP2: PUSH ACCMOV A,B ;设置显示地址ADD A,#0C0H ;设置LCD的第二行地址LCALL WCOM ;写入命令POP ACC ;由堆栈取出ALCALL WDATA ;写入数据RET;*************************** 对LCD 做初始化设置及测试*************************SET_LCD: CLR LCD_ENLCALL INIT_LCD ;初始化 LCDLCALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET;****************************** LCD初始化***********************************INIT_LCD: MOV A,#38H ;2行显示,字形5*7点阵LCALL WCOMLCALL DELAY1MOV A,#38HLCALL WCOMLCALL DELAY1MOV A,#38HLCALL WCOMLCALL DELAY1MOV A,#0CH ;开显示,显示光标,光标不闪烁 LCALL WCOMLCALL DELAY1MOV A,#01H ;清除 LCD 显示屏LCALL WCOMLCALL DELAY1RET;***************************** 清除LCD的第一行字符**************************CLR_LINE1:MOV A,#80H ;设置 LCD 的第一行地址LCALL WCOMMOV R0,#24 ;设置计数值C1: MOV A,#' ' ;载入空格符至LCDLCALL WDATA ;输出字符至LCDDJNZ R0,C1 ;计数结束RET;************************* LCD的第一行或第二行显示字符**********************LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行LINE1: MOV A,#80H ;设置 LCD 的第一行地址LCALL WCOM ;写入命令LCALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置 LCD 的第一行地址LCALL WCOM ;写入命令JMP FILLLINE2: MOV A,#0C0H ;设置 LCD 的第二行地址LCALL WCOM ;写入命令LCALL CLR_LINE ;清除该行字符数据MOV A,#0C0H ;设置 LCD 的第二行地址LCALL WCOMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码RETLC1: LCALL WDATA ;写入数据INC DPTR ;指针加1JMP FILL ;继续填入字符RET;*************************** 清除1行LCD 的字符****************************CLR_LINE: MOV R0,#24CL1: MOV A,#' 'LCALL WDATADJNZ R0,CL1RETDE: MOV R7,#250DJNZ R7,$RET;**************************** LCD 间接控制方式命令写入*************************WCOM: MOV P0,A ;写入命令CLR LCD_RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲 CLR LCD_RWSETB LCD_ENLCALL DELAY1CLR LCD_ENRET;**************************** LCD 间接控制方式数据写入*************************WDATA: MOV P0,A ;写入数据SETB LCD_RSCLR LCD_RWSETB LCD_ENLCALL DELCALL DERET;************************** 在LCD的第一行显示字符**************************LCDP1: PUSH ACCMOV A,B ;设置显示地址ADD A,#80H ;设置LCD的第一行地址LCALL WCOM ;写入命令POP ACC ;由堆栈取出ALCALL WDATA ;写入数据RET;****************************** 声光报警子程序*******************************BEEP_BL: MOV R6,#100BL2: LCALL DEX1CPL BEEPCPL RELAYDJNZ R6,BL2MOV R5,#10RETDEX1: MOV R7,#180DE2: NOPDJNZ R7,DE2RET;****************************** 延时子程序*******************************DELAY: MOV R6,#50DL1: MOV R7,#100DJNZ R7,$DJNZ R6,DL1DJNZ R5,DELAYRETDELAY1: MOV R6,#25 ;延时5毫秒DL2: MOV R7,#100DJNZ R7,$DJNZ R6,DL2RETEND。
单片机(基于AT89C51的温度采集与显示系统设计)
基于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。
stm32单片机读取温湿度的基本过程
stm32单片机读取温湿度的基本过程
在STM32单片机上读取温湿度值通常涉及以下基本步骤:
1.选择和配置传感器:首先,你需要选择一个合适的温湿度传感器。
常见的
选择包括SHT20、DHT11、AM2301等。
选择好传感器后,你需要将其连接到STM32的I/O口上,并配置I/O口的工作模式。
2.初始化传感器:在开始读取数据之前,需要初始化传感器。
这通常涉及发
送启动信号以启动传感器,并等待传感器响应。
3.读取传感器数据:初始化完成后,你可以从传感器读取数据。
这通常涉及
从I/O口读取一系列的字节,并按照传感器的数据格式解析这些字节以得到温度和湿度值。
4.处理数据:读取到的原始数据可能需要进一步处理,例如进行校准、转换
或滤波,才能得到更准确或更有用的信息。
5.存储或显示数据:处理完数据后,你可以将其存储在内部存储器或外部存
储器中,或者通过串口、LCD或其他显示方式显示出来。
6.循环读取:为了持续监控环境,你可能需要在程序中设置一个循环,定期
读取并处理温湿度数据。
具体的代码实现会因所选的传感器和STM32型号而有所不同。
你可以查找相关的硬件库或SDK来找到具体的实现示例和详细说明。
例如,如果你使用的是STM32 HAL库,那么可能需要查看相关的库文档或示例代码来了解如何正确地初始化和读取传感器数据。
用单片机制作温度计
引言:单片机作为一种集成电路,可以在温度检测和测量方面提供精确的结果。
在本文中,我们将探讨如何使用单片机制作一个温度计,并进一步深入了解其工作原理和应用。
概述:温度计是测量环境温度的一种常用工具。
传统的温度计通常使用热敏电阻、热电偶或半导体传感器等元件来实现温度测量。
而用单片机制作的温度计具有精度高、反应迅速、可编程性强等优点,因此在许多应用领域得到了广泛的应用。
正文内容:一、单片机温度计的工作原理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医疗设备温度监测总结:本文详细介绍了使用单片机制作温度计的方法。
通过对单片机温度计的工作原理、电路设计、软件设计等方面的讲解,读者可以了解到单片机温度计的制作流程和相应的技术要点。
基于51单片机DS18B20温度采集器详解
一核心器件的基本构成及特性1.1 AT89S51功能特性89C51是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51基础型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能。
89C51内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,89C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU 而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
89C51有PDIP(40pin)和PLCC(44pin)两种封装形式。
1.2 AT89S51管脚介绍AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、并行I/O口(4个8位I/O口)、串行口、定时器/计数器、中断系统及特殊功能寄存器。
它们都是通过片内单一总线连接而成,其基本结构依旧是微处理器(CPU)加上外围芯片的传统结构模式。
但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式,以实现不同的功能。
AT89C51单片机如图所示。
1.1.1引脚功能介绍Vcc(40引脚):接+5V电源。
Vss(20引脚):接地。
XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。
XTAL2(18引脚):片内震荡器反相放大器的输出端。
RST:复位引脚,高电平有效。
cc2530单片机多点温度采集实验设计
cc2530单片机多点温度采集实验设计王海珍;廉佐政;滕艳平【摘要】多点温度采集有利于分析整个设备或系统的温度,改善被控温度的技术指标,提高产品的质量和数量,因而,应用日益广泛,又由于应用cc2530单片机控制的采集系统可以克服复杂的布线问题,因此,在单片机授课过程中,提出了一种多点温度采集实验设计方案,首先以cc2530单片机和DS18B20温度传感器为核心进行软硬件设计,即3片DS18B20温度传感器通过单总线与1片cc2530相连,然后,采用模块化思想进行软件设计,最后采用IAR EW8051集成开发环境进行软件程序的调试、运行.结果显示,该实验实现了多点温度采集的功能.该实验方案不仅节约了硬件成本、程序运行稳定,而且提高了学生运用相关理论知识解决应用问题的能力.【期刊名称】《实验室研究与探索》【年(卷),期】2018(037)012【总页数】5页(P98-101,106)【关键词】多点温度采集;cc2530单片机;单总线【作者】王海珍;廉佐政;滕艳平【作者单位】齐齐哈尔大学计算机与控制工程学院,黑龙江齐齐哈尔161006;齐齐哈尔大学计算机与控制工程学院,黑龙江齐齐哈尔161006;齐齐哈尔大学计算机与控制工程学院,黑龙江齐齐哈尔161006【正文语种】中文【中图分类】TP391.80 引言单片机应用广泛,各种智能IC卡、轿车上的安全保障系统、录像机、摄像机、程控玩具、全自动洗衣机、电子宠物等都使用了单片机[1-2]。
近年来,伴随物联网产业应用范围的扩大,要求单片机的作用范围也越来越大,在物联网系统中主要使用cc2530单片机设备,基于cc2530的单片机应用成为使用、管理和设计物联网系统的必备知识。
因此,我院的网络工程专业的单片机课程主要讲授cc2530单片机开发与应用的相关知识,授课过程中,考虑到温度是一种重要的环境显示参数,与人们的生活环境息息相关[3],所以在讲授了ADC和DS18B20之后,设计了该温度采集实验。
单片机温控程序
单片机温控程序单片机温控程序是一种用于控制温度的软件程序,它通过对温度传感器的读取和对加热或冷却装置的控制,实现对温度的精确调控。
下面我将以人类的视角来描述一下单片机温控程序的工作原理和应用场景。
让我们想象一下一个寒冷的冬天。
当我们进入室内时,我们希望室内的温度能够舒适,不过于寒冷也不过于炎热。
这时,单片机温控程序就能发挥作用了。
单片机温控程序中的第一步是读取室内的温度。
单片机内部有一个温度传感器,可以实时地感知到室内的温度。
通过读取传感器的数值,单片机可以获得当前的室温。
接下来,单片机将读取到的温度值与设定的目标温度进行比较。
如果当前温度高于目标温度,说明室内温度过高,需要降温。
此时,单片机会发送控制信号给加热装置,让其停止加热。
如果当前温度低于目标温度,说明室内温度过低,需要加热。
单片机会发送控制信号给加热装置,让其开始加热。
通过不断地读取温度、比较温度和发送控制信号的过程,单片机温控程序可以实现对室内温度的精确调控。
当室内温度接近目标温度时,单片机会减小控制信号的幅度,以避免温度的过度波动。
当室内温度达到目标温度时,单片机会停止发送控制信号,维持室内温度的稳定。
单片机温控程序广泛应用于各种场景。
例如,它可以用于家庭的中央空调系统,保持室内温度的舒适;它也可以用于电子设备的散热系统,防止设备过热;此外,它还可以用于实验室的恒温箱、温室的温度控制等等。
通过单片机温控程序,我们可以实现对温度的精确调控,提高室内的舒适度,同时还可以节省能源,减少对环境的影响。
无论是在家庭生活中,还是在工业生产中,单片机温控程序都发挥着重要的作用,使我们的生活更加便利和舒适。
基于单片机的温度控制系统设计
基于单片机的温度控制系统设计温度控制系统是现代生活中不可或缺的一部分,常见于家庭的的空调、电饭煲、烤箱等家用电器,以及工业生产中的各种自动化设备。
本文基于单片机设计针对室内温度控制系统的实现方法进行说明,包括温度采集、温度控制器的实现和人机交互等方面。
一、温度采集温度采集是温度控制系统的核心部分。
目前比较常见的温度采集器主要有热电偶、热敏电阻和半导体温度传感器。
在本文中我们以半导体温度传感器为例进行说明。
常见的半导体温度传感器有DS18B20、LM35等,本次实验中采用DS18B20进行温度采集。
DS18B20是一种数字温度传感器,可以直接与单片机通信,通常使用仅三根导线连接。
其中VCC为控制器的电源正极,GND为电源负极,DATA为数据传输引脚。
DS18B20通过快速菲涅耳射线(FSR)读取芯片内部的温度数据并将其转换为数字信号。
传感器能够感知的温度范围通常为-55℃至125℃,精度通常为±0.5℃。
为了方便使用,DS18B20可以通过单片机内部的1-Wire总线进行控制和数据传输。
具体实现方法如下:1.首先需要引入相关库文件,如:#include <OneWire.h> //引用1-Wire库#include <DallasTemperature.h> //引用温度传感器库2.创建实例对象,其中参数10代表连接传感器的数字I/O引脚:OneWire oneWire(10); //实例化一个1-Wire示例DallasTemperature sensors(&oneWire); //实例化一个显示温度传感器示例3.在setup中初始化模块:sensors.begin(); // 初始化DS18B204.在主循环中,读取传感器数据并将温度值输出到串口监视器:sensors.requestTemperatures(); //请求温度值float tempC = sensors.getTempCByIndex(0); // 读取温度值Serial.println(tempC); //输出温度值二、温度控制器的实现温度控制器是本次实验的关键部件,主要实现对温度的控制和调节,其基本原理是根据温度变化情况来控制输出电压或模拟脚电平,驱动继电器控制电器设备工作。
51单片机热敏电阻测温程序
//本程序是通过热敏电阻测温度(30c—50c),采用六位串行数码管显示,前三位显示ds18b20测得数据,后三位是热敏电阻测得数据#include<reg51.h〉#include<math。
h>#include〈intrins。
h>#define uchar unsigned char#define uint unsigned intuchar smg[]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x09};uchar b,d;uint shuju;int a,temp;sbit start=P2^7;sbit ale=P2^7;sbit addc=P2^6;sbit addb=P2^5;sbit adda=P2^4;sbit eoc=P2^3;sbit oe=P2^2;sbit clk=P3^2;//0809时钟脚sbit dat=P3^0; //串行数码管数据端sbit clock=P3^1; //串行数码管时钟端sbit DQ=P2^0;/******************delay**************************/void delay(uint x){while(x-—);}void delay1(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j〈110;j++);}/*******************ds18b20***********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于 480usDQ = 1;//拉高总线delay(14);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay(20);}/******************************从18B20中读一个字节****************************/uchar Read_OneChar(void){uchar i = 0;uchar dat = 0;for (i=8;i〉0;i-—){DQ = 0; // 给脉冲信号dat >〉= 1;DQ = 1; // 给脉冲信号if(DQ)dat |= 0x80;delay(8);}return(dat);}/******************************向18B20中写一个字节****************************/void Write_OneChar(uchar dat){uchar i=0;for (i=8; i〉0; i--){DQ = 0;DQ = dat&0x01;delay(10);DQ = 1;dat >>= 1;}delay(8);}/***********************************读取温度**********************************/uchar Read_Temperature(void){uchar i = 0,t = 0;Init_DS18B20();Write_OneChar(0xcc); // 跳过读序号列号的操作Write_OneChar(0x44);// 启动温度转换Init_DS18B20();Write_OneChar(0xcc);//跳过读序号列号的操作Write_OneChar(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度i = Read_OneChar(); //读取温度值低位t = Read_OneChar();//读取温度值高位b = t;d = 0x88;/* if(b&0x80==0x80) //显示负数{t = ~t;// t += 1;i = ~i;i += 1;d = 0xbf;}*/a = i & 0x0f;i = i >〉 4; //低位右移4位,舍弃小数部分t = t <〈 4; //高位左移4位,舍弃符号位t = t | i;if(t〉=100)d=smg[t/100%10];return(t);}/******************串行发送显示******************/void send(uchar x){uchar temp,i;temp=x;for(i=0;i<8;i++){temp=temp<<1;clock=0;dat=CY;clock=1;}}void send1(uchar x){uchar temp,i;temp=x&0xf7;for(i=0;i<8;i++){temp=temp〈<1;clock=0;dat=CY;clock=1;}}/******************adc0809***************************/ void adc0809(){start=0;start=1;_nop_();start=0;while(eoc==0);oe=1;shuju=P0;oe=0;shuju=shuju*1.96079;if(shuju<=445&&shuju>=437)shuju=((445—shuju)/2+30)*10;else if(shuju〈437&&shuju>=427) //if语句主要是通过采集30—50c之间的数据,看出热敏电阻两端电压与温度之间关系,shuju=((445—shuju)/2+29)*10; //我把这些数据通过微分方法分成四段,然后在每段近视看成线性关系,最后算出温度else if(shuju〈427&&shuju〉=317)shuju=((445—shuju)/2+28)*10;else if(shuju<417&&shuju〉=407)shuju=((445—shuju)/2+27)*10;else if(shuju<407&&shuju〉=397)shuju=((445—shuju)/2+25)*10;else if(shuju<497&&shuju>=387)shuju=((445—shuju)/2+23)*10;send(smg[shuju%10]);send1(smg[shuju/10%10]);send(smg[shuju/100%10]);send(smg[a*10/16]);send1(smg[temp%10]);send(smg[temp/10%10]);delay1(1000);}/******************中断***************************/void timer_init(){TMOD=0x01;TH0=(65536-200)/256;TL0=(65536—200)%256;TR0=1;ET0=1;EA=1;}void timer() interrupt 1{TR0=0;TH0=(65536-200)/256;TL0=(65536-200)%256;clk=~clk;TR0=1;}/******************main****************************/void main(){addc=0;addb=0;adda=0;// ale=1;timer_init();while(1){temp=Read_Temperature();adc0809();}}。
单片机ADC采集NTC温度
单⽚机ADC采集NTC温度通常会将100kNTC串联⼀个100K电阻⽤于测量温度,温度变化时NTC阻值也发⽣变化,反应到ADC上就是电压变化,只需⽤ADC时时的采样NTC上的电压计算出电阻,即可根据阻值表计算出NTC的温度。
项⽬合作,吹⽜扯淡,交朋友请联系:186********static const char adclab[111][2] = {{0x03,0xbf},{0x03,0xbc},{0x03,0xb9},{0x03,0xb6},{0x03,0xb2},{0x03,0xab},{0x03,0xa7},{0x03,0xa3},{0x03,0x9e},{0x03,0x9a},{0x03,0x96},{0x03,0x91},{0x03,0x8c},{0x03,0x87},{0x03,0x82},{0x03,0x7d},{0x03,0x78},{0x03,0x72},{0x03,0x6d},{0x03,0x67},{0x03,0x61},{0x03,0x5a},{0x03,0x54},{0x03,0x4e},{0x03,0x47},{0x03,0x41},{0x03,0x3a},{0x03,0x33},{0x03,0x2c},{0x03,0x24},{0x03,0x1d},{0x03,0x15},{0x03,0x0e},{0x03,0x06},{0x02,0xfe},{0x02,0xf6},{0x02,0xee},{0x02,0xe5},{0x02,0xdd},{0x02,0xd4},{0x02,0xcc},{0x02,0xc3},{0x02,0xba},{0x02,0xb1},{0x02,0xa8},{0x02,0x9f},{0x02,0x96},{0x02,0x8d},{0x02,0x84},{0x02,0x7b},{0x02,0x72},{0x02,0x68},{0x02,0x5f},{0x02,0x56},{0x02,0x4c},{0x02,0x43},{0x02,0x3a},{0x02,0x30},{0x02,0x27},{0x02,0x1e},{0x02,0x15},{0x02,0x0b},{0x02,0x02},{0x01,0xf9},{0x01,0xf0},{0x01,0xf0},{0x01,0xe7},{0x01,0xde},{0x01,0xd5},{0x01,0xcc},{0x01,0xc3},{0x01,0xbb},{0x01,0xb2},{0x01,0xaa},{0x01,0xa1},{0x01,0x99},{0x01,0x91},{0x01,0x89},{0x01,0x81},{0x01,0x79},{0x01,0x71},{0x01,0x69},{0x01,0x61},{0x01,0x5a},{0x01,0x53},{0x01,0x4b},{0x01,0x44},{0x01,0x3d},{0x01,0x36},{0x01,0x30},{0x01,0x29},{0x01,0x22},{0x01,0x1c},{0x01,0x16},{0x01,0x0f},{0x01,0x09},{0x01,0x03},{0x00,0xfd},{0x00,0xf8},{0x00,0xf2},{0x00,0xed},{0x00,0xe7},{0x00,0xe2},{0x00,0xdd},{0x00,0xd8},{0x00,0xd3},{0x00,0xce},{0x00,0xc9},{0x00,0xc4},{0x00,0xc0},{0x00,0xba},};unsigned char culTemp(unsigned int adTmp){unsigned char numLab = 0;unsigned char tempVal = 0;unsigned int cntlab = 0;unsigned int minlab = 0;unsigned int maxlab = 0;minlab = (unsigned int)((adclab[0][0]<<8)|adclab[0][1]);cntlab = minlab;maxlab = (unsigned int)((adclab[100][0]<<8)|adclab[100][1]);if(minlab < adTmp){tempVal = 0;}else if(maxlab > adTmp){tempVal = 100;}else{while( cntlab >= adTmp){if(numLab < 101){numLab++;cntlab = (unsigned int)((adclab[numLab][0]<<8)|adclab[numLab][1]);}else{break;}}if(numLab == 101){tempVal = 100;}else{tempVal = numLab;}}return tempVal;}if(swAinBuz == 0){if(adcStp == 0){ADMD = 0x90 | C_ADC_PA1; // Select AIN0(PA0) pad as ADC input//ADMD = 0x90 | C_ADC_PA0;ADMDbits.START = 1; // Start a ADC conversion sessionwhile(ADMDbits.EOC);adcStp = 1;}else if(adcStp == 1){if(ADMDbits.EOC == 1){adcStp = 0;adcCnt++;R_AIN0_DATA_LB += ( 0x0F & ADR);R_AIN0_DATA += ADD;if(adcCnt == 8){adcCnt = 0;R_AIN0_DATA <<= 4; // R_AIN0_DATA shift left 4 bit//R_AIN0_DATA_LB &= 0xF0; // Only get Bit7~4R_AIN0_DATA += R_AIN0_DATA_LB; // R_AIN0_DATA + R_AIN0_DATA_LB R_AIN0_DATA >>=5; // R_AIN0_DATA divided 8adcVal = R_AIN0_DATA; // output val 0~1024R_AIN0_DATA = 0;R_AIN0_DATA_LB = 0;if(buzEn){swAinBuz = 1;PACON = 0x00;IOSTA &= 0xfd;}}}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/******************************************************************/
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sbit DQ=P1^3;//ds18b20端口
sfr dataled=0x80;//显示数据端口
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);
/******************************************************************/
DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int;
/******************************************************************/
/*函数声明*/
/******************************************************************/
void delay1(uchar MS);
unsigned int ReadTemperature(void);
void Init_DS18B20(void);
/*主函数*/
/******************************************************************/
main()
{
unsigned char TempH,TempL;
TMOD|=0x01;//定时器设置
TH0=0xef;
TL0=0xf0;
IE=0x82;
str[4]=tab[TempL];
if(flag_get==1) //定时读取当前温度
{
temp=ReadTemperature();
if(temp&0x8000)
{
str[0]=0x40;//负号标志
temp=~temp; //取反加1
temp +=1;
}
else
str[0]=0;
TempH=temp>>4;
/******************************************************************/
/*全局变量*/
/******************************************************************/
uint temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//7段数码管段码表共阳
uchar str[6];
/******************************************************************/
TR0=1;
P2=0x00;
count=0;
while(1)
{
str[5]=0x39; //显示C符号
str[1]=tab[TempH/100]; //十位温度
str[2]=tab[(TempH%100)/10]; //十位温度
str[3
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
flag_get=0;
}
}
}
/******************************************************************/
/*定时器中断*/
/******************************************************************/
单片机温度采集程序
用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
/*-----------------------------------------------
名称:18B20温度传感器
日期:2009.5
修改:无
内容:18B20单线温度检测的应用样例程序,请将18b20插紧,
然后在数码管可以显示XX.XC,C表示摄氏度,如显示25.3C表示当前温度25.3度
------------------------------------------------*/
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
本程序实现温度的采集并且实时在数码管上显示出来。
具体程序如下: