導航:首頁 > 操作系統 > 單片機串列溫度傳送

單片機串列溫度傳送

發布時間:2025-04-15 19:54:30

Ⅰ PC與單片機串列通信控制背景和意義

單片機串列通信的實際作用:一般用於和外部設備交換數據的
舉例來說:一、比如和PC的串口機通信,單片機可以採集一些模擬量(溫度,濕度,氣體濃度等),將這些模擬量轉換成數字量後通過串列通信介面傳輸個PC機,PC機上還得編寫一個簡單的應用軟體,可以顯示這些模擬量(溫度,濕度,氣體濃度等)的值,這個簡單的應用軟體應具有串口設置,數據顯示,繪制曲線等功能。還可以通過PC機串口發送數據給單片機,用來控制單片機的工作狀態等等。和PC機通信應該是應用最廣泛的。
二、和其他串口設備通信:單片機一般充當控制器的角色,通過串口發送一定格式的數據來控制與之相連設備的動作,同時設備也會反饋回來一些自己的狀態信息給單片機,供單片機進行判斷,做出相應的控制。

Ⅱ 怎樣利用串列通信實現51單片機控制的溫度感測器採集的溫度數據在PC機上實時顯示

用熱探頭,接ADC采樣,用51區數據,從串口傳入PC。PC做個數據曲線就可了

Ⅲ 如何將單片機溫度感測器採集到的數據通過無線傳給pc

RF24L01有增強版的模塊,傳輸距離據說可達2Km,其51驅動網上一大把,過程大概是這樣:把讀取的溫度16進制數存到一個寄存器,把這個寄存器的內容發送給RF24L01,啟動發送。電腦端也要搞一個單片機,驅動24L01,當收到信號,會產生中斷,單片機把數據讀出來,通過串口傳給PC即可(推薦使用usb轉串口的小板子,就幾塊錢,使用很方便,不需要給板子加max232了)。PC串口收到數據,在串口助手中勾選16進制顯示,就是16進制的溫度了,或者單片機把16進制的溫度轉化成字元串形式發到PC,這樣串口助手不用勾選16進制顯示,直接就能顯示成溫度。

Ⅳ 溫度感測器ds18b20與單片機at89s52是怎麼連接的

溫度感測器DS18B20與單片機AT89S52的連接相對簡單。首先,我們需要了解DS18B20的引腳功能:一端是電源(VCC),另一端是地(GND),中間的引腳則是數據線。而AT89S52單片機則提供了多個I/O口,用於與外部設備進行通信。

在實際連接過程中,我們只需將DS18B20的VCC引腳連接到AT89S52的+5V電源,同時將GND引腳連接到單片機的地。接下來,數據線需要連接到AT89S52的一個I/O口上,通常選擇P1.0或P1.1這樣的通用I/O口。這樣,單片機和溫度感測器便可以進行數據交換了。

值得注意的是,在進行連接之前,確保電源電壓符合DS18B20的工作范圍,即3V至5.5V。此外,數據線與單片機I/O口之間的連接需採用上拉電阻,通常為4.7kΩ,以保證數據線在高阻態時能夠保持高電平。上拉電阻的另一端應連接到+5V電源,而其另一端則連接到DS18B20的數據引腳。

連接完成後,接下來便可以編寫程序來讀取DS18B20的溫度數據。程序中需要調用相應的函數或庫來初始化DS18B20,並通過I/O口讀取溫度數據。需要注意的是,讀取溫度數據時,單片機需要發送特定的命令給DS18B20,使其開始測量溫度,並返回溫度數據。

總的來說,DS18B20與AT89S52的連接非常直接,只需注意電源電壓和數據線的正確連接,以及適當的上拉電阻配置即可。

Ⅳ 單片機中如何將DS18b20測得的溫度通過串口發送到電腦的串口調試助手上呢

串口是可以發送16進制的數的。我常用的簡單方法是,在單片機里這樣寫:

int t;
float tt; //溫度值

char i;
unsigned char *p;

Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
delay(40);//delay(4);
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar();
b=ReadOneChar();
t=b;

t<<=8;
t=t|a;
tt=t*0.0625; 轉換成溫度.可用

p= (unsigned char *) (&tt);

for(i=3;i>=0;i--)
{
TI = 0;
SBUF = p[i];
while(TI==0);

}

到計算機這邊,在把他轉換回來就好了;
例如:
BYTE RECV[4]; // 這是計算機收到的字元串;
float *fp = (float*)RECV;
float t = *fp; //t里就是收到的18B20的溫度了

