欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
ds18b20溫度采集上位機(vc)和下位機(單片機)程序源碼
[打印本頁]
作者:
heicc
時間:
2016-6-17 01:11
標題:
ds18b20溫度采集上位機(vc)和下位機(單片機)程序源碼
0.png
(30.19 KB, 下載次數: 141)
下載附件
2016-6-17 01:08 上傳
上位機程序,用vc寫的,帶有源代碼
ds18b20溫度采集下位機程序(51單片機)
#include<at89x51.h>
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^2;
unsigned int j=0;
uchar flag,a;
// 延時子函數
//**************************************************************/
void delay(uint t)
{ for (; t>0 ; t--) ;
}
/************************************************************
/* 產生復位脈沖初始化DS18B20 */
void ow_reset(void)
{ char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//從高拉倒低
DQ=0;
delay(50); //550 us
DQ=1;
delay(6); //66 us
presence=DQ; //presence=0 復位成功,繼續下一步
}
delay(45); //延時500 us
presence=~DQ;
}
DQ=1; //拉高電平
}
/************************************************************
向 1-WIRE 總線上寫一個字節**數據線從高電平拉至低電平,產生寫起始信號。
15ms之內將所需寫的位送到數據線上
**************************************************************/
void write_byte(uchar val)
{
uchar i;
for (i=8; i>0; i--) //在15~60ms之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。
{
DQ = 1;_nop_(); _nop_(); //在開始另一個寫周期前必須有1Us以上的高電平恢復期。
DQ = 0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //5us
DQ = val&0x01; //最低位移出
delay(6) ; //66us
val = val/2; //右移1位
}
delay(1);
}
/************************************************************
//讀1字節 //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
**************************************************************/
uchar read_byte (void)
{
uchar i;
uchar value = 0;
for(i = 8;i>0;i--)
{
DQ = 1; // 給脈沖信號
_nop_(); _nop_();
value>>= 1;
DQ = 0; // 給脈沖信號
_nop_(); _nop_(); _nop_(); _nop_();_nop_(); //4us
DQ = 1; _nop_();_nop_();_nop_();_nop_();_nop_();//5us
if(DQ)
{ value|= 0x80 ; }
delay(13); //66us 注意延時的長短,如果是delay(6) 會造成LED閃爍
}
DQ = 1;
return(value) ;
}
void Setting_DS18B20(void)
{
ow_reset();
write_byte(0xCC); // 跳過讀序號列號的操作
write_byte(0x4e);
write_byte(0x64); //100不使用DS18B20本身的溫度告警設置,為進行轉換精度設定,湊兩個寫寄存器操作
write_byte(0x8a); //-10
write_byte(0x7f); //設置DS18B20 為12位轉換精度 R1,R0的值決定轉換精度 R1=R0=1對應12位
}
/*--------------------------------------------------------------------------------------
讀取溫度并完成轉化,
-----------------------------------------------------------------------------------------*/
Read_Temperature()
{
uchar tplsb,tpmsb; // 溫度值低位、高位字節
uchar flag=0;
// unsigned int j=0; //暫存計算得溫度的整數部分
float tt;
ow_reset();
write_byte(0xCC); // 跳過讀序號列號的操作
write_byte(0x44); // 啟動溫度轉換
ow_reset();
write_byte(0xCC); //跳過讀序號列號的操作
write_byte(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
tplsb=read_byte(); // 溫度值低位字節(其中低4位為二進制的“小數”部分)
tpmsb=read_byte(); // 高位值高位字節(其中高5位為符號位
//轉換溫度
j=tpmsb;
j<<=8;
j+=tplsb; //寫為j=j|tplsb;也可以。// 兩字節合成一個整型變量。
if(tpmsb>7)
{
j=(j^0xffff);//異或
j=j+1; //如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際 溫度。
}
tt=(j*0.0625);
return tt;
}
/*------------------------------------------------------------------------
主函數
--------------------------------------------------------------------*/
void main()
{ Setting_DS18B20();
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{ if(flag==1)
{ ES=0;
flag=0;
SBUF=Read_Temperature();
while(!TI);
TI=0;
ES=1;
}
}
}
void ckzd() interrupt 4
{
RI=0;
P0=SBUF;
a=SBUF;
flag=1;
if(a=='b')P1=~P1;
else P1=0xff;
}
復制代碼
0.png
(90.72 KB, 下載次數: 107)
下載附件
2016-6-17 01:09 上傳
18b20溫度傳感器測試程序,包涵上位機源程序很下位機源程序,將18b20采集的溫度值發送給上位機顯示
18B20upanddown.rar
(4.93 MB, 下載次數: 228)
2016-6-17 01:09 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
昭通音響-小倪
時間:
2016-7-1 15:51
下載看看,不錯
作者:
鵝鵝鵝111
時間:
2016-8-3 11:20
學習學習了
作者:
阿凡提
時間:
2016-12-23 21:09
不錯學習一下
作者:
nnq
時間:
2017-5-17 16:23
下載學習一下,謝謝
作者:
DevilQ
時間:
2017-7-8 17:05
謝謝大佬Orz
作者:
xmch
時間:
2018-1-15 22:20
感謝分享,先下來學習。
作者:
fmqwh626
時間:
2018-5-9 09:26
贊一個!
作者:
heidianzi520
時間:
2020-4-24 10:32
上位機的呢?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1