国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

51單片機無接觸測溫程序源碼 mlx90614+lcd1602顯示

[復制鏈接]
樓主
eng 發表于 2021-6-20 02:20:31 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
本來想著把他改成32的用oled屏顯示的,一直沒有時間,有程序,誤差還可以,可以無接觸測體溫,而且還能測環境溫度,后期可以自己加個人體感應模塊或著超聲波,
制作出來的實物圖如下:
51單片機無接觸測溫程序源碼 mlx90614+lcd1602顯示 1.png
布線參考(PCB工程暫不分享,大家可以參考此圖自行畫)
51單片機無接觸測溫程序源碼 mlx90614+lcd1602顯示 2.png

完整程序代碼-MLX90614.rar (65.33 KB, 售價: 3 E幣)
部分代碼:
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include<stdio.h>         
  3. #include<intrins.h>
  4. #include "delay.h"
  5. #include "1602.h"
  6. #include "mlx90614.h"

  7. sbit buzzer=P1^0; //引腳定義
  8. sbit key1=P2^0;
  9. sbit key2=P2^1;

  10. unsigned long time_20ms;  //定時計數
  11. char dis0[16];              //液晶數組顯示暫存
  12. char dis1[16];
  13. unsigned int setNum = 37; //設置值
  14. //---------------------------------------
  15. //Name: CALTEMP           
  16. //Temperature data is T=(Data)*0.02-273.15
  17. //---------------------------------------
  18. bit rekey =0;//防止按鍵重復按下
  19. bit disFlag =0;//更新顯示標志
  20. unsigned int  Tem;       //溫度
  21. float objTemp,envTemp;     //物體溫度和環境溫度

  22. void Init_Timer0(void);     //函數聲明

  23. void main (void)
  24. {   
  25.     Init_Timer0();        //定時器0初始化
  26.                  
  27.     LCD_Init();           //初始化液晶
  28.     DelayMs(20);          //延時有助于穩定
  29.     LCD_Clear();

  30.     while (1)         //主循環
  31.     {
  32.         if(disFlag==1)       //顯示標志
  33.         {
  34.             Tem=ReadObjectTemp();     //讀取實物溫度
  35.             objTemp=(float)(Tem)*0.02-273.15;
  36.    
  37.             Tem=ReadEnvironTemp();     //讀取環境溫度
  38.             envTemp=(float)(Tem)*0.02-273.15;

  39.             sprintf(dis0,"E: %4.1f'C   ",envTemp);//打印溫度值
  40.             LCD_Write_String(0,0,dis0);//顯示
  41.             sprintf(dis1,"O:%5.1f'C   %3d  ",objTemp,setNum);//打印溫度設置值
  42.             LCD_Write_String(0,1,dis1);//顯示

  43.             if(objTemp>setNum)
  44.             {buzzer =0;    }    //溫度高蜂鳴器鳴叫
  45.             else
  46.             {buzzer=1;}        //溫度低 停止
  47.             disFlag = 0;

  48.         }

  49.         if((key1 == 0)||(key2 == 0))   //有按鍵按下
  50.         {
  51.              if(rekey == 0)
  52.             {
  53.                 DelayMs(10);
  54.                 if(key1 == 0)  //按鍵1按下
  55.                 {
  56.                     rekey =1;    //防止重復按下
  57.                     if(setNum<200) setNum++;      //++
  58.                 }
  59.                 else if((key2 == 0))//按鍵2按下
  60.                 {
  61.                      rekey =1;    //防止重復按下
  62.                     if(setNum>0) setNum--;        //--
  63.                 }
  64.             }
  65.         }
  66.         else
  67.         {
  68.             rekey = 0;     //防止重復按下
  69.         }                    
  70.     }
  71. }


  72. void Init_Timer0(void)
  73. {
  74.     TMOD |= 0x01;      //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響            
  75.     TH0=(65536-20000)/256;          //重新賦值 20ms
  76.     TL0=(65536-20000)%256;
  77.     EA=1;            //總中斷打開
  78.     ET0=1;           //定時器中斷打開
  79.     TR0=1;           //定時器開關打開
  80. }

  81. void Timer0_isr(void) interrupt 1
  82. {
  83.     TH0=(65536-20000)/256;          //重新賦值 20ms
  84.     TL0=(65536-20000)%256;   
  85.     time_20ms++;
  86.     if(time_20ms%20==0)      //定時更新顯示
  87.     {disFlag = 1;}
  88. }
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 06:06

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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