導航:首頁 > 操作系統 > 430單片機ds18b20

430單片機ds18b20

發布時間:2022-07-28 06:06:16

① 跪求msp430f5529的ds18b20的程序

可以應用於能量收集、無線感測以及自動抄表等場合,是最低工作功耗的單片機之一。MSP430F5529開發板MSP-EXP430F5529是MSP430F5529單片機的開發平台,由電源選擇開關、RF射頻介面、 microSD card插槽、MSP430F5529晶元及引出引腳、USB介面、JTAG模擬介面、齒輪電位計、電容觸摸按鍵、LED、按鈕、 EZ-FET內置模擬器、102x64點陣LCD和三坐標軸加速度計組成。該開發板將I/O引腳接出來,方便用戶進行實驗操作,既可用於科研開發,又適合實驗教學、課程設計、畢業設計等,為廣大高校師生提供了良好的實驗開發環境,同時也是廣大電子愛好者學習、開發MSP430系列單片機的良好平台。

② 郭天祥寫的數碼管顯示ds18b20溫度數值轉換(msp430單片機) 哪位高手給解釋一下後面的溫度轉換,謝謝!

從DS18B20讀取的溫度數據,共有11bit:BIT10~BIT0。

每一位,都代表一種十進制數:
BIT0為1,就代表:0.0625;
BIT1為1,就代表:0.125;
BIT2為1,就代表:0.25;
……
為0就是代表0。

本程序,就是分別判斷 BIT0、BIT1、...BIT10,
如果為1則然後在十進制數中,分別加上625、125、25...。

如下就是判斷 BIT0 的:
if(temper & BIT0)
{
dN[0] = 5;
dN[1] = 2;
dN[2] = 6;
}

如下就是判斷 BIT1 的:
if(temper&BIT1)
{
dN[1] += 5;
dN[2] += 2;
dN[3] += 1;
}

……

說實話,還從來沒有見過有誰,竟能編寫出來這么笨的程序。

③ 我要用DS18B20測量溫度,大約1分鍾測一次,而同時還要保持沒10ms發送一個脈寬為5us的脈沖,

我的基本思路是,DS18B20的延時不要用delay,用定時器延時,定時器可以設置5us中斷,然後中斷里加個標志位,在DS18B20里判斷標志位就可以,這樣就可以1820延時的同時定時器是工作的,當然在哪開定時器哪關定時器很重要。

④ 我用msp430單片機控制,DS18B20採集溫度,LCD1602顯示溫度,請問這樣的C程序怎麼寫呢

我用msp430單片機控制,DS18B20採集溫度,LCD1602顯示溫度,請問這樣的C程序怎麼寫呢?
定抄蛾潑角險伯攏殊搏

⑤ 單片機DS18B20問題

1、DS18B20的三個引腳的功能是什麼?
答:DS18B20的3個引腳分別為VCC電源正極、GND電源負極、DQ數據端。
2、
DS18B20復位時間是多少?
答:DS18B20復位時間是480us~960us。
3、
如何判斷DS18B20工作正常?
答:不存在此功能。
4、單片機如何實現對DS18B20的寫0操作?
答:不存在此功能。(你是不是說如何啟動讀取DS18B20,啟動只需讓單片機與DQ的介面至低電平保持1微妙以上時間)
5、
DS18B20的解析度為多少位?如何設置解析度位數?
答:"DS18B20的解析度為在-55~127攝氏度,解析度可以進行量化為9、10、11、12位對應一個單位的溫度為:0.5攝氏度、0.25攝氏度、0.125攝氏度、0.0625攝氏度。
6、DS18B20的溫度數據如何?如何將區分正負溫?
答:DS18B20的溫度數據的數據為一個16位二進制數。高5位為判斷正負位(高5位為1時溫度為負、高5位為0時溫度為正),對數據處理的方法,由於負數的數據在存儲的時候是以補碼的形式存儲的,所以在顯示的時候補碼應該相應的轉換為原碼。
還有什麼疑問?可以追問~上面的希望對你有幫助~

⑥ 求解關於MSP430超聲波測距與DS18B20程序組合問題

測距的時候不測溫,測溫的時候不測距,分時工作就好了。

⑦ 用430單片機和18b20溫度感測器製作電子灸 怎樣把感測器的數據傳給430,讀寫程序怎麼編寫呢(C語言)謝謝

//初始化18B20
void init18b20(void)
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}

bit tmpreadbit(void) //讀一個位元組
{
uint i;
bit dat;
DS=0;
i++; //延時
DS=1;
i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}

