基于单片机的智能温度检测器设计Word格式.docx
《基于单片机的智能温度检测器设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的智能温度检测器设计Word格式.docx(40页珍藏版)》请在冰豆网上搜索。
![基于单片机的智能温度检测器设计Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/6/edf5885c-3547-4186-93af-7420a94a96cf/edf5885c-3547-4186-93af-7420a94a96cf1.gif)
摘要
本设计研究基于单片机的智能温度检测器,旨在通过单片机及温度传感器实现自动检测报警功能。
设计中首先对其背景及意义进行叙述切入主题,然后对整个系统的硬件设计和软件设计以及软件调试设计重点分析,其中在硬件设计中还分别对其所选器件做了一个简单的叙述介绍,比如按键,蜂鸣器,LCD1602液晶,DS18B20温度传感器,AT89C51单片机等,最后再对这一设计进行一个总结。
设计中使用4个按键组成独立按键进行对温度上下限的设定,采用无源蜂鸣器作为报警装置。
整个系统使用LCD1602液晶作为显示装置,实时显示检测温度和设定的上下限值。
本系统硬件结构简单,操作灵活,以高级语言C语言开发,KEIL4程序开发软件为开发工具设计而成。
关键词:
AT89C51单片机;
温度检测器;
DS18B20;
KEIL4开发软件;
LCD1602液晶
Thedesignofintelligenttemperaturedetectorbasedonsingle-chipmicrocomputer
ABSTRACT
ThedesignofintelligenttemperaturedetectorbasedonMCU,toachieveautomaticdetectionbythemicrocontrollerandtemperaturesensoralarmfunction.Thedesignofthefirstdescribedthebackgroundandsignificanceofthesubject,thenthesystemhardwaredesignandsoftwaredesignanddebuggingsoftwaredesignfocusesontheanalysis,whichinthehardwaredesignofthedeviceareselectedtodoasimplenarrative,suchasbuttons,buzzer,LCD1602LCD,DS18B20temperaturesensor,AT89C51SCM,thenthedesignofasummary.The4keycomponentsusedinthedesignofkeyindependenttemperaturelimitsetting,usingpassivebuzzerasthealarmdevice.ThewholesystemusingLCD1602asaliquidcrystaldisplaydevice,displayreal-timetemperaturedetectionandsetlimitonthevalueof.Thehardwareofthissystemhastheadvantagesofsimplestructure,flexibleoperation,withthelanguageClanguagedevelopment,KEIL4applicationdevelopmentsoftwaredevelopmenttoolsanddesign.
KeyWords:
AT89C51microcontroller;
temperaturesensor;
KEIL4software;
LCD1602LCD
第1章绪论
1.1课题研究的背景及意义
温度是一个非常重要的物理量,无论是工业控制还是家庭等场所的测量都是有十分重要的意义。
在工业生产中,其对温度控制要求是非常严格的,尤其是对一些特殊的材料的煅烧,其温度有的在低范围,有的在高范围温度,有的需要恒定的温度。
因此需要对温度进行严格的控制,传统使用的温度检测仅仅是使用一些模拟温度器件进行检测,此温度误差是非常大的,而且在早期的显示器中都是用的是指针式显示界面,人机交互非常不方便,人们还要仔细看才知道现在温度多少,也不能实现自动报警检测和温度的设定,因此需要人们在旁边守着温度表看,如果温度高于一定的时候就不加燃料,否则继续添加燃料,此种方案是非常浪费能源的。
随着科技的不断发展,尤其是微处理器及传感器的快速发展,于是就开启了智能化的温度检测器,并且拥有一个非常好的人机交互界面,人们只需要看下液晶显示屏就知道准确温度,通过按键的操作就可以实现对温度上下限值的设置。
通过传感器精确的测温及单片机的智能控制,就可以实现温度超限报警指示,低于下限关闭报警指示。
因此极大的节约了工业劳动力及能源的消耗。
因此本设计中研究基于单片机智能温度检测器设计就非常有必要了。
1.2单片机的意义和本设计特点
在现代生活的各个领域中,单片机几乎已经完全控制了整个行业,甚至已经潜移默化的改变了人们的生活方式和生活习惯,大到航空航天领域,小到马路上各式各样的花样灯控制等等。
这无不体现单片机的智能以及重要性。
可以预见单片机今后的发展方向:
1)低功CMOS耗化;
2)微型单片化;
3)主流与多品种共存化;
4)大容量、高性能化:
以往单片机内的ROM为1KB~4KB,RAM为64~128B;
单片机又称单片微控制器,它把一个计算机系统集成到一个芯片里。
简单的来讲,就是把我们电脑主板上是由CPU处理、程序存储器、数据存储器、输入输出电路IO、显示设备等模块集成到了一块微小的芯片之内。
它体积小,价格便宜,功能丰富,调写程序便利。
因为它兼容了传统的8051系列MCS-51指令单片机,移植性能强,相对高性能的单片机来讲,它使用起来是很便利的。
4k的flash存储器,8bit的位宽处理,128的RAM。
该设计使用它可以满足我们的所有需求。
我们在这个设计中采用了51内核单片机AT89C51作为核心部件,主要起主控作用,引领整个系统的运行控制,当作控制器的核心部位。
本设计主要特点采用了数字温度传感器DS18B20进行温度的检测,通过按键设定温度上下限后即可实现自动检测报警,实现了其智能化特点。
整个系统使用的是LCD1602液晶进行显示,实时显示测试的温度及设定的上下限值,通过一个无源蜂鸣器和LED发光二极管作为系统的报警指示,当检测温度高于设定上限的时候驱动蜂鸣器报警,只有当温度低于下限值报警指示灯灭。
因此就可以组建成一个基于单片机的智能温度检测器了。
第2章硬件设计
2.1系统总设计结构图
本设计由主控芯片AT89C51单片机,晶振电路,复位电路,电源电路,DS18B20测温电路,LCD显示电路,按键电路,声光报警电路组成。
51单片机全权负责整个系统的执行控制过程。
如图1:
图2-1系统总设计图
2.2蜂鸣器、LED和按键简介
蜂鸣器可分为2种,一种是无源蜂鸣器,一种是有源蜂鸣器,此二者的区分在于,有源蜂鸣器直接给高或低电平就能驱动发声,但是无源蜂鸣器需要给他一定的脉冲触发信号才能使蜂鸣器发声,在此设计中我们使用的是无源蜂鸣器,即在控制他的时候我们必须输出一定频率的脉冲方能时此蜂鸣器发声报警。
图2-2蜂鸣器
LED是半导体二极管的一种,可以把电能转换成光能。
发光二极管与普通的二极管一样是由一个PN结组成的,也具有单向导电性。
当给二极管加上一个正向电压时,二极管导通;
反之,截止状态。
在正向电压中,从P区注入到N区的空穴和N区注入到P区的电子,在PN结附近内P区的空穴和N区的电子复合,产生辐射的荧光。
所以这样就有产生发光的电子,LED发光的原理就是这样。
按键,它是常用控制器件的一种,通常被用来对需要控制的电路开或断即接通状态或者断开状态,内部的电流是很小的,应而可以达到手动控制的作用。
在这里我们设计中使用的常用的按键,其按下后会有些许的波动,导致高低电平不稳,所以在后面的程序编写过程中需要专门用软件来消抖,一般其抖动的时间在10ms左右,如果不想再软件上做消抖处理也可以在硬件上做消抖,可以在按键那并接一个RC电路,那样就可以起到充放电延时的作用。
这样一来单片机就可以对按键按下和按键断开有一个稳定的判断识别了。
图2-3按键
2.3主控芯片AT89C51单片机的简介
它具有以下标准功能:
4k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,内置2KBEEPROM,拥有3个16位的定时器和计数器,还有外部中断2个,和全双工串行口等等。
它的最高运作频率35MHz,6T/12T可选。
其特性有:
4K字节程序存储空间;
256字节数据存储空间;
内带2K字节EEPROM存储空间;
可直接使用串口下载;
芯片参数:
1.它是51单片机的加强版,拥有2种时钟模式,一种是6个时钟机器周期的,还有一种是12个时钟机器周期的,它完全兼容传统51单片机的指令系统。
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)。
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。
4.用户应用程序空间为8K字节。
5.片上集成256字节RAM。
6.通用I/O口(32个),复位后为:
单片机拥有40个管脚,P0,P1,P2,P3各8个,还有复位1个,晶振2个,电源2个,EA一个,ALE一个。
P0口内部无上拉电阻,是漏极开路的,所以在使用P0口的时候一定要外接上拉电阻。
其他3个口都有内部的上拉电阻,所以可以不用外接。
7.单片机可以直接通过P30P31RXD和TXD串口管脚下载程序。
8.具有EEPROM功能。
9.该单片机拥有3个定时器和计数器其为16位的。
即定时器T0、T1、T2。
10.有2个外部中断,可以通过下降沿或者低电平触发中断。
11.可以使用定时器模拟出多个异步串行口。
12.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)。
13.PDIP封装,引脚图如下:
图2-4AT89C51芯片图
2.4LCD1602液晶简介
LCD1602为字符型液晶显示器,通常只能显示字符和数字,如果想显示汉字的话一般选择LCD12864,LCD1602能够显示2行字符,每一行显示16个字符,故得名为1602。
其内部含有许多个RAM,我们使用到的是40个。
通过控制1602的控制管脚RS,RW,E我们即可向LCD1602显示器中写入数据,具体的显示位子第一行起始地址是0x80,第二行显示的起始地址是0x40+0x8。
其具体的图形如下:
图2-5LCD1602
2.5DS18B20温度传感器简介
数字温度传感器DS18B20是DALLAS公司生产的一款超小体积并且抗干扰能力强和精度高的数字温度传感器。
不需要将模拟量转化为数字量A/D转换电路,直接将温度测量值转换成为数字量。
DS18B20的测量范围为-55℃-125℃,精度为±
0.5℃。
DS18B20引脚如下,DS18B20它是单总线接口的总共有3个管脚,一个VCC一个GND还有一个就是DQ数据管脚,在单总线通信中对时序是非常严格的。
图2-6DS18B20管脚图
2.6系统电路设计
本设计中使用51内核芯片单片机是AT89C51,通过2个22P电容和1个12MHz的晶振组成的晶振电路,系统的时钟脉冲就是由它提供,还有通过1个电阻和1个电解电容和1个按键组成的复位电路,使用4个按键组成独立按键进行对温度上下限的设定,采用无源蜂鸣器作为报警装置。
2.6.1晶振电路
电路中C1无极性电容和C2无极性电容是起振电容。
当12MHz晶振在高频的情况工作时,会产生一定的寄生的电感。
为了使电感达到平衡和产生谐振,那么可以加上2个10-33pf的无极性电容。
具体的大小可以参考下晶振厂家提供的参数手册。
单片机的内部有一振荡电路,我们需要在外部接上晶振电路单片机才能工作。
晶振和电容与内部的电路组成振荡电路。
只要单片机一上电,电容启振,晶振工作,这样单片机就有一个持续的时钟信号。
51单片机内部有一个12分频器,因此时钟周期为t=1/12000000≈1us。
图2-7晶振电路
2.6.2复位电路
此系统使用的51单片机是高电平复位。
对于AT89C51,只需在复位引脚加上2个机器周期的高电平,就能让单片机复位。
单片机的IO口显示高电平,程序计数器从零开始执行。
采用的手动复位,按下按钮,复位引脚获得高电平,单片机复位,松开按钮后,单片机重新开始工作。
单片机的9脚RST(Reset)复位引脚,如图。
当我们的程序运行到1000行的时候,单片机重启启动了,之前运行的数据将会丢失,因为RAM是不储存在我们的flash区域的,这个时候,那么我们的单片机会重新开始运行,这个过程就是复位。
当我们的程序运行中,遇到一些特殊情况造成系统奔溃了,我们把这种情况叫做死机,类似我们的电脑的,这个时候我们可以手动按下复位按键,单片机会重新运行。
复位电路的存在,就是防止一些特殊情况的发生,在程序跑飞的时候能够还原。
复位电路的工作原理:
51单片机高电平复位。
对AT89C51来说,在复位引脚加2个机器周期的高电平,可使单片机复位。
单片机的IO口呈现高电平,程序计数器从零开始执行。
采用的手动复位,按钮按下,复位引脚得到高电平,单片机复位,按钮松开后,单片机开始工作。
当这个电路处于稳定状态时,电容隔离直流电,隔离+5V。
此时复位按键在弹起的状态,R31的电阻是没有电压差的。
我们的这个到单片机是高电平复位,低电平工作,当按下去的时候,电容起到放电的作用,瞬间是+5V的高电平。
所以,在按下的一瞬间,高电平复位成功。
我们再来分析从没有电到上电的过程。
电容C1上方是5V电压,这个时候哦电容C1进行充电,正离子从上往下充电,负电子从GND往上充电,这个时候电容对电路来说是短路的,相当于一根导线,电压都加在了R31这个电阻上,那么RST上的电压值,Vrst=R31*I,随着电容充电越多,在充满的时候,电流就会越来越小的,那么此时Vrst上的电压也会变小,直到电容充满后,线路中不再有电流,那么这个时候Rst和GND的电位就相等了,也即是0V。
从这个过程中,Rst复位引脚是先持续一段时间的高电平,然后再低电平,之后单片机正常运行。
我们可以根据一条充放电的公式得到:
T=1.2RC,把我们上图的参数带入,求得是564us,大于2个机器周期。
重要一点的是,每个单片机复位高电平的时候都是不,具体的要参考手册。
图2-8复位电路
2.6.3电源电路
向单片机供电。
单片机电源:
AT89C51单片机的工作电压范围:
3.3V—5.5V,一般给51单片机外接一个5V的直流稳压电源。
连接方式为VCC(40脚):
接电源+5V端VSS(20脚):
接电源地端。
本设计使用市电220V交流作为输入,通过一个变压器降压后再经过整流电桥整流变为直流,通过电容滤波等处理,最后经过降压芯片7805稳压到5V,然后将输出的5V接入到单片机端供电。
变压器是电源进行电源转换的,有升压变压器,也有降压变压器,我们使用的是降压变压器,需要将市电220V降到50V左右,其中我们需要选择好变压器,变压器有前圈和后圈,其计算公式是N1/N2=V1/V2,因此我们就可以计算出后半圈的电压输出大小。
如图:
图2-9变压器
将变压器降压后的交流电我们还需要对其整流,使其交流变为直流,我们可以通过单相桥式整流电路,通过整流电路,我们就可以得到一个直流波动的电压。
正电压经过D3进来然后经过D4出去,负电压经过D5进来,经过D2出去,因此也就将交流变化为直流。
图2-10单相桥式整流电路
输出电压经过整流电路整流为直流后,其电压还是波动的,因此我们需要将其通过一个电源滤波电路滤波,我们使用的滤波电路时由电解电容及无极性电容组成,将整流电压经过一个470uf的电解电容,就可以使其波动滤除掉,因为我们需要得到一个5V电压,所以我们还需要对其进行稳压处理,我们使用的稳压芯片是7805,将其滤波后的电压通过7805输入端,输出端就可以得到一个5V电压,为了安全起见,我们还需要将其稳压后的电压进行滤波,使其稳压通过一个470u的电解电容和一个1nf的无极性电容,最终我们就可以得到一个标准的5V直流电压了,将其电压供给整个系统作为电源。
滤波电路如下:
图2-11滤波电路
总电源电路如下:
图2-12电源电路
2.6.4LCD显示电路
此设计中采用的是字符型LCD1602,它只能显示数字及字符,可以显示2行,每一行可以显示16个字符,通过控制LCD的数据命令RS管脚和读写RW管脚还有使能E管脚。
即可实现对LCD1602的读写了。
我们将LCD1602的数据脚通过单片机P0口控制,数据命令及使能管脚通过单片机的P25P26P27口控制,通过按照LCD1602通讯时序控制,我们即可将要显示的数据通过P0口发送到LCD上实时显示。
具体电路如下:
图2-13LCD显示电路
2.6.5按键电路
在本设计中我们使用了4个按键接到单片机管脚P32,P33,P34,P35上,另一端共地,如果有按键按下去了,单片机的对应管脚就会被拉为低电平,因此可以使用此方法来判断,按键是否按下,然后做出相应的动作。
其中我们将2个按键接在了单片机的P32和P33管脚上,此管脚可以设定为单片机外部中断0和1模式,即当有按键按下时进入中断函数进行处理,处理结束后可以返回主函数继续运行。
按键K1是对温度上下限值设定的切换,K2K3是对温度数据的加减,K4是设定确认。
图2-14按键电路
2.6.6声光报警电路
此设计中我们使用的是无源蜂鸣器,即只有触发一定频率的脉冲才能使蜂鸣器发声。
我们将单片机的P37管脚接在PNP型三极管上,当单片机P37口输出一定频率的脉冲即可触发蜂鸣器发声了。
同时设计中还使用了一个发光二极管进行温度报警指示,将其阳极接在单片机的P31管脚,单片机P31输出一个高电平的时候LED发光,反之熄灭。
图2-15声光报警电路
2.6.7测温电路
此设计中我们使用数字温度传感器DS18B20的数据口接到单片机的P36管脚,通过此管脚模拟单总线时序与DS18B20进行通信。
管脚上拉一个电阻,使其通信更加稳定运行,具体电路如下:
图2-16测温电路
2.7总电路设计
用Proteus仿真软件绘制的完整电路图如下:
图2-17总电路
第3章软件设计
3.1系统软件设计整体思路
现在开发都是追求快速,尽最大的缩短开发周期,以前的汇编语言现在已经很少使用了,现在开发使用最多的是高级语言,然而C语言又是高级语言中的佼佼者。
本设计中我们使用的是C语言开发。
硬件电路中使用到了LCD1602,如果要对LCD进行显示,首先就要对LCD进行初始化操作,我们参考LCD1602数据手册的初始化过程可知:
首先进行一个短暂延时,然后写指令38H,延时一段时间,然后写入指令0CH,即显示开和光标设置,延时一段时间然后写入指令06H即显示光标功能设置,最后写入指令01H,即清屏。
因此我们就对LCD进行初始化完成,就可以在LCD上面进行显示操作了。
具体程序如下:
voidinit()//LCD初始化函数
{
delay(1000);
wrc(0x38);
wrc(0x06);
wrc(0x0c);
wrc(0x01);
}
根据上面LCD初始化过程的介绍,我们就可以将其过程通过流程图的形式展现出来,LCD1602初始化程序流程图如下:
硬件设计中我们使用单片机的P0口控制LCD1602的数据口D0-D7,单片机的P25,P26,P27分别控制单片机的RS,RW,E。
因此如果我们要对LCD进行操作的话我们首先要明确LCD1602的读写函数的编写,我们参考LCD1602读写时序,如下:
图3-1LCD1602读写时序图
在编写写命令函数的时候,首先要将RS=0,此是选择命令,在把写打开RW=0,最后是触发一个低脉冲的使能信号E,然后将命令发送给P2即可。
在编写写数据函数的时候和上面一样,只是将RS=1改变即可,其他的完全一样。
voidwrc(uint8c)//LCD写命令函数
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(10);
voidwrd(uint8dat)//LCD写数据函数
rs=1;
P0=dat;
硬件中使用到了按键来设定温度的上下限值,由于按键K1和K4接在单片机的外部中断0和外部中断1管脚上,因此我们需要对外部中断0和1进行初始化及中断函数才能使用,具体初始化函数如下:
voidint0init()//外部中断0初始化
EA=1;
EX0=1;
IT0=1;
//选择下降沿触发
voidint1init()//外部中断1初始化
EX1=1;
IT1=1;
}
voidint0()interrupt0
//消抖处理
mode++;
sheding=0;
if(mode==3)
{
mode=1;
}
voidint1()interrupt2
mode=0;
sheding=1;
还有2个按键接在了单片机的P34和P35