51单片机数字温度报警器_DS18B20可调上下限(仿真+程序+原理图)

数字温度报警器

51单片机数字温度报警器_DS18B20可调上下限(仿真+程序+原理图+报告+讲解)

原理图:Altium Designer

仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

1 主要功能:

1、实时温度测量及显示,超出温度范围声光报警,上下限温度可通过按键设定等功能;

2、温度测量范围0到99.9摄氏度,精度为0.1摄氏度;

3、可设置上下限报警温度,默认上限报警温度为38℃、默认下限报警温度为5℃(通过程序可以更改上下限值);

4、报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。将下限报警值调为0时为关闭下限报警功能。

*使用说明:*

1、开机:打开电源,机器进入初始化状态,此时数码管显示 - - - -;片刻即开始显示当前温度。

2、查看当前上下限温度范围:按下【S1】键(设置键),数码管闪烁显示Hxxx,H表示上限温度,再次按下【S1】键,数码管闪烁显示Lxxx, L表示下限温度。再按【S1】键时退出设置,数码管显示当前实时温度。

3、重新设定上下限温度范围:按下【S1】键一次,数码管闪烁显示Hxxx时,此时是设定上限温度,按【S3】键加温度,【S2】键减温度。再按下【S1】键一次,此时是设定下限温度,数码管闪烁显示Lxxx时,按【S3】键加温度,【S2】键减温度。再按下【S1】键一次,设置成功并退出设置。

4、报警:当检测到当前实时温度高于上限温度值,或者低于下限温度值,系统会自动发出报警,报警为红灯一直闪烁且蜂鸣器随着灯的频率响。除非重设上下限温度范围,否则报警一直持续。

*资料下载链接(可点击):*

https://docs.qq.com/doc/DS05hcVFmSVZVdE5P

2 仿真图:

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。机器进入初始化状态,此时数码管显示 - - - -;片刻数码管显示当前温度值。

查看当前上下限温度范围:按下【S1】键(设置键),数码管闪烁显示Hxxx,H表示上限温度,再次按下【S1】键,数码管闪烁显示Lxxx, L表示下限温度。再按【S1】键时退出设置,数码管显示当前实时温度。

重新设定上下限温度范围:按下【S1】键一次,数码管闪烁显示Hxxx时,此时是设定上限温度,按【S3】键加温度,【S2】键减温度。再按下【S1】键一次,此时是设定下限温度,数码管闪烁显示Lxxx时,按【S3】键加温度,【S2】键减温度。再按下【S1】键一次,设置成功并退出设置。

报警:当检测到当前实时温度高于上限温度值,或者低于下限温度值,系统会自动发出报警,报警为红灯一直闪烁且蜂鸣器随着灯的频率响。除非重设上下限温度范围,否则报警一直持续。

仿真中通过按键调整DS18B20温湿度模块的值改变显示数值。

上下箭头用于改变温度的值。下箭头调低数值,上箭头调高数值。改图标显示的是温度的值

3 原理图:

使用AD绘制。

元器件清单

Comment元器件 Pattern名称 Quantity数量 Components元器件编号
按键 KEY 1 K1
自弹开关 SW6 1 S1
电阻10K R-DIP 2 R14, R16
排阻10K SIP9 1 RP1
电容10uF C100 1 C1
晶振12MHz JZ 1 Y1
电阻2.2K R-DIP 6 R9, R10, R11, R12, R13, R15
电容30uf C01 2 C2, C3
数码管4-LED LED-4 1 U3
三极管9012 PNP 5 Q1, Q2, Q3, Q4, Q5
按键ADD KEY 1 K4
LED灯ALAM LED 1 D2
单片机AT89C51 DIP40 1 U1
按键DEC KEY 1 K3
DS18B20 DS18B20 1 U2
DC接口POWER DC2.1 1 P1
按键SET KEY 1 K2
蜂鸣器SPEAKER SPEAKER 1 LS1

4 设计报告:

提供开题报告和论文报告

设计报告目录如下

摘要

1、引言

