基于51单片机的MAX6675热电偶温度数据采集(Proteus仿真)(串口打印数据)

一,MAX6675热电偶介绍

见此文
MAX6675

二,程序源码

#include "reg51.h"
#include "intrins.h"	
#include "stdio.h"
#define uchar unsigned char
#define uint  unsigned int				
#define DISPLAYLED  P1			
sbit CS  =P2^5; 
sbit SCK =P2^6;
sbit SO  =P2^7;  
typedef struct __MAX6675
{
	uint temperature;
	float finallyDat;
	uchar displaydat[4];
	uchar flag;
}MAX6675;
MAX6675 max6675={0,0.0,0};
uchar code str[]="max6675:  ";
void delay_ms(uint cnt);
void MAX6675_ReadData(void);
void Send_Char(uchar chr);
void Send_Str(uchar *str);
void displayData(void);
void UartInit(void);
//时序中各时间延时如下:(根据官方手册)
/*
	fSCL <= 4.3MHz
	tCH  >= 100ns
	tCL  >= 100ns
	tCSS >= 100ns
	tDV  <= 100ns
	tTR  <= 100ns
	tDO  <= 100ns 
*/
void MAX6675_ReadData(void)
{ 
	uchar i=0;   
	uint dat=0;	   
	CS=0; 
	SCK=0;     
	for(i=0;i<16;i++)		//get D15-D0 from 6675  
	{      
		SCK = 1; 
		_nop_();    
		dat=dat<<1;    
		if(SO)   
			dat=dat|0x01;   
		SCK=0;
		_nop_();     
	} 
	CS=1;   
	max6675.temperature=dat;
	max6675.temperature>>=3;//读出来的数据的D3~D14是温度值
	max6675.temperature&=~(0xf<<12);
	max6675.finallyDat=max6675.temperature*0.25;	   
} 
void delay_ms(uint cnt)	
{
	uint j,k;
	for(j=0;j<cnt;j++)
		for(k=0;k<114;k++);
}
void displayData(void)
{
	uint temp=max6675.finallyDat;
	DISPLAYLED=temp;
	Send_Str(str);
	max6675.displaydat[0]=temp/100+'0';
	max6675.displaydat[1]=temp%100/10+'0';
	max6675.displaydat[2]=temp%10+'0';
	Send_Char(max6675.displaydat[0]);
	Send_Char(max6675.displaydat[1]);
	Send_Char(max6675.displaydat[2]);
	SBUF=0x0A;
	SBUF=0X0D;
	while(!TI);
	SCON&=~(1<<1); 
}
void UartInit(void)
{
   TMOD = 0x20;    
   PCON = 0x00;       
   SCON = 0x50;//0101 0000
   TH1=0XF3;
   TL1=0XF3;	     
   TR1=1;	          							  
}
void Send_Char(uchar chr)
{
	SBUF=chr; 
	while(!TI);
	SCON&=~(1<<1);          
}

void Send_Str(uchar *str)
{
	while(*str!='\0')
	{
		SBUF=*str; 
		while(!TI);      
		TI=0;            
		str++;
	}
	SCON&=~(1<<1); 
}

int main(void)
{
	SCK=CS=1;
	UartInit();	
	while(1)
	{
		MAX6675_ReadData();
		displayData();		
		//delay_ms(10);
	}
	return 0;
}

三,仿真图:

在这里插入图片描述

四,仿真视频

基于51单片机的MAX6675数据采集(Proteus仿真)(串口打印数据)

猜你喜欢

转载自blog.csdn.net/liuxianfei0810/article/details/105920528
今日推荐