上两篇已经把这个的时序以及读取温度实现的过程写出来了,那么接下来就是要如何巧妙的利用这个温度实现报警了,当每到了一定的阈值的时候,就让蜂鸣器响起,废话不多说,上代码。

void Temperature_Alarm(void)
{LCD_ShowString(1,1,"T:");LCD_ShowString(2,1,"TH:");LCD_ShowString(2,9,"TL:");DS18B20_CovertT(); //初始化温度读取时序delay(1000);   //为了防止读取默认值,先延迟再读//Time_Init();   //定时器1初始化

先上一点讲一点,这里前面三行就是利用一个屏幕来显示出这么一个字符,这样可以再屏幕看出这么一个变化。

再下来就是我么读取温度的一个初始化函数,就是写入指定的地址,这样才可以使得芯片唤醒。开始工作。

while(1){ KeyNum11=key_LoopVaule();    //获取定时器扫面按键的键值DS18B20_CovertT();            //初始化温度读取时序T=DS18B20_ReadT();              //获取温度数据值 if(T<0){                                //小于显示-号LCD_ShowChar(1,3,'-');TShow=-T;  }else{LCD_ShowChar(1,3,'+');    //大于0显示正好TShow=T;}LCD_ShowNum(1,4,TShow,3);      //显示整数部分LCD_ShowChar(1,7,'.');LCD_ShowNum(1,8,(unsigned int)(TShow*10000)%10000,4);   //温度小数部分,因为小数直接显示取不出来,所以要先转整形*10000再求余10000这样就可以得到后面的数是整数形式了

在下来就到了一个函数获取按键的,我么需要利用按键来调节温度的阈值,这样才可以让它在我们可控的范围内,然后就到了获取温度的函数,这样返回温度的值,我们获取到了,就可以利用屏幕来查看它当前的温度值了。

判断T的温度值是否小于0,如果是我们就加上减号,不小于0那么就是正的,我们需要利用一个变量来存储这个T的这个温度,然后下面就是在屏幕显示Tshow这个值。但是这里我么需要显示两部分。因为温度有小数点,我们需要显示出来。但是小数点我们需要先转换为正数*10000得到后面小数的5位后,再求余10000这样就可以的出后面的5位小数显示了。再强转一下数据类型

现在温度也显示出来了,然后相对应的这个位置阈值也显示了,那么我们现在就要利用按键来调整上下阈值

//阈值判断if(KeyNum11 == 1)            //独立按键1{THigh++;              //高温度区域加if(THigh>=125)THigh=125;      //判断不得超过温度测量范围AT24C02_writeByte(0,THigh);      //每次按键值都写THigh的数据存储到0地址delay(5);}if(KeyNum11 == 2)          //独立按键2{THigh--;               //高温度区域减if(THigh<=TLOW)THigh++;       //判断高温不得低过低温范围AT24C02_writeByte(0,THigh);       //每次按键值都写THigh的数据存储到0地址delay(5);}THigh=AT24C02_ReadByte(0);      //读取存储值if(KeyNum11 == 3)             //独立按键3{TLOW++;                   //低温度区域加if(TLOW>=THigh)TLOW--;   //判断低温不得高过高温范围AT24C02_writeByte(1,TLOW);     //写存储值delay(5);}if(KeyNum11 == 4)               //独立按键4{TLOW--;                 //低温度区域减if(TLOW<=-125)TLOW=-125;     //判断不得超过温度测量范围AT24C02_writeByte(1,TLOW);   //写存储值delay(5);}TLOW=AT24C02_ReadByte(1);        //读取存储值

我们当前利用四个按键,分别控制最高温度的一个加减和最小温度的一个加减。

按键第一个就是控制最高温度一个加,但是不能加超过125度,因为DS18B20最高只能测量125度,然后我们把这个温度的值,存到AT24C02的一个储存芯片中,这样我们每次关机再开的时候,就不需要重新调整温度的一个范围,让他始终保持我们关机的时候的一个温度。

然后按键2是控制最高温度的减,但是这个最高温度不能低于最低温度的值,所以我们这样要判断同时也是存到AT24C02的芯片中。最后我们把这个芯片中存到的值返回到我们的 THigh=AT24C02_ReadByte(0);      //读取存储值这个变量中。

第三个按键就是控制低温度的调高阈值,通用的道理这个低温度的最高不能超过最高温度。也把值存到AT24C02的芯片中,

第四个按键调整最低温度的减,不能低于-125度。然后存起来。后面再返回到变量去 TLOW=AT24C02_ReadByte(1);           //读取存储值

 if(T>THigh){LCD_ShowString(1,13,"OV:H");Beep_Time(100);                  //超过阈值蜂鸣器报警}else if(T<TLOW){LCD_ShowString(1,13,"OV:L");  //低过阈值蜂鸣器报警Beep_Time(40);}else {LCD_ShowString(1,13,"    "); //不超也不低Beep_Time(0);}  LCD_ShowSignedNum(2,4,THigh,3);  //保存读出每次设置的温度区域值,掉电不丢失LCD_ShowSignedNum(2,12,TLOW,3);}}

最后我们判断我们的T的温度与我们调节的温度阈值如果超过或者的低于我们都要让它报警,也就是蜂鸣器响起。最后面显示出来调节的阈值,同时也保证掉电不丢失。

以下就是全部代码

unsigned char Ack;
float T,TShow;
char TLOW,THigh;
unsigned char KeyNum11;void Temperature_Alarm(void)
{LCD_ShowString(1,1,"T:");LCD_ShowString(2,1,"TH:");LCD_ShowString(2,9,"TL:");DS18B20_CovertT(); delay(1000);      while(1){ KeyNum11=key_LoopVaule();      DS18B20_CovertT();              T=DS18B20_ReadT();             if(T<0){                              LCD_ShowChar(1,3,'-');TShow=-T;  }else{LCD_ShowChar(1,3,'+');   TShow=T;}LCD_ShowNum(1,4,TShow,3);      LCD_ShowChar(1,7,'.');LCD_ShowNum(1,8,(unsigned int)(TShow*10000)%10000,4);   if(KeyNum11 == 1)          {THigh++;             if(THigh>=125)THigh=125;      AT24C02_writeByte(0,THigh);   delay(5);}if(KeyNum11 == 2)          {THigh--;              if(THigh<=TLOW)THigh++;       AT24C02_writeByte(0,THigh);    delay(5);}THigh=AT24C02_ReadByte(0);     if(KeyNum11 == 3)             {TLOW++;                 if(TLOW>=THigh)TLOW--;    AT24C02_writeByte(1,TLOW);   delay(5);}if(KeyNum11 == 4)             {TLOW--;                    if(TLOW<=-125)TLOW=-125;     AT24C02_writeByte(1,TLOW);     delay(5);}TLOW=AT24C02_ReadByte(1);          if(T>THigh){LCD_ShowString(1,13,"OV:H");Beep_Time(100);               }else if(T<TLOW){LCD_ShowString(1,13,"OV:L");  Beep_Time(40);}else {LCD_ShowString(1,13,"    ");   Beep_Time(0);}  LCD_ShowSignedNum(2,4,THigh,3); LCD_ShowSignedNum(2,12,TLOW,3);}}

笔记——51控制DS18B20温度控制篇章之终章温度报警相关推荐

  1. 笔记——51控制DS18B20温度控制篇章2之读取温度值

    前面我们说到了时序初始化已经完成了,也就是说我么已经完成了单片机与DS18B20的通信,那么能实现通信,我们是不是就应该把DS18B20的这个芯片手册看一看了,因为不管你使用什么芯片,首先你要看到芯片 ...

  2. ds18b20温控报警c语言,51单片机DS18B20温度控制报警程序(可设置温控范围)

    DS18B20的管脚定义: 1.GND 2.DQ 3.VCC DQ   →  P1.7 K1   →  P3.2 K2   →  P3.4 K3   →  P3.6 K4   →  P3.7 温度显示 ...

  3. 基于51单片机的DS18B20温度控制加热降温系统设计

    基于51单片机的DS18B20温度控制加热降温系统设计 1 开发环境 2 功能说明介绍 3 仿真图 4 程序 5 原理图 6 视频讲解 7 设计报告 7.1 设计目的 7.2 概述 7.3 国内外研究 ...

  4. 51单片机DS18B20温度报警器proteus仿真设计_可调上下限

    51单片机DS18B20温度报警器proteus仿真设计_可调上下限 (仿真+源码+原理图+报告) 原理图:Altium Designer 仿真版本:proteus 7.8 程序编译器:keil 4/ ...

  5. matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc

    基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...

  6. 51单片机~DS18B20温度传感器

    51单片机~DS18B20温度传感器 (一)简介说明: (二)接线: 1. 内部结构: 正温度前五位是0. 负温度前五位是1. 由LS,MS组成的四位十六进制数,和16位二进制数.(先MS后LS) 结 ...

  7. 51单片机DS18B20温度传感器及数码管显示温度

    51单片机DS18B20温度传感器及数码管显示温度 大家好,今天给大家带来的代码及原理解释是,在51单片机在接收DS18B20温度传感器数据,并且在数码管上实时显示温度 DS18B20及数码管显示温度 ...

  8. S0011基于51单片机DS18B20温控风扇仿真设计

    基于51单片机DS18B20温控风扇仿真设计 (仿真+原理图+源码+设计报告) 原理图:Altium Designer 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程 ...

  9. 51单片机-DS18B20单片

    51单片机-DS18B20单片 51单片机-DS18B20单片 DS18B20时序 初始化时序 读时序 写时序 DS18B20单片操作流程 ROM指令 功能指令 51单片机-DS18B20单片 需要读 ...

最新文章

  1. 使用工作集(Working Set)整理项目
  2. 修改$_env php,Laravel如何友好的修改.env配置文件详解
  3. android surfaceflinger研究----SurfaceFlinger loop
  4. 看动画学算法之:排序-归并排序
  5. 弘成科技 java单例模式
  6. 如何使用SAP CRM增强工具AET创建Table表格类型的增强
  7. AEF横空出世——几个重要的概念
  8. BaseAudioContext
  9. phpcms v9前台getshell
  10. SSH框架微服务改进实战
  11. 《算法笔记》的codeup打不开怎么办
  12. 建模与仿真matlab论文,基于MATLAB的无线信道建模与仿真.doc
  13. 如何在dw中html字体变大,DW网页的字体大小怎么设置
  14. 开机后黑屏看不到桌面_电脑开机后黑屏不显示桌面解决方法
  15. [编程题] 庆祝61
  16. 【翻译】CVPR2022: Pyramid Grafting Network for One-Stage High ResolutionSaliency Detection
  17. 怎么把ppt转化成图片
  18. mcs51单片机嵌入式c语言习题,MCS-51单片机复习题参考题库.doc
  19. 整体大于部分_Redis典型应用场景实战之抢红包系统整体业务流程分析赠书
  20. Linux 如何查看内存使用情况

热门文章

  1. linux cat eof如何指定变量,Linux cat和EOF的使用
  2. J-link无法下载固件问题
  3. SourceTree提交vue前端代码报错git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\
  4. [global::]是什么形式?什么意思?
  5. 折线迷你图怎么设置_Excel2013如何使用迷你图展示数据?
  6. 【CSS】来自新时代的CSS
  7. 小米 11 Ultra 正式发布,自称 “安卓之光”
  8. r ridge回归_R语言逻辑回归和泊松回归模型对发生交通事故概率建模
  9. 辨别亦真亦假的Svchost.exe
  10. C# 调用Windows media play 播放器方法