资讯详情

[请教]普中51单片机与max6675芯片用k型热电偶检测温度的问题

附上程序:

#include "reg52.h"//头文件

#include "absacc.h"

#include "math.h"

#include "intrins.h"

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

sbit SO=P1^0;

sbit SCK=P1^1;

sbit CS=P1^2;

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

void delay(unsigned int i)

{

while(i--);

}

uint Re_Convert (void); ///温度转换

void DigDisplay(); ///温度显示

uchar qian=0,bai=0,shi=0,ge=0,xiao=0;

uint P_Temp;

float wendu;

uchar code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~F的值

uchar code xiaoshu[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //显示0~F的值(含小数点)

void main(void) //主程序

{

delayNOP();

SO =0;

while(1)

{

P_Temp=Re_Convert();

wendu=0.25*P_Temp;//P_Temp =(1024*P_Temp)/4096

delayNOP();

DigDisplay();

P_Temp=0;

wendu=0;

}

}

uint Re_Convert() ///热电偶转换

{

unsigned int i;

unsigned long tdata;

tdata=0;

SCK = 1;

SO=0;

CS = 1; //选择从机

delayNOP();

CS=0;

for(i=0;i<16;i )

{

tdata = tdata<<1; // 左移,或_crol_(temp,1)

delayNOP();

SCK=0;

if(SO == 1)

tdata = tdata|0x01; // 如果接收到的位置为1,则数据的最后位置为1

else

tdata = tdata & 0xfe; // 否则,数据的最后位置0

delayNOP();

SCK=1;

delayNOP();

}

tdata=tdata<<1;

tdata=tdata>>4;

return(tdata);

}

void DigDisplay()///温度显示

{

uchar i;

uint temp=wendu*10;

bai=temp000/1000;

shi=temp00/100;

ge=temp0/10;

xiao=temp;

P0=0x0ff;

for(i=0;i<4;i )

{

switch(i) //位选,选择点亮的数码管,

{

case(3):

LSA=1;LSB=1;LSC=0; P0=smgduan[bai];break;//显示第三位,即百位

case(2):

LSA=0;LSB=1;LSC=0; P0=smgduan[shi];break;//显示第二位,即十位

case(1):

LSA=1;LSB=0;LSC=0; P0=xiaoshu[ge];break;//显示第一位,即个位

case(0):

LSA=0;LSB=0;LSC=0; P0=smgduan[xiao];break;//显示第0位,即小数位

}

delay(100); ///间隔扫描一段时间

P0=0x00;//消隐

}

}

标签: f耐磨耐腐型热电偶电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台