标题:
单片机仿真NTC热敏电阻温度上传到上位机 源程序
[打印本页]
作者:
小面爱电子
时间:
2022-3-9 16:17
标题:
单片机仿真NTC热敏电阻温度上传到上位机 源程序
电路原理图如下:
WZN@CK@1H$H{E_F}GEFM.png
(68.91 KB, 下载次数: 73)
下载附件
2022-3-9 16:12 上传
单片机源程序如下:
#include <reg51.h>
#include <intrins.h>
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
#define data_out P1 //数据输出口
#define weicon P2 //位控
#define K 273.15
#define T0 (25.0+K)
#define R0 10000.0
#define B 3455.0
sbit sdo = P0^0; //tlc549:sdo端
sbit cs = P0^1;
sbit sclk = P0^2;
sbit LE1 = P3^6; //锁存端
sbit LE2 = P3^7;
uchar code dis_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x9c,0xc6,0xbf};
uint time;
uint code temp_table[] = {4446,4224,4019,3830,3654,3491,3338,3196,3063,2938, //-10~-1
2764,2657,2555,2459,2324,2240,2121,2047,1942,1876, //0~9
1813,1723,1639,1585,1509,1461,1392,1348,1285,1245, //10~19
1188,1151,1098,1064,1015,984,939,910,868,841, //20~29
815,777,753,729,695,673,651,630,610,590, //30~39
560,542,523,505,488,479,462,446,430,414, //40~49
406 //50度
};
void delay18us()
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
void delay200us()
{
uchar i;
i = 100;
do
{
_nop_();
}while(--i);
}
uchar convert (void)
{
uint i,vtemp;
cs = 1;
sclk = 0;
sdo = 1;
cs = 0;
delay18us();
for(i = 0;i < 8;i++)
{
sclk = 1;
_nop_();_nop_();_nop_();_nop_();
vtemp = vtemp<<1;
if(sdo)vtemp = vtemp|0x01;
sclk = 0;
_nop_();_nop_();
}
cs = 1;
//vtemp = vtemp*1.96;
return (vtemp);
}
void display(uchar a,uchar b)
{
LE2 = 1;
weicon = 0x01<<a;
// LE2 = 1;
LE2 = 0;
LE1 = 1;
data_out = b;
// LE1 = 1;
LE1 = 0;
delay200us();
delay200us();
delay200us();
data_out = 0xff;
LE1 = 1;
LE1 = 0;
//while(1);
}
void ntc_display(int temp)
{
static uchar c[] = {0x08,8,8,8,0x0a,0x0b};
int i ;
static int t_old;
if(t_old != temp)
{
t_old = temp;
if(temp >= 0)
{
for (i = 3;i >= 0;i--)
{
c[i] = temp%10;
/*SBUF = '0'+c[i];
while(!TI);
;
TI = 0;*/
temp /= 10;
}
for(i = 0;i <= 2;i++)
{
SBUF = '0'+c[i];
while(!TI);
;
TI = 0;
}
}
else
{
temp = 0-temp;
for (i = 3;i >= 0;i--)
{
c[i] = temp%10;
temp /= 10;
}
c[0] = 0x0c;
SBUF = '-';
while(!TI);
;
TI = 0;
for(i = 1;i <= 2;i++)
{
SBUF = '0'+c[i];
while(!TI);
;
TI = 0;
}
}
SBUF = '.';
while(!TI);
;
TI = 0;
SBUF = '0'+c[3];
while(!TI);
;
TI = 0;
SBUF = '\'';
while(!TI);
;
TI = 0;
SBUF = 'C';
while(!TI);
;
TI = 0;
SBUF = ' ';
while(!TI);
;
TI = 0;
SBUF = ' ';
while(!TI);
;
TI = 0;
/*SBUF = (c[0]<<4)|c[1];
while(!TI);
;
TI = 0;
SBUF = (c[2]<<4)|c[3];
while(!TI);
;
TI = 0;*/
}
display(0,dis_code[c[0]]);
display(1,dis_code[c[1]]);
display(2,dis_code[c[2]]&0x7f);
display(3,dis_code[c[3]]);
display(4,dis_code[c[4]]);
display(5,dis_code[c[5]]);
}
float lookup(float a)
{
int t,r,i = 0;
r = (int)(a);
while(1)
{
if((temp_table[i] <= r) && i < 61)
break;
if(i > 60)
break;
i++;
}
t = i*100.0+((temp_table[i]-(float)r)*100.0)/(temp_table[i] - temp_table[i+1]);
return t/10-100.0;
}
void main(void)
{
int tem;
float t_v;
float t_r;
float t;
TMOD = 0x21;//TMOD = 0x01;
TH1 = 0xfd;
TH1 = 0xfd;
SCON = 0x40;
PCON = 0x00;
TR1 = 1;
ET0 = 1;
EA = 1;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TR0 = 1;
time = 0;
while(1)
{
if(time = 20)
{
time = 0;
tem = convert();
t_v = (float)tem*500/256;
t_r = (t_v/(500.0-t_v))*1000; //t_r = (t_v*100)/((500-t_v)/10);
t=1/((1/T0)+(log(t_r/R0)/B));
tem = lookup(t_r);
ntc_display(tem);
}
}
}
void time_T0(void) interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
time++;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1