1000temp-1430)/43+25,应该主要是因为这个式子,这个式子里面用到了很多的近似值,像1430啊,43,1000啊,这些都是一个估计值,你看下或者网上搜下,把这几个数字改下,可能会好些把,我是菜菜鸟一个,不晓得其他的什么原因了。。。
热敏电阻测温度(程序+仿真)
#include<reg52h>
#include<intrinsh>
#include<mathh>
typedef unsignedchar uchar;
typedef unsignedint uint;
sbit CE = P1^1;
sbit STS=P1^0;
sbit RC=P1^4;
sbit A0=P1^3;
sbit CS=P1^2;
sbit RS = P1^5 ;
sbit RW = P1^6 ;
sbit EN = P1^7 ;
void delay_ms(uintz)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uintAD1674_Read(void)
{
uint temp;
uchar temp1,temp2;
CS=1; //片选信号
CE=0; //初始化,关闭数据采集
CS=0;
A0=0;
RC=0;
CE=1;//CE=1,CS=0,RC=0,A0=0启动12位温度转换
_nop_();
while(STS==1); //等待数据采集结束
CE=0; //芯片使能关闭
RC=1;
A0=0;
CE=1;//CE=1,CS=0,RC=1,12/8=1,A0=0 允许高八位数据并行输出
_nop_();
temp1=P0; //读取转换结果的高八位
CE=0; //芯片使能关闭
RC=1;
A0=1;
CE=1;//CE=1,CS=0,RC=1,12/8=0,A0=1 允许低四位数据 并行输出
_nop_();
temp2=P0; //读取转换结果的第四位
temp=((temp1<<4)|(temp2&0X0F)); //高位和低位合成实际温度,temp2为PO口的高四位
return (temp); //还回转换结果,右移四位是因为temp2为P0口的高四位
}
/
写数据
/
voidw_dat(unsigned char dat)
{
RS = 1;
//EN = 0;
P2 = dat;
delay_ms(5);
RW = 0;
EN = 1;
EN = 0;
}
/
写命令
/
voidw_cmd(unsigned char cmd)
{
RS = 0;
// EN = 0;
P2 = cmd;
delay_ms(5);
RW = 0;
EN = 1;
EN = 0;
}
/
发送字符串到LCD
/
voidw_string(unsigned char addr_start, unsigned char p)
{
unsigned char pp;
pp = p;
w_cmd(addr_start);
while (pp != '\0')
{
w_dat(pp++);
}
}
/
初始化1602
/
voidInit_LCD1602(void)
{
EN = 0;
w_cmd(0x38); // 162显示,57点阵,8位数据接口
w_cmd(0x0C); // 显示器开、光标开、光标允许闪烁
w_cmd(0x06); // 文字不动,光标自动右移
w_cmd(0x01); // 清屏
}
void process(uintdate,uchar add)
{
uchar A[7];
A[0]=date/1000%10+'0';
A[1]=date/100%10+'0';
A[2]='';
A[3]=date/10%10+'0';
A[4]=date%10+'0';
A[5]='C';
w_string(add,A);
}
void main()
{
uintVOL[25]={343,339,332,328,320,316,312,304,300,292,289,285,277,273,265,261,257,250,246,242,234,230,226,222,218};
uintTemper[25]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500};
uchar i,flag=0;
uint result,temp1,temp2;
float res;
Init_LCD1602();
w_string(0x80,"Temper:");
// w_string(0xC0,word2);
while (1)
{
res=(float)(AD1674_Read());
result=(uint)((res/20480-10)5000);
temp1=abs(result-VOL[0]);
for(i=1;i<25;i++)
{
temp2=abs(result-VOL);
if(temp1>=temp2)
{
temp1=temp2;
flag=i;
}
}
process(Temper[flag],0x80+7);
//process(result,0xc0);
//delay_ms(1000);
}
}
以上就是关于NTC温度探头的采集计算方程 我要stm32的案例,精确采集的方程案例谢谢!全部的内容,包括:NTC温度探头的采集计算方程 我要stm32的案例,精确采集的方程案例谢谢!、在proteus如何仿真ntc热敏电阻、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)