[2 设计内容及性能指标](#2 设计内容及性能指标)

[3 系统方案比较、设计与论证](#3 系统方案比较、设计与论证)

[3.1 主控制器模块](#3.1 主控制器模块)

[3.2 温度测量](#3.2 温度测量)

[3.3 设置温度](#3.3 设置温度)

[3.3 显示模块](#3.3 显示模块)

[4 系统器件选择](#4 系统器件选择)

[5 硬件实现及单元电路设计](#5 硬件实现及单元电路设计)

[5.1 主控制模块](#5.1 主控制模块)

[5.2 显示模块电路](#5.2 显示模块电路)

[5.3 数码管显示驱动电路](#5.3 数码管显示驱动电路)

[图6 驱动电路](#图6 驱动电路)

[5.4 温度传感器(DS18B20)电路](#5.4 温度传感器(DS18B20)电路)

[5.4.1 DS18B20基本介绍](#5.4.1 DS18B20基本介绍)

[5.4.2 DS18B20控制方法](#5.4.2 DS18B20控制方法)

[5.4.3 DS18B20供电方式](#5.4.3 DS18B20供电方式)

[5.6 蜂鸣器、发光二极管报警电路](#5.6 蜂鸣器、发光二极管报警电路)

[6 系统软件设计](#6 系统软件设计)

[6.1 程序结构分析](#6.1 程序结构分析)

[6.2 系统程序流图](#6.2 系统程序流图)

[6.2.1 DS18B20初始化程序流程图](#6.2.1 DS18B20初始化程序流程图)

[6.2.2 读温度子程序流程图](#6.2.2 读温度子程序流程图)

[7 系统的安装与调试](#7 系统的安装与调试)

仿真调试

系统调试

仿真结果

总结与展望

参考文献

5 程序设计:

主函数

C 复制代码
void main(void)
{
    uint z;
 InitTimer();    //初始化定时器
 EA=1;      //全局中断开关
 TR0=1;
 ET0=1;      //开启定时器0
 IT0=1;        
 IT1=1;
 check_wendu();
 check_wendu();
 for(z=0;z<300;z++)
 {
  Disp_init();        
  }
 while(1)
  {
  if(SET==0)
  {
   Delay(2000);
   do{}while(SET==0);
   set_st++;x=0;shanshuo_st=1;
   if(set_st>2)set_st=0;
  }
  if(set_st==0)
  {
   EX0=0;    //关闭外部中断0
   EX1=0;    //关闭外部中断1
    check_wendu();
      Disp_Temperature();
   Alarm();   //报警检测
  }
  else if(set_st==1)
  {
   BEEP=1;    //关闭蜂鸣器
   ALAM=1;
   EX0=1;    //开启外部中断0
   EX1=1;    //开启外部中断1
   if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
   if(shanshuo_st) {Disp_alarm(shangxian);}
  }
  else if(set_st==2)
  {
   BEEP=1;    //关闭蜂鸣器
   ALAM=1;
   EX0=1;    //开启外部中断0
   EX1=1;    //开启外部中断1
   if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
   if(shanshuo_st) {Disp_alarm(xiaxian);}
  }
    }
}

外部中断函数

C 复制代码
/*****外部中断0服务程序*****/
void int0(void) interrupt 0
{
 
 EX0=0;      //关外部中断0
 if(DEC==0&&set_st==1)
 {
  	do{
		Disp_alarm(shangxian);
	}
 	while(DEC==0);
  	shangxian--;
  	if(shangxian<xiaxian)shangxian=xiaxian;
 }
 else if(DEC==0&&set_st==2)
 {
  	do{
		Disp_alarm(xiaxian);
	}
 	while(DEC==0);
 	xiaxian--;
  	if(xiaxian<0)xiaxian=0;
 }
}
/*****外部中断1服务程序*****/
void int1(void) interrupt 2
{
 EX1=0;      //关外部中断1
 if(ADD==0&&set_st==1)
 {
 	do{
		Disp_alarm(shangxian);
	}
 	while(ADD==0);
  	shangxian++;
  	if(shangxian>99)shangxian=99;
 }
 else if(ADD==0&&set_st==2)
 {
  	do{
		Disp_alarm(xiaxian);
	}
 	while(ADD==0);
  	xiaxian++;
  	if(xiaxian>shangxian)xiaxian=shangxian;
 }  
}

DS18B20驱动

程序流程图

C 复制代码
unsigned int ReadTemperature(void)
{
  unsigned char a=0;
  unsigned char b=0;
  unsigned int t=0;
  float tt=0;
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳过读序号列号的操作
  WriteOneChar(0x44);  //启动温度转换
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳过读序号列号的操作
  WriteOneChar(0xBE);  //读取温度寄存器
  a=ReadOneChar();     //读低8位
  b=ReadOneChar();    //读高8位
  t=b;				   //高8位转移到t
  t<<=8;			   //t数据左移8位
  t=t|a;			   //将t和a按位或,得到一个16位的数
  tt=t*0.0625;		   //将t乘以0.0625得到实际温度值(温度传感器设置12位精度,最小分辨率是0.0625)
  t= tt*10+0.5;     //放大10倍(将小数点后一位显示出来)输出并四舍五入
  return(t);		   //返回温度值
}

6 讲解视频

讲解视频包含proteus原理图讲解,程序讲解等

7 资料清单:

\0. 常见使用问题及解决方法--必读!!!!

\1. 程序源码

\2. 仿真

\3. 原理图

\4. 使用说明

\5. 开发资料

\6. 元器件清单

\7. 开题报告

\8. 设计报告

\9. 讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

相关推荐
可乐鸡翅好好吃38 分钟前
NRF芯片下的ADC采集
单片机·嵌入式硬件
3壹1 小时前
LED模块控制与左移运算详解
单片机·嵌入式硬件
senijusene1 小时前
通信概念,51UART的使用,以及MODBUS的简单应用
c语言·开发语言·单片机·51单片机
Zevalin爱灰灰1 小时前
零基础入门学用物联网(ESP8266) 第一部分 基础知识篇(五)
单片机·物联网·嵌入式·esp8266
学嵌入式的小杨同学3 小时前
STM32 进阶封神之路(二十二):DMA 实战全攻略 ——ADC 采集 + 串口收发 + 内存复制(库函数 + 代码落地)
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
是翔仔呐3 小时前
C语言从黑框框到控硬件!51单片机零基础保姆式全系列教程 开篇前言+全书总览
c语言·开发语言·单片机·嵌入式硬件·gitee·51单片机
流浪_彩虹3 小时前
MCU/DSP 与 ROS2 如何通信?XRCE-DDS 实现 rostopic 与嵌入式 Msg 无缝映射(附架构图)
单片机·嵌入式硬件
DLGXY4 小时前
STM32(二十八)——FLASH闪存
stm32·单片机·嵌入式硬件
9稳4 小时前
基于plc的自动化立体仓库控制系统设计
开发语言·网络·数据库·嵌入式硬件·plc
ToneChip4 小时前
USBi 调试 与 MCU 运行 共存方案总结
单片机·嵌入式硬件·音频