
基于51单片机MAX6675的热电偶智能体温度检测proteus仿真程序设计
硬件设计(末尾附文件)本系统采用的是K型热电偶采集温度,因此本设计有温度采集部分,数据处理部分,温度显示部分,故障显示并显示部分组成。AT89S52单片机以及单片机的外围电路由晶振电路,复位电路,温度采集电路,温度显示电路,报警电路组成。系统设计框图如下:温度采集部分先使用K型热电偶对环境温度进行检查,再经过K型热电偶模数转换器—MAX6675,进行温度转换,将环境温度转换成12位二进制数据采集进
硬件设计
(末尾附文件)
本系统采用的是K型热电偶采集温度,因此本设计有温度采集部分,数据处理部分,温度显示部分,故障显示并显示部分组成。AT89S52单片机以及单片机的外围电路由晶振电路,复位电路,温度采集电路,温度显示电路,报警电路组成。系统设计框图如下:
温度采集部分
先使用K型热电偶对环境温度进行检查,再经过K型热电偶模数转换器—MAX6675,进行温度转换,将环境温度转换成12位二进制数据采集进单片机,以便单片机进行数据处理。在本系统中,由于是4路温度采集,因此使用串行的方式,依次对4路温度进行采集,并用单片机的P2口来传输与反馈数据。
数据处理部分
利用算法,在单片机中对采集到的数据进行处理,并转换成百、十、个位通过P0口进行输出。
温度显示部分
通过调用LCD的显示函数,将温度以两行的方式实时地显示在LCD上。
超限报警部分
通过软件算法,检测4路的温度是否超出人体正常体温,一旦超过这个范围,则进行报警,并在LCD上显示“发烧”,并且同时通过蜂鸣器以及LED灯,来进行声光报警。当检测到热电偶出现断耦时,在LCD上显示“断耦”,并且同时通过点亮对应的LED灯进行报警。
原理图:
仿真文件:
程序设计
数据显示部分
LCD上的汉字以及数据,都需要使用相应的字模软件来对汉字和数据进行编码,并存储在相应的数组中,通过相应的函数调用,将所需显示的数据,按照相应的格式显示在LCD上,以下为部分软件算法:
汉字显示函数:
void Display_HZ(uchar screen,uchar page,uchar column,uchar *p)
{
uchar i;
SelectScreen(screen);
Set_page(page); //写上半页:16*8
Set_column(column*16); //控制列
for(i=0;i<16;i++) //控制16列的数据输出,左右各64个点,可显示4个汉字
{
write_LCD_data(p[i]); //汉字的上半部分
}
Set_page(page+1); //写下半页:16*8
Set_column(column*16); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
write_LCD_data(p[i+16]); //汉字的下半部分
}
}
数字显示函数:
void Display_ASCII(uchar screen,uchar page,uchar column,uchar *p) //左右各64个点,可显示8个字符
{
uchar i;
SelectScreen(screen);
Set_page(page);
Set_column(column);
for(i=0;i<8;i++) //显示字符上半部分:8*8
{
write_LCD_data(p[i]);
}
Set_page(page+1); //显示字符下半部分:8*8
Set_column(column);
for(i=0;i<8;i++)
{
write_LCD_data(p[i+8]);
}
}
调用方式如下:
Display_HZ(1,0,2,huan);
Display_HZ(1,0,3,ying);
Display_ASCII(1,0,0*8,shuzi[10]);
Display_ASCII(1,0,1*8,shuzi[1]);
以下为LCD显示测量温度函数部分:(以1路为例)
void Disp_temp()
{
temp1=(int)(wendu1*10);
if(wendu1)
{
fen1=temp1%10;
temp1=temp1/10;
ge1=temp1%10;
shi1=temp1/10;
Display_ASCII(1,0,5*8,shuzi[fen1]);
Display_ASCII(1,0,3*8,shuzi[ge1]);
Display_ASCII(1,0,2*8,shuzi[shi1]);
}
else if(wendu1==0)
{
Display_ASCII(1,0,5*8,shuzi[0]);
Display_ASCII(1,0,3*8,shuzi[0]);
Display_ASCII(1,0,2*8,shuzi[0]);
}
Display_HZ(1,0,0,fuhao_1);
Display_ASCII(1,0,4*8,shuzi[13]);
Display_HZ(1,0,3,fuhao_ssd);
}
断耦检测函数
如果热电偶发生断耦标志位wendu=1,则LED长亮。
void cut_off_flag()
{
if(flag1 == 0)
{
LED1 = 1;
wendu1 = 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
if(flag2==0)
{
LED2 = 1;
wendu2 = 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
if(flag3==0)
{
LED3 = 1;
wendu3= 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
if(flag4==0)
{
LED4 = 1;
wendu4 = 0;
Display_HZ(1,6,3,duan);
Display_HZ(2,6,0,ou);
}
}
.
文件仅供参考:
链接:https://pan.baidu.com/s/1hiKxxP4TWmHU9329xDwX0g
提取码:swsu
.
更多推荐
所有评论(0)