综合小项目1--基于51单片机的温度检测报警系统


一. 系统简介

  该系统是基于51单片机的温度监测报警系统。由主控模块、检测模块、显示模块以及报警模块四大模块组成。主控模块使用STC89C52实验板,检测模块采用DS18B20的温度传感器监测环境温度,并将监测到的温度值传送给显示模块的LCD1602显示屏进行显示,而当温度超过设定的上限或低于设定的下限值时,控制报警模块的LED发光二极管显示并通过蜂鸣器发出警告。四大模块协同工作,主要实现对温度的检测、显示以及报警功能。

二. 系统设计

  1. 系统流程图
    在这里插入图片描述
  2. 温度上下限设置流程图
    在这里插入图片描述
  3. 硬件原理总体框图
    在这里插入图片描述
  4. 硬件模块电路分析
    4.1 数据处理模块
      89C52是片内有ROM/EPROM的单片机,故此芯片构成的最小系统简单可靠。但由于集成度的限制,最小应用系统只能用作一些小型的控制单元。
    在这里插入图片描述
图4.1.1 STC89C52

4.2 DS18B20温度监测模块
  采用可编程温度传感器DS18B20进行温度检测,具有抗干扰能力强、采集进度高、不需要复杂调理电路和AD转换电路等特点,只要将DS18B20的I/O口直接与单片机的P37口相连即可实现温度的读取。
在这里插入图片描述

图4.2.1 温度传感器DS18B20

4.3 LCD温度显示模块
采用LCD1602液晶显示器将温度传感器读取的温度值显示出来,具有体积小、功耗低、显示操作简单等特点,但温度范围窄,工作温度为0-55°C,存储温度为-20~+60°C。
在这里插入图片描述

图4.3.1 液晶显示屏LCD1602

4.4 蜂鸣器温度报警模块
采用开发板上的无源蜂鸣器实现温度报警,单输出一个电平是不能控制使其发声的,须通过一定频率的脉冲来触发,才能使其发声。
在这里插入图片描述
在这里插入图片描述

图4.4.1 蜂鸣器

4.5按键设置阈值及模式切换模块
  温度上下限的设定以及模式切换通过独立按键来实现,首次按下K3,即进入修改状态,此时在上限处会出现 “ * ”,表示该值处于被更改状态,然后可通过K1、K2分别实现对温度上限的上调和下调;再次按下K3,即确定上限值已修改完毕,“ * ” 将移动到下限值处,同理可通过K1、K2实现对温度下限值的上调和下调;第三次按下K3即上下限修改完成;K4即对模式的切换。
在这里插入图片描述

图4.5.1 独立按键

三. 实验设备

  1. 51单片机(包括DS18B20、蜂鸣器)
  2. LCD1602
  3. WiFi烧录器
  4. WiFi模块
  5. 移动终端
  6. 串口通信总线

四. 实验过程

  1. 了解元器件的工作原理并找到通信引脚;
    1)DS18B20
      遵循单总线协议,每次测温必须有初始化、传送ROM命令、传送RAM命令、数据交换四个过程。每次测量前,首先将-55°C所对应的基数分别置入减法计数器、温度寄存器中,在计数门关闭前若已减至0,则温度寄存器中的数组就增加,然后计数器以斜率累加器的状态置入新的数值,再对时钟计数,然后减至0,温度寄存器又增加。只要计数器仍未关闭则重复以上过程,直至温度寄存器达到被测温度值。
    2)LCD1602
      RS为数据/命令选择端,RW为读/写选择端,EN为使能端;根据字符发生器中字符代码与图形的对应关系,可以将对应的字符显示出来。该器件的基本操作时序,如下表:
输入 输出
读状态 RS=0,RW=1,EN=1 D0~D7=状态字
写指令 RS=0,RW=0,D0~D7=指令码,EN=高脉冲
读数据 RS=1,RW=1,EN=1 D0~D7=数据
写数据 RS=1,RW=0,D0~D7=数据,EN=高脉冲

  原则上每次对控制器进行读写操作前,都必须进行读写检测,确保STA7=0,实际上,由于单片机的操作速度慢于液晶控制器的反应速度,故只需进行简短的延时即可。
3)蜂鸣器
  开发板采用无源蜂鸣器,通过一个限流电阻与VCC相连,另一个管脚与ULN2003D芯片(NPN达林顿管)上的P15接口相连。也就是说,BEEP管脚是通过单片机P15接口,经过ULN2003D驱动芯片输出到蜂鸣器中,而ULN2003D芯片则起到电流放大的作用——单片机的P15端口输出一个高电平,则NPN三极管处于导通状态,于是蜂鸣器得电从而发声。
4)独立按键
  四个按键的一端全部供地。默认状态下(按键未按下时),按键的各个管脚并非完全导通;按下按键后,相应的单片机端口都会被拉低(因为P3口是准双向IO口)。并且按键在闭合和断开时,触电会存在抖动现象,可通过软件消抖的方法解决即延时待其稳定后,再次判断按键是否被按下。

  1. 按照需要连接各器件;

在这里插入图片描述

  1. 根据各器件的工作原理编写程序来实现相应的控制功能;
    部分源码如下:
#include "reg52.h"
sbit keyu=P3^1;	//按键加
sbit keyl=P3^0;	//按键减
sbit keyh=P3^2;	//按键选择调节温度上下限
sbit keym=P3^3;	//按键切换模式
sbit RS=P2^6;	//LCD数据/命令选择端
sbit RW=P2^5;	//LCD读/写端
sbit EN=P2^7;	//LCD使能端
sbit DQ=P3^7;	 //DS18B20接入口
sbit buzz=P1^5;	//蜂鸣器接口        -
bit f=1;	//正负温度标志位
unsigned char  m=1,y=0,o=0;	//寄存器
unsigned int sdata;	//存放整数温度
unsigned char xiaoshu1; 	//存放小数后第一位温度数值
unsigned char xiaoshu2; 	//存放小数后第二位温度数值
unsigned char code huany[]=" Welcome To Use ";	 //欢迎使用
unsigned char code tt[]  =" TEMP Monitoring"; 	//温度监测
unsigned char code duqu[]="   loading...   ";	 //读取
unsigned char code tab1[]=" T:      C   M  "; 	//框架
unsigned char code tab2[]="H:        L:    ";
unsigned char code shuzu[]="0123456789+- .*"; 	//0123456789+-空格.*
unsigned char u=40;	//上限
char l=15,p;	//下限

void delay_50us(unsigned int t)//延时
{
   
	unsigned int j,k;
	for (;t>0;t--)
	{
   
		for(j=10;j>0;j--)
		{
   
		 for(k=1;k>0;k--);
		}
	}
}
void delay(unsigned int i)//全局延时
{
   
  while(i--);
}
void button()//蜂鸣器
{
   
  unsigned char k=800;
  while(k--)
	{
   
		buzz=~buzz;
		delay(115);
	}
}
/***************LCD****************/
void write_com(unsigned com)//写操作
{
   
   EN=0;RS=0;RW=0;
   P0=com;
   delay_50us(1);
   EN=1;
   delay_50us(5);
   EN=0;
}
void write_data(unsigned char dat)//写数据
{
   
   EN=0;RS=1;RW=0;
   P0=dat;
   delay_50us(1);
   EN=1;
   delay_50us(5);
   EN=0;
}
void Init_LCD(void)//初始化
{
   
  delay_50us(5);
  write_com(0x38);//写指令38H 不检测忙信号
  delay_50us(1
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值