uchar tmpread(void) //讀一位
{
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) //寫一個位元組到 ds18b20
{
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 初始化
{
init18b20();
delay(1);
tmpwritebyte(0xcc); // 跳過讀ROM操作
tmpwritebyte(0x44); // 啟動溫度轉換
}

int tmp() //DS18B20溫度讀取
{
float tt;
uint a,b;
TR1=0;
init18b20();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
if(flag==1)
TR1=1;
else
TR1=0;
temp=b;
temp<<=8; //將高位元組溫度數據與低位元組溫度數據整合
temp=temp|a;
c=b>>4;
if(c==0)
tt=temp*0.0625;
else
tt=(~temp+1)*0.0625;
temp=tt*10+0.5; //放大10倍輸出並四捨五入
return temp;
}

延時函數需要根據實際你調整,temp就是溫度值。

⑧ 單片機上的ds18b20溫度感測器是什麼工作原理

單片機 與 ds18b20溫度感測器,ds18b20溫度感測器 集成了 測溫元件 及 AD轉換電路

轉換成為數字的溫度值,單片機通過 一線串口讀取 感測器 的溫度值,通過數碼管 或者

液晶顯示器 顯示出來。附件是一個模擬實例。


⑨ 基於單片機msp430和溫度感測器ds18b20的水溫度控制系統的c語言源程序(不是測量,要有加熱跟製冷)

我這是用STC做的,應該很容易移植到MPS430上的給你參考一下。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit scl=P1^3;
sbit sda=P1^4;

sbit key1=P1^6;
sbit key2=P1^7;
sbit key3=P2^0;
sbit key4=P2^1;

sbit lcrs=P3^7;//數據/命令
sbit lcwr=P3^5;//讀/寫
sbit lcden=P3^4;//使能

sbit DS=P2^2;

/*sbit lcrs=P3^4;//數據/命令
sbit lcwr=P3^7;//讀/寫
sbit lcden=P3^5;//使能
*/
sbit jrk=P2^2;
sbit cyk=P2^3;
sbit xhk=P2^4;
bit flag=0,rsg=0,not=0,he=0,in=0;
int acon=0,bcon=0,dcon=0,econ=0,
temp=0,y=0,j=0,l=0,cfj=0,ec=0,dc=0,at;
uchar code table[]={48,49,50,51,52,53,54,55,56,57};
uchar code ta1[]={"Temperature UP"};
uchar code ta2[]={"Temperature DN"};
uchar code ta3[]={"Inflator Cycle"};
uchar code ta4[]={"Inflator Time "};
uchar code ta5[]={" Heating UP "};
uchar code ta6[]={" Inflator "};
uchar code table7[]={"Temperature"};
uchar table1[]={0,0,0,'.',0};
uchar table3[]={"AptitudeAquarium"};
uchar table4[]={0,0,0,0,0};
uchar n,c=0;
void delay(uchar);
void wen_kong();
void xh();
void rso();
void weno();

void Init_Com(void)
{
TMOD = 0x11;
PCON = 0x00;
TH1=0x61;
TL1=0x99;
EA=1;
ET1=1;
TR1=1;
}
void delay(uchar count) //delay
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
////初始化18B20/////////
bit init18b20(void)
{
uint i;
bit no;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
no=DS;
if(no==0)
{
DS=1;
i=100;
while(i>0)i--;
no=DS;
if(no==1)
not=0;
else
not=1;
}
else
not=1;
return (not);
}

bit tmpreadbit(void) //讀一位
{
uint i;
bit dat;
DS=0;
i++;
DS=1;
i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}

uchar tmpread(void) //讀一個位元組
{
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) //寫一個位元組到 ds18b20
{
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++;
}
}
}

int tmp() //DS18B20溫度讀取
{
float tt;
int a,b;
if(init18b20()==0)
{
WDT_CONTR=0x36; /////喂狗
EA=0;
delay(1);
tmpwritebyte(0xcc); // 跳過讀ROM操作
tmpwritebyte(0x44); // 啟動溫度轉換
delay(10);
init18b20();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8; //將高位元組溫度數據與低位元組溫度數據整合
temp=temp|a;
c=b>>4;
tt=temp*0.0625;
temp=tt*10+0.5; //放大10倍輸出並四捨五入
EA=1;
return temp;
}
else
not=1;
}

//////1062/////////
void ydelay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void write_com(uchar com)
{
P0=com;
lcwr=0;
lcrs=0;
lcden=0;
ydelay(10);
lcden=1;
ydelay(10);
lcden=0;
lcwr=1;
}

void write_date(uchar date)//寫數據
{
P0=date;
lcwr=0;
lcrs=1;
lcden=0;
ydelay(10);
lcden=1;
ydelay(10);
lcden=0;
lcwr=1;
}

void init1602()//初始化
{
write_com(0x38);//設置顯示模式
ydelay(20);
write_com(0x0c);//開顯示
ydelay(20);
write_com(0x06);//指針和游標自動加一
ydelay(20);
write_com(0x01);//清屏指令
ydelay(20);
}

