加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机数字温度报警器_DS18B20可调上下限

08/09 17:09
512
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

原理图Altium Designer

仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0009

主要功能

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

仿真图

img

原理图

img

程序设计

img

主函数

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);}
  }
    }
}

外部中断函数

/*****外部中断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驱动

程序流程图

image-20220903000421492

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);		   //返回温度值
}

资料清单

img

资料下载链接

  • 设计资料获取联系方式.doc

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
AT90CAN128-16MU 1 Atmel Corporation RISC Microcontroller, 8-Bit, FLASH, AVR RISC CPU, 16MHz, CMOS, GREEN, MO-220VMMD3, QFN-64

ECAD模型

下载ECAD模型
$7.93 查看
STM32F103CBT6TR 1 STMicroelectronics Mainstream Performance line, Arm Cortex-M3 MCU with 128 Kbytes of Flash memory, 72 MHz CPU, motor control, USB and CAN

ECAD模型

下载ECAD模型
$9.18 查看
ATMEGA328PB-AUR 1 Atmel Corporation RISC Microcontroller, CMOS,

ECAD模型

下载ECAD模型
$2.65 查看

相关推荐

电子产业图谱