找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2819|回复: 2
打印 上一主题 下一主题
收起左侧

基于51单片机的LCD1602+DS18B20温度报警器Proteus仿真图代码

[复制链接]
跳转到指定楼层
楼主
需要的可以自行下载(包括原理图文件)


单片机源程序如下:
  1. #include <REGX51.H>

  2. #include "18b20.h"
  3. #include "LCD1602.h"
  4. #include <INTRINS.H>
  5. #include "Buzzer.h"

  6. sbit K1=P3^0;
  7. sbit K2=P3^1;
  8. sbit K3=P3^2;
  9. float T;
  10. unsigned flag=0;     //转换上下限温度设置

  11. main()
  12. {
  13.     int high=37,high1=37,low=0,low1=0;//警告温度上下限,不能用unsigned
  14.         LCD_Init();                                   //lcd初始化
  15.         DS18B20_ConvertT();               //转换温度
  16.         delay(3000);               //等待转换
  17.         
  18.         while(1)
  19.         {
  20. //===================非警告状态显示字符串、数字提示==============================
  21.      LCD_ShowString(2,10,"'C");
  22.          LCD_ShowString(1,1,"high");
  23.          LCD_ShowString(1,9,"low");
  24.          LCD_ShowString(2,1,"Temp");
  25.          LCD_ShowNum(1,6,high1,2);        
  26.          LCD_ShowNum(1,13,low1,2);               
  27.          delay(400);
  28.                
  29. //==================报警温度上下限设置==============================
  30.         
  31.                 if(K1==0){delay(200);if(K1==0)flag++;}//上下限设置转换
  32.                
  33.                 if(flag%2==0)                                                  //上限设置        
  34.                 {
  35.                 if(K2==0){delay(400);if(K2==0)high++;}
  36.                 if(K3==0){delay(400);if(K3==0)high--;}
  37.             }
  38.                 if(flag%2!=0)                                                  //下限设置
  39.                 {
  40.                 if(K2==0){delay(400);if(K2==0)low++;}
  41.                 if(K3==0){delay(400);if(K3==0)low--;}
  42.             }
  43.                
  44. //=================零下温度处理=====================================
  45.                 if(high<0){high1=-high;LCD_ShowChar(1,5,'-');}
  46.           else high1=high;
  47.                 if(low<0){low1=-low;LCD_ShowChar(1,12,'-');}
  48.           else low1=low;
  49.                
  50. //===================判断报警======================================               
  51.                 while(DS18B20_ReadT()<(float)low||DS18B20_ReadT()>(float)high)
  52.                 {
  53.                         DS18B20_ConvertT();        //转换温度,保证温度回归正常值后跳出报警
  54.                         Buzzer_Time(200);
  55.                         LCD_ShowString(2,3,"warning!!!");
  56.                         delay(400);
  57.                         LCD_WriteCommand(0x01);//清屏,一定要清屏                                
  58.                 }
  59.                
  60.             while(DS18B20_ReadT()<low||DS18B20_ReadT()>high)
  61.                 {
  62.                         DS18B20_ConvertT();        //转换温度,保证温度回归正常值后跳出报警
  63.                         Buzzer_Time(200);
  64.                         LCD_ShowString(2,3,"warning!!!");
  65.                         delay(400);
  66.                         LCD_WriteCommand(0x01);//清屏,一定要清屏                                
  67.                 }
  68.                
  69.                
  70. //=====================显示温度====================================
  71.                

  72.                 DS18B20_ConvertT();        //转换温度
  73.                 T=DS18B20_ReadT();        //读取温度
  74.                 delay(100);          //等待转换,不能删除
  75.                
  76.                 if(T<0)                                //如果温度小于0
  77.                 {
  78.                         LCD_ShowChar(2,5,'-');        //显示负号
  79.                         T=-T;                        //将温度变为正数
  80.                 }
  81.                 else                                //如果温度大于等于0
  82.                 {
  83.                         LCD_ShowChar(2,5,' ');        //显示正号
  84.                 }
  85.                
  86.                 LCD_ShowNum(2,6,T,2);                //显示温度整数部分
  87.                 LCD_ShowChar(2,8,'.');                //显示小数点
  88.                 LCD_ShowNum(2,9,(unsigned long)(T*10)%10,1);//显示温度小数部分        
  89.         }        
  90. }
复制代码

Keil代码与Proteus仿真下载:
18b20ccc.rar (183.14 KB, 下载次数: 292)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:245820 发表于 2023-4-10 08:58 | 只看该作者
18b20和1602的结合。值得学习
回复

使用道具 举报

板凳
ID:1125696 发表于 2024-6-18 11:33 | 只看该作者
求帖代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表