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

相关推荐
智商偏低3 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen5 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森7 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白7 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D7 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术10 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt11 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘11 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang11 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n13 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件