找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3466|回復: 2
收起左側

基于51單片機的LCD1602+DS18B20溫度報警器Proteus仿真圖代碼

  [復制鏈接]
ID:1053191 發(fā)表于 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. //===================非警告狀態(tài)顯示字符串、數(shù)字提示==============================
  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;                        //將溫度變?yōu)檎龜?shù)
  80.                 }
  81.                 else                                //如果溫度大于等于0
  82.                 {
  83.                         LCD_ShowChar(2,5,' ');        //顯示正號
  84.                 }
  85.                
  86.                 LCD_ShowNum(2,6,T,2);                //顯示溫度整數(shù)部分
  87.                 LCD_ShowChar(2,8,'.');                //顯示小數(shù)點
  88.                 LCD_ShowNum(2,9,(unsigned long)(T*10)%10,1);//顯示溫度小數(shù)部分        
  89.         }        
  90. }
復制代碼
51hei.png
Keil代碼與Proteus仿真下載:
18b20ccc.rar (183.14 KB, 下載次數(shù): 292)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:245820 發(fā)表于 2023-4-10 08:58 | 顯示全部樓層
18b20和1602的結合。值得學習
回復

使用道具 舉報

ID:1125696 發(fā)表于 2024-6-18 11:33 | 顯示全部樓層
求帖代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表