本帖最后由 lovepig200 于 2013-7-20 14:57 编辑
放大100倍的程序
用楼主的改的
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint tt=0;
uint code RTD_TAB_PT100[211] = // 表格是以5度为一步,即-200, -195, - 190.....
{
1852,2068,2283,2497,2710,2922,3134,3344,3554,3764, // -200 ~ -155 10
3972,4180,4388,4594,4800,5006,5211,5415,5619,5823, // -150 ~ -105
6026,6228,6430,6631,6833,7033,7233,7433,7633,7832, // -100 ~ -55
8031,8229,8427,8625,8822,9019,9216,9412,9609,9804, // -50 ~ -5
10000,10195,10390,10585,10779,10973,11167,11361,11554,11747, // 0 ~ 45
11940,12132,12324,12516,12708,12899,13090,13280,13471,13661, // 50 ~ 95
13851,14040,14229,14418,14607,14795,14983,15171,15358,15546, // 100 ~ 145
15733,15919,16105,16291,16477,16663,16848,17033,17217,17402, // 150 ~ 195
17586,17769,17953,18136,18319,18501,18684,18866,19047,19229, // 200 ~ 245
19410,19591,19771,19951,20131,20311,20490,20670,20848,21027, // 250 ~ 295
21205,21383,21561,21738,21915,22092,22268,22445,22621,22796, // 300 ~ 345
22972,23147,23321,23496,23670,23844,24018,24191,24364,24537, // 350 ~ 395
24709,24881,25053,25225,25396,25567,25738,25908,26078,26248, // 400 ~ 445
26418,26587,26756,26925,27093,27261,27429,27597,27764,27931, // 450 ~ 495
28098,28264,28430,28596,28762,28927,29092,29256,29421,29585, // 500 ~ 545
29749,29912,30075,30238,30401,30563,30725,30887,31049,31210, // 550 ~ 595
31371,31531,31692,31852,32012,32171,32330,32489,32648,32806, // 600 ~ 645
32964,33122,33279,33436,33593,33750,33906,34062,34218,34373, // 650 ~ 695
34528,34683,34838,34992,35146,35300,35453,35606,35759,35912, // 700 ~ 745
36064,36216,36367,36519,36670,36821,36971,37121,37271,37421, // 750 ~ 795
37570,37719,37868,38017,38165,38313,38460,38608,38755,38902, // 800 ~ 845
39048 // 850
};
/***********************************************************************
*FunName: float CalculateTemperature(float fR)
*
*In: fR -> PT100的电阻值。
*
*Out: fTem -> 测得的温度值。
*
*Discription: 将电阻值查表算出温度值。
*
*Notes: 采用2分查找法。
*
************************************************************************/
float CalculateTemperature(uint fR)
{
float fTem;
float fLowRValue;
float fHighRValue;
int iTem;
uchar i;
uchar cLimite = 0xFF;
uchar cBottom, cTop;
if (fR < RTD_TAB_PT100[0]) // 电阻值小于表格最小值,低于量程下限。
{
return 0.0;
}
if (fR > RTD_TAB_PT100[210]) // 电阻值大于表格最大值,超出量程上限。
{
return 1.0;
}
cBottom = 0;
cTop = 210;
for (i=105; (cTop-cBottom)!=1; ) // 2分法查表。
{
if (fR < RTD_TAB_PT100)
{
cTop = i;
i = (cTop + cBottom) / 2;
}
else if (fR > RTD_TAB_PT100)
{
cBottom = i;
i = (cTop + cBottom) / 2;
}
else
{
iTem = (uint)i * 5 - 200;
fTem = (float)iTem;
return fTem;
}
}
iTem = (uint)i * 5 - 200;
fLowRValue = RTD_TAB_PT100[cBottom];
fHighRValue = RTD_TAB_PT100[cTop];
fTem = ( ((fR - fLowRValue)*5) / (fHighRValue - fLowRValue) ) + iTem; // 表格是以5度为一步的。
// 两点内插进行运算。
return fTem;
}
void main()
{
tt= (uint)(CalculateTemperature(22620) *100);
while(1);
} |