///////顯示程序//////
void display(int num)
{
uint i,A1,A2;
WDT_CONTR=0x35; /////喂狗
if(c!=0)
num=~num+1;
A1=num/1000;
A2=num%1000/100;
if(not==0)
{
if(c!=0)
{
c=0;
table1[0]='-';
}
else if(A1==0)
table1[0]=' ';
else
table1[0]=table[A1];
if(A1==0)
if(A2==0)
table1[1]=' ';
else
table1[1]=table[A2];
table1[2]=table[num%1000%100/10];
table1[4]=table[num%1000%100%10];
}
else
{
table1[0]='?';
table1[1]='?';
table1[2]='?';
table1[4]='?';
}
write_com(0x80);
for(i=0;i<11;i++)
{write_date(table7[i]);
delay(2);}
write_com(0x8b);
for(i=0;i<5;i++)
{write_date(table1[i]);
delay(2);}
write_com(0xc0);
for(i=0;i<16;i++)
{
if(he==1)
write_date(ta5[i]);
else if(in==1)
write_date(ta6[i]);
else
write_date(table3[i]);
}
c=0;
WDT_CONTR=0x35; /////喂狗
}
////顯示2////////////////////
display2(uchar bh,int dat)
{
uchar a,A,B;
WDT_CONTR=0x35; /////喂狗
//write_com(0x01);//清屏指令
y=dat;
y=y&0x8000;
if(y!=0)
dat=~dat+1;
A=dat/1000;
B=dat%1000/100;
if((bh!=4)&&(bh!=5))
{
if(A!=0)
table4[0]=table[dat/1000];
else if((c!=0)||(y!=0))
{
c=0;y=0;
table4[0]='-';
}
else
table4[0]=' ';
if(B!=0)
table4[1]=table[B];
else
table4[1]=' ';
table4[2]=table[dat%1000%100/10];
table4[3]='.';
table4[4]=table[dat%1000%100%10];
}
else
{
table4[0]=' ';
if((c!=0)||(y!=0))
{
c=0;y=0;
table4[1]='-';
}
else
table4[1]=' ';
table4[2]=' ';
table4[3]=table[dat%1000%100/10];
table4[4]=table[dat%1000%100%10];
}

write_com(0xc4);
delay(2);
for(a=0;a<5;a++)
write_date(table4[a]);
delay(2);
write_com(0x80);
switch(bh)
{
case 1:for(a=0;a<14;a++)write_date(ta1[a]);break;
case 2:for(a=0;a<14;a++)write_date(ta2[a]);break;
case 3:for(a=0;a<14;a++)write_date(ta3[a]);break;
case 4:for(a=0;a<14;a++)write_date(ta4[a]);break;
default:break;
}
}

///////////x24c02//////////////////
void delay24()
{ ;; }

void init24c02() //初始化
{
sda=1;
delay24();
scl=1;
delay24();
}

void start() //開始信號
{
sda=1;
delay24();
scl=1;
delay24();
sda=0;
delay24();
}

void stop() //停止
{
sda=0;
delay24();
scl=1;
delay24();
sda=1;
delay24();
}

void respons() //應答
{
uchar i;
scl=1;
delay24();
while((sda==1)&&(i<250))i++;
scl=0;
delay24();
}

void write_byte(uchar date) // 寫數據子函數
{
uchar i,temp;
temp=date;

for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay24();
sda=CY;
delay24();
scl=1;
delay24();
}
scl=0;
delay24();
sda=1;
delay24();
}

uchar read_byte() // 讀數據子函數
{
uchar i,k;
scl=0;
delay24();
sda=1;
delay24();
for(i=0;i<8;i++)
{
scl=1;
delay24();
k=(k<<1)|sda;
scl=0;
delay24();
}
return k;
}
///////寫數據函數///////////////////
void write_add(uchar address,uint date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date/256);
respons();
write_byte(date%256);
respons();
stop();
}
uchar read_add(uchar address) //讀數據函數
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}

