导航:首页 > 操作系统 > 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相关的资料

热点内容
c语言常用算法pdf 浏览:960
编程如何让画面动起来 浏览:865
大龄女程序员未来发展 浏览:976
数学书籍pdf 浏览:506
加密门禁卡写入成功无法开门 浏览:464
齿轮传动pdf 浏览:52
alpinelinux 浏览:150
手机端app的扫码功能在哪里 浏览:227
少儿编程中小班英语教案 浏览:452
锁屏密码加密手机怎么解除 浏览:205
linuxlostfound 浏览:135
征途服务器ip地址 浏览:330
git提交代码命令行 浏览:165
什么叫浏览器服务器结构 浏览:157
于谦聊天哪个app 浏览:449
小鹏汽车nlp算法工程师薪资 浏览:881
代码加密与隐藏 浏览:649
fordfulkerson算法 浏览:352
京东热app在哪里可以下载 浏览:877
彩报图书app哪个好 浏览:303