基于51单片机的Pt100的温度计程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define ADC0801 XBYTE[0x7fff]

#define disp_dat P1

#define LED_n P2

sbit INTR=P3^2;

const uchar tab[]={

0xc0,0xf9,0xa4,0xb0,//0~3

0x99,0x92,0x82,0xf8,//4~7

0x80,0x90,0xff,0x86 //8、9、mie

};

const uchar tab_dot[]={

0x40,0x79,0x24,0x30,//0.~3.

0x19,0x12,0x02,0x78,//4.~7.

0x00,0x10, 0xff,0x86//8.、9.、mie、E

};

uchar T[4]={1,0,4,5};

uchar tem[11]={10,10,20,13,11,11,15,21,18,29,11};

uchar T_num=20,sam_n=0;

/************************函数声明***********************/ void delay(int n); //延时函数

void init_T0(void); //定时器T0初始化void disp_seg(uchar n,uchar d_dat); //显示函数

uchar AD_dat(void); //AD转换函数uchar median(uchar *dat,uchar num_d); //中值滤波函数float account_res(void); //电阻值计算函数

float temperature(void); //计算温度函数

void adj_t(void); //调整显示数据函数void disp(void); //温度显示程序void renovate(void); //更新显示数据

/*********************主程序*********************/

main()

{

init_T0(); //初始化T0

while(1)

{

disp(); //调用显示函数

renovate(); //更新显示数据};

}

/*****************温度显示函数*****************/

void disp(void)

{

uchar i;

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

{

disp_seg(i,T[i]);

}

}

/***、、、、、、、、************更新显示数据函数*******、、、、、、、、、、、、、、、、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。********/ void renovate(void)

{

if(sam_n==11) //去完11个采样值

{

sam_n=0; //清零采样计数器

adj_t(); //调用数据调整程序

}

}

/******************延时函数********************/

void delay(int n)

{

int i,j;

for (i=0;i

for (j=0;j<1000;j++);

}

/****************定时器T0初始化****************/

void init_T0(void)

{

TMOD=0x01; //工作方式1

TH0=0x4c; //定时50ms

TL0=0x00;

ET0=1; //允许定时器T0中断

EA=1; //开总中断

TR0=1; //启动定时器T0

}

/*******************显示函数*******************/

void disp_seg(uchar n,uchar d_dat)

{

LED_n=0xff; //清位控制状态

disp_dat=0xff; //清显示数据

LED_n=~(0x01<

if(n==2)

disp_dat=tab_dot[d_dat]; //送带小数点显示数据else

disp_dat=tab[d_dat]; //送无小数点显示数据

delay(1);

}

/********************AD转换函数*********************/

uchar AD_dat(void)

{

uchar temp;

ADC0801=0; //启动AD转换

while (INTR); //等待转换结束

temp=ADC0801; //读取转换值

return(temp);

}

/*******************中值滤波函数*********************/

uchar median(uchar *dat,uchar num_d) //需要排序的数组

{

uchar i,j,temp;

for (i=0;i

{

if (dat[i]>dat[i+1])

{

temp=dat[i];

dat[i]=dat[i+1];

dat[i+1]=temp;

}

}

return(dat[(num_d-1)/2]); //取中值并返回

}

/*******************电阻值计算函数*********************/

float account_res(void)

{

uchar temp;

float temp_r;

temp=median(tem,11); //利用中值法求取中间值

temp_r=((float)temp)*150/255+100;

return(temp_r);

}

/*****************计算温度函数*******************/

float temperature(void)

{

float temp1,T_out;

uchar temp2;

temp1=account_res(); //计算Pt100阻值

temp2=(uchar)temp1; //取Pt100阻值高位

if(temp2<100)

相关文档
最新文档