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

相关推荐
yutian06067 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程10 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉14 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名67714 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣14 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室15 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费15 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_3975623117 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
liyinuo201717 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
艺术家天选17 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件