当前位置:文档之家› 基于单片机的温度报警器解读

基于单片机的温度报警器解读

基于STC89C51的温度报警器设计一.设计背景温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。

随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。

温度控制电路在工农业生产中有着广泛的应用。

日常生活中也可以见到,如电冰箱的自动制冷,空调器的自动控制等等。

在工业生产中,温度、压力、流量和液位是四种最常见的过程变量。

其中,温度是一个非常重要的过程变量。

例如:在冶金工业、化工工业、电力工业、机械加工和食品加工等许多领域,都需要对各种加热炉、热处理炉、反应炉和锅炉的温度进行监控。

然而,用常规的监控方法,潜力是有限的,难以满足较高的性能要求。

采用单片机来对它们进行监控不仅具有监控方便、简单和灵活性大的优点,而且可以大幅度提高被测温度的技术指标,从而能够大大提高产品的质量和数量。

因此,单片机对温度的监控问题是一个工业生产中经常会遇到的监控问题。

现代社会是信息化的社会,随着安全化程度的日益提高,而通过温度报警器及时报警,避免不必要的损失。

二.设计功能介绍此次要设计的是一个温度报警器,DS18B20采集温度数据送到单片机,单片机根据收到的数据判断是否超过报警界限,如果超过做出报警响应,报警界限可调。

12864显示单片机收到的数据。

三.主要器件简介MCS-51简介8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。

89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:·中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

.数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

·程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。

·定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。

·并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。

·全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

·中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

·时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。

单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。

INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。

下图是MCS-51系列单片机的内部结构示意图。

DS18B20简介1.DS18B20基本DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

2、DS18B20产品的特点(1).只要求一个端口即可实现通信。

(2).在DS18B20中的每个器件上都有独一无二的序列号。

(3).实际应用中不需要外部任何元器件即可实现测温。

(4).测量温度范围在-55。

C到+125。

C之间。

(5).数字温度计的分辨率用户可以从9位到12位选择。

(6).内部有温度上、下限告警设置。

3、DS18B20引脚图及引脚功能介绍TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

(底视图)图表1DS18B20详细引脚功能描述序号名称引脚功能描述1 GND 地信号2 DQ 数据输入/输出引脚。

开漏单总线接口引脚。

当被用着在寄生电源下,也可以向器件提供电源。

3 VDD 可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

4.DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:初始化时序、读时序、写时序。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先。

DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。

DS18B20在完成一个读时序过程,至少需要60us才能完成。

DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

12864简介12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等外形尺寸主要外形尺寸项目标准尺寸单位模块体积113.0×65.0×12.8mm定位尺寸105.0×55.0mm视域73.4×38.8 mm行列点阵数128×64dots点距离0.52×0.52 mm点大小0.48×0.48 mm模块引脚说明128X64 引脚说明引脚号引脚名称方向功能说明1 VSS - 模块的电源地2 VDD - 模块的电源正端3 V0 - LCD驱动电压输入端4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号5 R/W(SID) H/L 并行的读写选择信号;串行的数据口6 E(CLK) H/L 并行的使能信号;串行的同步时钟7 DB0 H/L 数据08 DB1 H/L 数据19 DB2 H/L 数据210 DB3 H/L 数据311 DB4 H/L 数据412 DB5 H/L 数据513 DB6 H/L 数据614 DB7 H/L 数据715 PSB H/L 并/串行接口选择:H-并行;L-串行16 NC 空脚17 /RET H/L 复位低电平有效18 NC 空脚19 LED_A - 背光源正极(LED+5V)20 LED_K - 背光源负极(LED-OV)逻辑工作电压(VDD):4.5~5.5V电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料串行数据连接时序图具体指令介绍:1、清除显示CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L L L H功能:清除显示屏幕,把DDRAM位址计数器调整为“00H”2、位址归位CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L L H X功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM 3、位址归位CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L H I/D S功能:把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM功能:执行该命令后,所设置的行将显示在屏幕的第一行。

显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。

Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。

