❶ 单片机测温原理
这需要温度感应头与单片机配合的,感应头把温度信号转换成电信号在转换成二进制数,输入单片机,单片机与储存的温度记录相比较,得出当前温度,输出。总得来说就是需要有外部原件把温度换成二进制信号(有的单片机可以直接识别电压信号,内部自动转换二进制信号),单片机识别与存储的数据进行比较得出温度。
❷ 单片机 温度测量控制
RS232是电脑串口用的,电压与单片机的TTL电平不一样,这个只要一个MAX232芯片进行电平转换就行了。
485是差分信号传输,电压是差分的,用MAX485进行电平转换就行了 .
简单来说 用一片MAX232或者一片MAX485就行了,他们的外围电路很简单,自己在网上查查资料吧~很多的。
希望对你有帮助。
❸ 单片机温度计上电显示温度怎么设置
1、首先通过DS18B20检测温度,若温度高于设定最大阈值,红灯亮,若温度低于设定最小阈值,黄灯亮。
2、其次通过ADC0832配合电压检测电路检测当前电压,通过蜂鸣器提供按键音。
3、最后通过显示屏显示数字温度计的温度下限阈值,当前温度值,电压表的电压值,通过按键切换界面,设置上下限阈值。
❹ 单片机 热敏电阻怎么检测他的温度的
用热敏电阻测温,一般是要加一个固定电阻做分压,然后用ADC来做的。用热敏电阻一般不精准。一般是用ADC得到AD值后再查表得到温度的。要温度分辨率高,查表数组就得很大。
❺ 单片机温度测试
LM358是双运放,感温线输出电压小的话建议两级放大
到图书馆去借《OP放大电路设计》,日本人写的,很好的一本书
电阻参数看了书就知道怎么定了
数字电路用的5V,所以LM358最好用+-5V供电
网上有PDF下载的
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=836807
❻ 单片机单点温度检测的方法
DS18B20 温度传感器 下面一段C程序 51的 就可以得到当前温度,可以多查查这方面的资料。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dq=P1^5;
void sdelay(unsigned int i)
{
while(i--);
}
ds18b20on(void)//ds18b20初始化
{
uchar x=0;
dq=1;
sdelay(8);
dq=0;
sdelay(80);
dq=1;
sdelay(14);
sdelay(20);
}
//读一个字节
readds18b20(void)
{
uchar i=0,dat=0;
for(i=8;i>0;i--)
{
dq=0;
dat>>=1;
dq=1;
if(dq)
dat|=0x80;
sdelay(4);
}
return(dat);
}
//写一个字节
writeds18b20(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
sdelay(5);
dq=1;
dat>>=1;
}
}
//读取温度
readtemperature(void)
{
uchar a=0,b=0;
uint t=0;
float tt=0;
ds18b20on();
writeds18b20(0xCC);//跳过ROM
writeds18b20(0x44);//开启温度转换
ds18b20on();
writeds18b20(0xCC);
writeds18b20(0xBE);//读暂存器
a=readds18b20();
b=readds18b20();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
❼ 单片机 热敏电阻测温
1、单片机热敏电阻测温首先要设计电路原理图,如图所示:
上图R3为上拉电阻,T1为接热敏电阻端,TC1为单片机AD采集口、电阻R4和电热C6为阻容滤波电路。
2、上拉电阻R3的选择:根据所用温度的范围,选择热敏电阻对应阻值范围的中间值最好,这样检测的温度偏差较小。
3、上拉电阻选定后,根据热敏电阻阻值表,算出温度真值表,用于软件查表,计算出温度值。在算温度真值表前,首先要确定单片机AD模块的分辨率。
4、单片机软件编程,滤波方法一般采用多次采集求累加和,去最大值和最小值,最后求平均。
5、单片机选择:一般选用8位单片机就够。但是,单片机自带的温度采集AD模块,最好选用10位分辨率,10位的AD模块分辨率高,温度采集精确。
6、以上为单片机热敏电阻测温的一般流程。
❽ 51单片机测温度,速度通过串口发送【求方法】
解决方法很多!一下程序是51单片机的程序。P0口是八段数码管,wela、la分别是数码管位选和段选。DS18S20接在P2^2口。
//安装目录下的EXE文件打开后可在电脑上显示当前温度值
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDS=P2^2;//defineinterfaceofDS18B20
sbitla=P2^6;
sbitwela=P2^7;
uintpre_temp=0;//储存当前温度值,以减少串口工作频率
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,<br>0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsignedcharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,<br>0x87,0xff,0xef};
voiddelay(uintcount)//delay
{
uinti;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
///////功能:串口初始化,波特率9600,方式1///////
voidInit_Com(void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
}
voiddsreset(void)//复位,初始化函数
{
uinti;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bittmpreadbit(void)//readabit读1位数据函数
{
uinti;
bitdat;
DS=0;i++;//i++fordelay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
uchartmpread(void)//readabytedate读1字节函数
{
uchari,j,dat;
dat=0;
for(i=1;i>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
voidtmpwritebyte(uchardat)//writeabytetods18b20向1820写一个字节数据函数
{
uinti;
ucharj;
bittestb;
for(j=1;j>1;
if(testb)//write1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;//write0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
voidtmpchange(void)//DS18B20beginchange开始获取数据并转换
{
dsreset();
delay(1);
tmpwritebyte(0xcc);//addressalldriversonbus写跳过读ROM指令
tmpwritebyte(0x44);//写温度转换指令
}
uinttmp()//getthetemperature读取寄存器中存储的温度数据
{
floattt;
uchara,b;
uinttemp;//variableoftemperature
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();//读低8位
b=tmpread();//读高8位
temp=b;
temp0;a--)
{
display(tmp());
}
}while(1);
}
❾ 87 单片机测量温度的方法有几种
单片机读取温度传感器的值,或者是热敏元器件再用ad换算
❿ 单片机温度检测的程序
你用的是DS18B20?这个程序你参考下#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2; //温度传感器信号线
sbit la=P2^6; //数码管段选线
sbit wela=P2^7; //数码管位选线
sbit beep=P2^3; //蜂鸣器
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uint temp;
float f_temp;
uint warn_l1=23;
uint warn_h1=29;
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0xbf,0x86,
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef}; //不带小数点的编码
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void dsreset(void) //18B20复位,初始化函数
{
uint i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bit tempreadbit(void) //读1位函数
{
uint i;
bit dat;
ds=0;i++; //i++ 起延时作用
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return (dat);
}
uchar tempread(void) //读1个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
void tempwritebyte(uchar dat) //向18B20写一个字节数据
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //写 1
{
ds=0;
i++;i++;
ds=1;
i=8;while(i>0)i--;
}
else
{
ds=0; //写 0
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}
void tempchange(void) //DS18B20 开始获取温度并转换
{
dsreset();
delay(1);
tempwritebyte(0xcc); // 写跳过读ROM指令
tempwritebyte(0x44); // 写温度转换指令
}
uint get_temp() //读取寄存器中存储的温度数据
{
uchar a,b;
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位
b=tempread(); //读高8位
temp=b;
temp<<=8; //两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625°
temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
return temp; //temp是整型
}
////////////////////显示程序//////////////////////////
void display(uchar num,uchar dat)
{
uchar i;
la=0;
P0=table[dat];
la=1;
la=0;
wela=0;
i=0XFF;
i=i&(~((0X01)<<(num)));
P0=i;
wela=1;
wela=0;
delay(1);
}
void dis_temp(uint t)
{
uchar i;
i=t/100;
display(0,i);
i=t%100/10;
display(1,i+10);
i=t%100%10;
display(2,i);
}
//////////////////////////////////////////////
void warn(uint s,uchar led) //蜂鸣器报警声音 ,s控制音调
{
uchar i;i=s;
la=0;
wela=0;
// beep=0;
P1=~(led);
while(i--)
{
dis_temp(get_temp());
}
// beep=1;
P1=0XFF;
i=s;
while(i--)
{
dis_temp(get_temp());
}
}
void deal(uint t)
{
uchar i,k;
k=t/10;
if(k<warn_l1)
{
warn(40,0x01);
}
if(k>warn_h1)
{
warn(40,0x04);
}
else
{
i=40;
while(i--)
{
dis_temp(get_temp());
}
}
}
void xianshi(num)
{
uint m;
for(m=50;m>0;m--)
{
uchar shi,ge;
shi=num/10;
ge=num%10;
la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(10);
la=1;
P0=table[ge];
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(10);
}
}
void anjian()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
warn_l1++;
if(warn_l1==warn_h1)
warn_l1=23;
xianshi(warn_l1+1);
while(!key1);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
warn_l1--;
if(warn_l1==0)
warn_l1=23;
xianshi(warn_l1+1);
while(!key2);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
warn_h1++;
if(warn_h1==125)
warn_h1=29;
xianshi(warn_h1+1);
while(!key3);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
warn_h1--;
if(warn_h1==warn_l1)
warn_h1=29;
xianshi(warn_h1+1);
while(!key4);
}
}
}
void main()
{
uchar buff[4],i;
la=0;
wela=0;
while(1)
{
tempchange();
anjian();
for(i=10;i>0;i--)
{
dis_temp(get_temp());
}
deal(temp);
sprintf(buff,"%f",f_temp);
for(i=10;i>0;i--)
{
dis_temp(get_temp());
}
for(i=10;i>0;i--)
{
dis_temp(get_temp());}
}
}