基于51单片机MAX6675的热电偶智能体温度检测proteus仿真程序设计

硬件设计

(末尾附文件)

本系统采用的是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

.

  • 3
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值