設(shè)計要求:
本設(shè)計由STC89C52單片機電路+1602液晶顯示電路+MLX90614ESF紅外非接觸溫度檢測電路+按鍵電路+蜂鳴器報警電路。
1、液晶實時顯示MLX90614ESF檢測的環(huán)境溫度值和被測物體溫度值,顯示中E環(huán)境溫度,O物體溫度。
2、可以通過按鍵設(shè)置溫度的閾值,如果MLX90614檢測到的溫度高于設(shè)置的閾值,則蜂鳴器報警,否則,蜂鳴器不報警。
include "1602.h"
#include "mlx90614.h"
sbit buzzer=P1^0; //引腳定義
sbit key1=P2^0;
sbit key2=P2^1;
unsigned long time_20ms; //定時計數(shù)
char dis0[16]; //液晶數(shù)組顯示暫存
char dis1[16];
unsigned int setNum = 37; //設(shè)置值
//---------------------------------------
//Name: CALTEMP
//Temperature data is T=(Data)*0.02-273.15
//---------------------------------------
bit rekey =0;//防止按鍵重復按下
bit disFlag =0;//更新顯示標志
unsigned int Tem; //溫度
float objTemp,envTemp; //物體溫度和環(huán)境溫度
void Init_Timer0(void); //函數(shù)聲明
void main (void)
{
Init_Timer0(); //定時器0初始化
LCD_Init(); //初始化液晶
DelayMs(20); //延時有助于穩(wěn)定
LCD_Clear();
while (1) //主循環(huán)
{
if(disFlag==1) //顯示標志
{
Tem=ReadObjectTemp(); //讀取實物溫度
objTemp=(float)(Tem)*0.02-273.15;
Tem=ReadEnvironTemp(); //讀取環(huán)境溫度
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);//打印溫度設(shè)置值
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;
資料借鑒于此紛傳
閱讀全文