Ⅵ 51單片機測溫度,速度通過串口發送【求方法】

一下程序是51單片機的程序。P0口是八段數碼管,wela、la分別是數碼管位選和段選。 DS18S20接在P2^2口。

//安裝目錄下的EXE文件打開後可在電腦上顯示當前溫度值
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2; //define interface of DS18B20
sbit la=P2^6;
sbit wela=P2^7;

uint pre_temp=0; //儲存當前溫度值,以減少串口工作頻率

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef};

void delay(uint count) //delay
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
///////功能:串口初始化,波特率9600,方式1///////
void Init_Com(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}

void dsreset(void) //send reset and initialization command 18B20復位,初始化函數
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}

bit tmpreadbit(void) //read a bit 讀1位數據函數
{
uint i;
bit dat;
DS=0;i++; //i++ for delay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}

uchar tmpread(void) //read a byte date 讀1位元組函數
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1); //讀出的數據最低位在最前面,這樣剛好一個位元組在DAT里
}
return(dat);
}

void tmpwritebyte(uchar dat) //write a byte to ds18b20 向1820寫一個位元組數據函數
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}

void tmpchange(void) //DS18B20 begin change 開始獲取數據並轉換
{
dsreset();
delay(1);
tmpwritebyte(0xcc); // address all drivers on bus 寫跳過讀ROM指令
tmpwritebyte(0x44); // initiates a single temperature conversion 寫溫度轉換指令
}

uint tmp() //get the temperature 讀取寄存器中存儲的溫度數據
{
float tt;
uchar a,b;
uint temp; // variable of temperature
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread(); //讀低8位
b=tmpread(); //讀高8位
temp=b;
temp<<=8; //two byte compose a int variable 兩個位元組組合為1個字
temp=temp|a;
tt=temp*0.0625; //溫度在寄存器中是12位,解析度是0.0625
temp=tt*10+0.5; //乘10表示小數點後只取1位,加0.5是四折五入
return temp;
}

// 讀 DS18B20 的rom,本程序沒有調用該函數,保留以保證程序的完整性
// void readrom() //read the serial
// {
// uchar sn1,sn2;
// dsreset();
// delay(1);
// tmpwritebyte(0x33);
// sn1=tmpread();
// sn2=tmpread();
// }

void display(uint temp) //顯示程序
{
uchar A1,A2,A2t,A3,ser;
uchar serial_flag = 0; //每當產生新溫度時通過串口進行更新,此為標志位
if ( temp != pre_temp )
{
serial_flag = 1;
pre_temp = temp;
}

A1=temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;

la=0;
P0=table[A1]; //顯示百位
if ( serial_flag )
{
ser = temp/256; //發送串口數據高位
SBUF = ser;
}
la=1;
la=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay(1);
la=0;

P0=table1[A2]; //顯示十位
if ( serial_flag )
{
ser = temp%256; //發送串口數據低位
SBUF = ser;
}
la=1;
la=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay(1);

P0=table[A3]; //顯示個位
if ( serial_flag )
{
ser = 0xff; //發送串口同步標志信號,後跟著的高位信號不可能達到此值,除非是在孫悟空在八卦爐里
SBUF = ser;
}
la=1;
la=0;
P0=0x7b;
wela=1;
wela=0;
delay(1);
}

void main()
{
uchar a;
Init_Com();
do
{
tmpchange();
// delay(200);
for(a=10;a>0;a--)
{
display(tmp());
}
}while(1);
}

閱讀全文

與單片機串列溫度傳送相關的資料

熱點內容
黑底白字pdf 瀏覽:258
pythonantigravity 瀏覽:345
模糊演算法的例題 瀏覽:948
程序員是怎麼下載電影的 瀏覽:481
python函數參數大致分為 瀏覽:467
怎麼看生存伺服器種子 瀏覽:144
roblox伺服器崩潰什麼時候好 瀏覽:37
怎麼把抖音設置成白色安卓 瀏覽:338
源碼無憂app 瀏覽:969
k線圖pdf下載 瀏覽:776
加密貨幣推廣工作 瀏覽:117
什麼app聊天無痕跡 瀏覽:844
dism壓縮 瀏覽:620
在線版迅捷pdf轉換器 瀏覽:245
pdf怎麼建 瀏覽:913
4的次方怎麼演算法 瀏覽:784
方舟端游如何開私人伺服器 瀏覽:120
遠程伺服器雲幫手 瀏覽:391
單片機接排阻 瀏覽:344
迅雷雲伺服器搭建 瀏覽:657