单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:2268|回复:2

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

[复制链接]
ID:1053191发表于 2022-11-22 10:00|显示全部楼层
需要的可以自行下载(包括原理图文件)
51hei图片20221122095925.png


单片机源程序如下:
  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. }
复制代码
51hei.png
Keil代码与Proteus仿真下载:
18b20ccc.rar(183.14 KB, 下载次数: 264)

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

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 单片机教程网