導航:首頁 > 操作系統 > 怎麼檢測單片機的溫度

怎麼檢測單片機的溫度

發布時間:2023-02-16 06:32:34

單片機測溫原理

這需要溫度感應頭與單片機配合的,感應頭把溫度信號轉換成電信號在轉換成二進制數,輸入單片機,單片機與儲存的溫度記錄相比較,得出當前溫度,輸出。總得來說就是需要有外部原件把溫度換成二進制信號(有的單片機可以直接識別電壓信號,內部自動轉換二進制信號),單片機識別與存儲的數據進行比較得出溫度。

❷ 單片機 溫度測量控制

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());}

}
}

閱讀全文

與怎麼檢測單片機的溫度相關的資料

熱點內容
有pdf卻打不開 瀏覽:456
七星彩軟體app怎麼下載 瀏覽:213
32單片機的重映射哪裡改 瀏覽:816
為什麼前端不用刷演算法題 瀏覽:706
對稱加密系統和公鑰加密系統 瀏覽:428
歷史地理pdf 瀏覽:604
物聯網雲伺服器框架 瀏覽:648
sybaseisql命令 瀏覽:183
android權威編程指南pdf 瀏覽:663
哪些軟體屬於加密軟體 瀏覽:646
文件夾75絲什麼意思 瀏覽:468
最便宜sop8單片機 瀏覽:964
圖解周易預測學pdf 瀏覽:420
c盤莫名奇妙多了幾個文件夾 瀏覽:171
貴州花溪門票優惠app哪個好 瀏覽:803
如何說話不會讓人有被命令的感覺 瀏覽:438
哪裡可下載湘工惠app 瀏覽:265
福特python 瀏覽:312
pdf轉換成word表格 瀏覽:353
無線遠端伺服器無響應是什麼意思 瀏覽:672