4、显示状态开/关CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L H D C B功能:D=1;整体显示ON C=1;游标ON B=1;游标位置ON5、游标或显示移位控制CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L H S/C R/L X X功能:设定游标的移动与显示的移位控制位:这个指令并不改变DDRAM的内容6、功能设定CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L H DL X 0 RE X X功能:DL=1(必须设为1)RE=1;扩充指令集动作RE=0:基本指令集动作7、设定CGRAM位址CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L H AC5 AC4 AC3 AC2 AC1AC0功能:设定CGRAM位址到位址计数器(AC)8、设定DDRAM位址CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L H AC6 AC5 AC4 AC3 AC2 AC1AC0功能:设定DDRAM位址到位址计数器(AC)9、读取忙碌状态(BF)和位址CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L H BF AC6 AC5 AC4 AC3 AC2 AC1AC0功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值10、写资料到RAMCODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0H L D7 D6 D5 D4 D3 D2 D1 D0功能:写入资料到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM)11、读出RAM的值CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0H H D7 D6 D5 D4 D3 D2 D1 D0功能:从内部RAM读取资料(DDRAM/CGRAM/TRAM/GDRAM)12、待命模式(12H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L L L H功能:进入待命模式,执行其他命令都可终止待命模式13、卷动位址或IRAM位址选择(13H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L L H SR功能:SR=1;允许输入卷动位址SR=0;允许输入IRAM位址14、反白选择(14H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L L H R1 R0功能:选择4行中的任一行作反白显示,并可决定反白的与否15、睡眠模式(015H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L L L H SL X X功能:SL=1;脱离睡眠模式SL=0;进入睡眠模式16、扩充功能设定(016H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L H H X 1 RE G L功能:RE=1;扩充指令集动作RE=0;基本指令集动作G=1;绘图显示ON G=0;绘图显示OFF17、设定IRAM位址或卷动位址(017H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L H AC5 AC4 AC3 AC2 AC1AC0功能:SR=1;AC5~AC0为垂直卷动位址SR=0;AC3~AC0写ICONRAM位址18、设定绘图RAM位址(018H)CODE:RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0L L H AC6 AC5 AC4 AC3 AC2 AC1AC0功能:设定GDRAM位址到位址计数器(AC)四.各部分电路简介1.最小系统介绍最小系统由单片机,时钟电路和复位电路组成:如下图所示时钟电路复位电路时钟电路为单片机工作提供时序,电路复位时单片机程序指针指向初始位置2.数据采集电路3.显示电路4.报警电路5.总原理图五.程序清单#include <reg51.h>#include <intrins.h>#include <stdlib.h>#include <math.h> //要用到取绝对值函数abs()#define uchar unsigned char#define uint unsigned int/* 端口定义*/#define LCD_data P0 //数据口sbit LCD_RS = P3^5; //寄存器选择输入sbit LCD_RW = P3^6; //液晶读/写控制sbit LCD_EN = P3^4; //液晶使能控制sbit LCD_PSB = P3^7; //串/并方式控制sbit key1=P2^4;sbit key2=P2^5;sbit key3=P2^6;sbit key4=P2^7;sbit LED0=P1^0;sbit LED1=P1^1;sbit LED2=P1^2;sbit ds=P2^2;sbit beep=P2^3;int tempValue1;unsigned int temp;uchar code th0=(65535-3000)/256;uchar code tl0=(65535-3000)%256;uchar disbuf[7];uchar dis1[]="温度报警器的设计";uchar dis2[] = {"温度上限: C"};uchar dis4[] = {"温度: . C"};uchar dis3[] = {"温度下限: C"};uchar wenmax=20,wenmin=10;void delay_1ms(uint x){uint i,j;for(j=0;j<x;j++)for(i=0;i<110;i++);}void write_cmd(uchar cmd){LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;P0 = cmd;delay_1ms(20);LCD_EN = 1;delay_1ms(20);LCD_EN = 0;}/*******************************************************************//* *//*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。

相关主题