本來想著把他改成32的用oled屏顯示的,一直沒有時間,有程序,誤差還可以,可以無接觸測體溫,而且還能測環境溫度,后期可以自己加個人體感應模塊或著超聲波,
制作出來的實物圖如下:
1.png (275.78 KB)
下載附件
2021-6-20 02:18 上傳
布線參考(PCB工程暫不分享,大家可以參考此圖自行畫)
2.png (541.13 KB)
下載附件
2021-6-20 02:18 上傳
完整程序代碼-MLX90614.rar
(65.33 KB, 售價: 3 E幣)
2021-6-20 02:19 上傳
點擊文件名下載附件
售價: 3 E幣 [記錄]
[ 購買]
部分代碼:
- #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
- #include<stdio.h>
- #include<intrins.h>
- #include "delay.h"
- #include "1602.h"
- #include "mlx90614.h"
- sbit buzzer=P1^0; //引腳定義
- sbit key1=P2^0;
- sbit key2=P2^1;
- unsigned long time_20ms; //定時計數
- char dis0[16]; //液晶數組顯示暫存
- char dis1[16];
- unsigned int setNum = 37; //設置值
- //---------------------------------------
- //Name: CALTEMP
- //Temperature data is T=(Data)*0.02-273.15
- //---------------------------------------
- bit rekey =0;//防止按鍵重復按下
- bit disFlag =0;//更新顯示標志
- unsigned int Tem; //溫度
- float objTemp,envTemp; //物體溫度和環境溫度
- void Init_Timer0(void); //函數聲明
- void main (void)
- {
- Init_Timer0(); //定時器0初始化
-
- LCD_Init(); //初始化液晶
- DelayMs(20); //延時有助于穩定
- LCD_Clear();
- while (1) //主循環
- {
- if(disFlag==1) //顯示標志
- {
- Tem=ReadObjectTemp(); //讀取實物溫度
- objTemp=(float)(Tem)*0.02-273.15;
-
- Tem=ReadEnvironTemp(); //讀取環境溫度
- envTemp=(float)(Tem)*0.02-273.15;
- sprintf(dis0,"E: %4.1f'C ",envTemp);//打印溫度值
- LCD_Write_String(0,0,dis0);//顯示
- sprintf(dis1,"O:%5.1f'C %3d ",objTemp,setNum);//打印溫度設置值
- LCD_Write_String(0,1,dis1);//顯示
- if(objTemp>setNum)
- {buzzer =0; } //溫度高蜂鳴器鳴叫
- else
- {buzzer=1;} //溫度低 停止
- disFlag = 0;
- }
- if((key1 == 0)||(key2 == 0)) //有按鍵按下
- {
- if(rekey == 0)
- {
- DelayMs(10);
- if(key1 == 0) //按鍵1按下
- {
- rekey =1; //防止重復按下
- if(setNum<200) setNum++; //++
- }
- else if((key2 == 0))//按鍵2按下
- {
- rekey =1; //防止重復按下
- if(setNum>0) setNum--; //--
- }
- }
- }
- else
- {
- rekey = 0; //防止重復按下
- }
- }
- }
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
- TH0=(65536-20000)/256; //重新賦值 20ms
- TL0=(65536-20000)%256;
- EA=1; //總中斷打開
- ET0=1; //定時器中斷打開
- TR0=1; //定時器開關打開
- }
- void Timer0_isr(void) interrupt 1
- {
- TH0=(65536-20000)/256; //重新賦值 20ms
- TL0=(65536-20000)%256;
- time_20ms++;
- if(time_20ms%20==0) //定時更新顯示
- {disFlag = 1;}
- }
復制代碼
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|