附上程序:
#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=temp%10000/1000;
shi=temp%1000/100;
ge=temp%100/10;
xiao=temp%10;
P0=0x0ff;
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(3):
LSA=1;LSB=1;LSC=0; P0=smgduan[bai];break;//显示第3位,即百位
case(2):
LSA=0;LSB=1;LSC=0; P0=smgduan[shi];break;//显示第2位,即十位
case(1):
LSA=1;LSB=0;LSC=0; P0=xiaoshu[ge];break;//显示第1位,即个位
case(0):
LSA=0;LSB=0;LSC=0; P0=smgduan[xiao];break;//显示第0位,即小数位
}
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
} |