MAX6675热电偶测温—51单片机C语言程序.c

/*************************************************************************
亲测可用,误差1-2摄氏度,元件是k型热电偶,51单片机,晶振11.0592,4位共阴数码管显示
**************************************************************************/
#include //头文件
#include "intrins.h"//_nop_();延时函数用
#define uchar unsigned char //用uchar代替unsigned char,1字节0-255
#define uint unsigned int //用uint代替nsigned int,2字节0-26653

sbit SO=P1^0; //P1.0口与SO相连
sbit CS=P1^1; //P1.1口与CS相连
sbit SCK=P1^2; //P1.2口与SCK相连

sbit dula=P2^6;//段选
sbit wela=P2^7;//位选

uint j,h;
float wendu;//4字节(6位数字)
uint Re_Convert();//热电偶数据读取,返回温度
void Disp_temp();//温度显示
uchar qian=0,bai=0,shi=0,ge=0,xiao=0;
uint P_Temp;
uint temp;
uchar code table3[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //共阴数码管
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned int z)//延时
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

uint Re_Convert() //热电偶数据读取,返回温度
{ uchar i;
unsigned long Temp_2;
Temp_2=0;
CS=1;
SCK=0;
_nop_();_nop_();
//这个_nop_()等效与汇编里面的NOP指令,也就是空一个机器周期,
//在51单片机中_nop_()等于空12个时钟周期【即一个机器周期】
CS=0;
for(i=0;i<16;i++)//16位数据读取
{
Temp_2<<=1;//向右移一位
_nop_();
SCK=1;//上升
if(SO==1){Temp_2=Temp_2|0x01;}
else Temp_2=Temp_2|0x00;
_nop_();
SCK=0;
_nop_();
}
CS=1; //读取完后对CS置1进行温度转换!MAX6675的转换时间是典型值:0.17s,最大值0.22s。
Temp_2=Temp_2<<1; //向左移一位,取0-14位
Temp_2=Temp_2>>4; //向右移4位,取3-14位
Temp_2=Temp_2*10/4;//变换为温度值--每LSB代表0.25度,注意:在此处先乘了个10
return(Temp_2);
}
void Disp_temp()//温度显示
{
uint temp;
// wendu=Re_Convert();// 热电偶数据读取,返回温度
temp=wendu;
xiao=temp%10; //取小数位数字
temp=temp/10;
ge =temp%10;//取个位数字
temp=temp/10;
shi =temp%10;//取十位数字
bai =temp/10;//去百位数字
//动态扫描显示各位数字

dula=0;
P0=table3[bai];
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay(1);

dula=0;
P0=table3[shi];
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay(1);

dula=0;
P0=table3[ge];
dula=1;
dula=0;
wela=0;
P0=0x7b;
wela=1;
wela=0;
delay(1);

dula=0;
P0=table3[xiao];
dula=1;
dula=0;
wela=0;
P0=0x77;
wela=1;
wela=0;
delay(1);

}
void main()//主程序
{
while(1)
{


for(j=250;j>0;j--)
{
if(j==250){wendu=Re_Convert();}
// 热电偶数据读取,返回温度,每刷新250次(大约0.5秒)进行一次MAX6675的温度转换,MAX6675的转换时间典型值:0.17s,最大值0.22s。
Disp_temp(); //温度显示
}
}
}

相关文档
最新文档