功能介绍:采用51单片机作为主控CPU,采用MAX6675的K型热电偶采集温度,通过按键设置报警值,并且将测量温度和报警值显示到LCD1602屏幕上面,当温度大于设置值,蜂鸣器产生报警,并且数据可以通过HC-05模块上传手机APP,文末有资料分享:
33-基于51单片机K型热电偶温度检测报警系统(程序+原理图+PCB+元件清单全套资料)
下面是程序部分展示,有中文注释,新手容易看懂
void Uart_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
TI=1;
ES = 1;
EA = 1;
}
void main(void)
{
unsigned char cnt = 11;
unsigned int t;
uchar xdata n;
int buf=25;
lcdinit();
writecom(0x40);
beep=1;
for(n=0;n<64;n++)
{
writedata(rom[n]);
}
Uart_Init();
while(1)
{
t=MAX6675_ReadReg();
Flag_connect=t&0x04; //读出数据的D2位是热电偶掉线标志位,该位为1表示掉线,该位为0表示连接
Flag_connect=Flag_connect>>2; //MAX6675是否在线
t = t<<1; //读出来的数据的D3~D14是温度值
t = t>>4;
MAX6675_Temp = t/4; //测得的温度单位是0.25,所以要乘以0.25(即除以4)才能得到以度为单位的温度值
if(k1==0) //设置值+
{
buf++;if(buf>999) buf=999;
}
if(k2==0) //设置值-
{
buf--;if(buf<1) buf=1;
}
writecom(0x80);
writedata('T');
writedata('M');
writedata('P');
writedata('=');
writedata(table[MAX6675_Temp%1000/100]);//显示数值 百 十 个
writedata(table[MAX6675_Temp%100/10]);
writedata(table[MAX6675_Temp%10]);
writedata('C');
writecom(0xc0);
writedata('S');
writedata('E');
writedata('T');
writedata('=');
writedata(table[buf%1000/100]);//显示设置值
writedata(table[buf%100/10]);
writedata(table[buf%10]);
writedata('C');
if(MAX6675_Temp>buf) beep=0;//大于预设值报警
else beep=1;
printf("TMP=%d C\r\n",MAX6675_Temp); //蓝牙串口打印温度
DelayMs(200);
}
}
下面是原理图和PCB展示;