void delay1ms(uchar ms)
{
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

int keyf(int *num,int up,int dn)
{
uint i;
uchar z;
for(i=0;i<600;i++)
{
display2(n,*num);
if(key1==0)
{
delay1ms(30);
if(key1==0)
{
i=0;
n++;
if(n>=9)
n=0;
while(!key1)
display2(n,*num);
break;
}
}
if(key2==0)
{
delay1ms(10);
if(key2==0)
{
i=0;
if(*num>=up)
*num=up;
else if(n!=4)
*num=*num+1;
else if(*num<100)
*num=*num+5;
else
*num=*num+10;
for(z=0;z<65;z++)
{
display2(n,*num);
if(key2!=0)
break;
}
while(!key2)
{
for(z=0;z<2;z++)
display2(n,*num);
if(*num>=up)
*num=up;
else if(n!=4)
*num=*num+1;
else if(*num<100)
*num=*num+5;
else
*num=*num+10;
}
}
}
if(key3==0)
{
delay1ms(10);
if(key3==0)
{
i=0;
if(*num<=dn)
*num=dn;
else if(n!=4)
*num=*num-1;
else if(*num<100)
*num=*num-5;
else
*num=*num-10;
for(z=0;z<65;z++)
{
display2(n,*num);
if(key3!=0)
break;
}
while(!key3)
{
for(z=0;z<2;z++)
display2(n,*num);
if(*num<=dn)
*num=dn;
else if(n!=4)
*num=*num-1;
else if(*num<100)
*num=*num-5;
else
*num=*num-10;
}
}
}
}
return(*num);
}
void keyjc()
{
uchar i=0;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
EA=0;
for(i=0;i<20;i++)
{
display(tmp());
}
if(key1==0)
{
write_com(0x01);//清屏指令
n++;
if(n>=5)
n=0;
while(!key1)
{
switch(n)
{
case 1:display2(n,acon);break;
case 0:break;
}
}
if(n==1)
{
keyf(&acon,1250,-530);
if((acon-bcon)<3)
bcon=acon-3;
}
if(n==2)
{
keyf(&bcon,1240,-550);
if((acon-bcon)<3)
acon=bcon+3;
}
write_add(1,acon);//A
delay1ms(15);
write_add(3,bcon);//B
n=0;
write_com(0x01);//清屏指令
}
EA=1;
}
}
}

key()
{
uint i;
if(key4==0)
delay1ms(50);
if(key4==0)
{
write_com(0x01);//清屏指令
for(i=0;i<500;i++)
{
if(key4==0)
{
delay1ms(15);
if(key4==0)
{
i=0;
n++;
if(n>=5)
n=0;
while(!key4)
{
switch(n)
{
case 1: display2(1,acon);break;
case 2: display2(2,bcon);break;
default: break;
}
}
}
}
switch(n)
{
case 1: display2(1,acon);break;
case 2: display2(2,bcon);break;
default: break;
}
}
n=0;
}
}

///////濾波////////
int filter()
{
int tm,buf[6];
uchar i,j;
EA=0;
for(i=0;i<6;i++)
{
buf[i]=tmp();
delay1ms(20);
WDT_CONTR=0x35; /////喂狗
}

for(j=0;j<5;j++)
for(i=0;i<5-j;i++)
if(buf[i]>buf[i+1])
{
tm=buf[i];
buf[i]=buf[i+1];
buf[i+1]=tm;
}
tm=((buf[2]+buf[3])/2);
EA=1;
return (tm);
}

void main()
{
uchar b,c;
Init_Com();
init1602();
init24c02();

b=read_add(1);
delay1ms(15);
c=read_add(2);
delay1ms(15);
acon=b*256+c;
b=read_add(3);
delay1ms(15);
c=read_add(4);
delay1ms(15);
bcon=b*256+c;
AUXR=0x01;// 禁止ALE輸出
WDT_CONTR=0x35; //啟動看門狗
write_com(0x01);//清屏指令

while(1)
{
at=filter();
display(at);
keyjc();
key();
wen_kong();
weno();
}
}

//////溫度控制//////////////

void wen_kong()
{
if((flag==0)&&(not==0))
{
at=filter();
if(at<=bcon)

{
flag=1;
jrk=0;
xhk=0;
he=1;
}
}
}

void weno()
{
if(flag)
{
at=filter();
if(at>=acon)
{
flag=0;
jrk=1;
if(rsg)
xhk=0;
else
xhk=1;
he=0;
}
}
if(not==1)
{
flag=0;
jrk=1;
if(rsg)
xhk=0;
else
xhk=1;
he=0;
}
}

⑩ DS18b20溫度探頭與單片機430怎麼接

和51的一樣的接法

閱讀全文

與430單片機ds18b20相關的資料

熱點內容
千鋒python人工智慧培訓 瀏覽:855
合理的文件夾劃分 瀏覽:258
十點讀書app哪裡下載 瀏覽:964
uu跑腿押金上app在哪裡解約 瀏覽:37
華為如何將app移到桌面 瀏覽:597
阿里安卓面試演算法題 瀏覽:705
語文知識手冊pdf 瀏覽:841
為什麼安卓手機oled屏很白很亮 瀏覽:252
如何找回iphone手機隱藏的app 瀏覽:21
linuxc多進程 瀏覽:649
android飛行游戲 瀏覽:965
數據挖掘常見演算法 瀏覽:135
python單實例化 瀏覽:351
str中python 瀏覽:89
java的equals用法 瀏覽:845
奧維雲伺服器怎麼開通 瀏覽:171
js取得伺服器地址 瀏覽:812
起點中文網小說緩存在哪個文件夾 瀏覽:216
java瘋狂講義pdf 瀏覽:300
推有錢app在哪裡 瀏覽:745