导航:首页 > 操作系统 > ds18b20与单片机

ds18b20与单片机

发布时间:2022-08-20 03:46:40

单片机的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时温度为正),对数据处理的方法,由于负数的数据在存储的时候是以补码的形式存储的,所以在显示的时候补码应该相应的转换为原码。还有什么疑问?可以追问~上面的希望对你有帮助~

❷ DS18B20是如何测温的跟单片机如何连接

ds18b20的原理就是一些控制指令。这些指令你可以上网找它的资料,里面有。至于连线,我只会51单片机。1端接地,3端接Vcc,2端接在I/O口上,可以接在P2.1上。另外2端还有外接一个10K的电阻,然后再连在Vcc上。。。写程序时,注意看时序图,一定要按时序图来写,ds18b20是单总线传输,一定要按时序来写。

❸ DS18B20温度传感器如何与单片机相连接

DS18B20与单片机连接一个IO口就够,只需要满足相应的时序就能读到温度数据。至于1602显示,只要能读到温度数据,将数据转为字符串发送给1602就可以。

该温度传感器是数字传感器,内含处理器芯片,直接输出温度数字信号,单片机采用查询的方式回读数据后进行换算输出。

三通道18B20温度测量数码管显示。-55-+125℃,用1位数码管显示当前通道号,4位数码管显示18B20当前通道温度值,负号位与正温度百位1用同一位数码管显示,该位为0不显示。

(3)ds18b20与单片机扩展阅读:

DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号发送给计数器1。高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

❹ 4个DS18B20与单片机相连 怎么区分呢 方便给个程序吗谢谢

DS18B20是一线制通信,一个DS18B20和单片机只需要一个GPIO引脚连接即可。
4个DS18B20连接单片机的四个GPIO,所用IO引脚名称和DS18B20对应起来,这样通过驱动不同的GPIO,就知道程序读取的是哪个DS18B20了
每一个DS18B20打包写一个驱动函数,在主循环里,加载这四个驱动函数,并把读上来到数据保存到4个全局变量里,用于后续显示。

❺ 求大神解释一下DS18B20和这个单片机的连接以及是怎么实现温度信号检测的,谢谢!

看图,这个图示总线画法,18b20的DQ端连接在单片机33脚。
18b20是数字精密温度传感器,通过单总线形式直接输出温度的数字信号,单片机拿到信号以后稍作解码就可以得到值。

❻ 普中开发板上ds18b20如何与单片机通信

ds18b20与单片机是串行通讯,
/******************************************************
函数名称:void
Init_DS18B20(void)
返回值:无
参数:无
作用:初始化18B20
*******************************************************/
void
Init_DS18B20(void)
{
char
x=0;
DQ=1;
delay(10);//稍作延时
DQ=0;
delay(80);//延时>480us
540us
DQ=1;
//拉高总线
15-60us
delay(20);
x=DQ;//读总线状态
为0复位成功,为1则不成功
delay(30);
DQ=1;//释放总线
}
/******************************************************
函数名称:uchar
ReadOneChar(void)
返回值:uchar
dat
参数:

作用:读取1820一个字节
*******************************************************/
uchar
ReadOneChar(void)
{
uchar
i;
uchar
dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;//给脉冲
if(DQ)
{dat|=0x80;}//读1
///
读0右移处理
delay(8);//15us内读完一个数
}
return(dat);
}
/******************************************************
函数名称:void
WriteOneChar(uchar
dat)
返回值:无
参数:
uchar
dat
作用:向1820写一个字节
*******************************************************/
/////****写DS18B20***/
//写0
60us读完,写1
30us
内读完
void
WriteOneChar(uchar
dat)
{
uchar
i=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;//写所给数据最低位
delay(10);
///////////
DQ=1;//给脉冲
dat>>=1;
}
delay(8);
}

❼ 单片机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时温度为正),对数据处理的方法,由于负数的数据在存储的时候是以补码的形式存储的,所以在显示的时候补码应该相应的转换为原码。
还有什么疑问?可以追问~上面的希望对你有帮助~

❽ DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号

#include <reg51.h>
#define uchar unsigned char
sbit keyup=P1^0;
sbit keydn=P1^1;
sbit keymd=P1^2;
sbit out=P3^7; //接控制继电器
sbit DQ = P3^4; //接温度传感器18B20
uchar t[2],number=0,*pt; //温度值
uchar TempBuffer1[4]={0,0,0,0};
uchar Tmax=18,Tmin=8;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;
bit flag;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(number)
{
case 0:
P2=0x08;
P0=distab[TempBuffer1[0]];
break;
case 1:
P2=0x04;
P0=distab[TempBuffer1[1]];
break;
case 2:
P2=0x02;
P0=distab[TempBuffer1[2]]&0x7f;
break;
case 3:
P2=0x01;
P0=distab[TempBuffer1[3]];
break;
default:
break;
}
number++;
if(number>3)number=0;
}
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void)
{
bit x=0;
do{
DQ=1;
delay_18B20(8);
DQ = 0; //单片机将DQ拉低
delay_18B20(90); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_18B20(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化
}while(x);
delay_18B20(20);
}
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20写一个字节****************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/**************读取ds18b20当前温度************/
unsigned char *ReadTemperature(unsigned char rs)
{
unsigned char tt[2];
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度
tt[0]=ReadOneChar(); //读取温度值低位
tt[1]=ReadOneChar(); //读取温度值高位
return(tt);
}
void covert1(void) //将温度转换为LED显示的数据
{
uchar x=0x00,y=0x00;
t[0]=*pt;
pt++;
t[1]=*pt;
if(t[1]&0x080) //判断正负温度
{
TempBuffer1[0]=0x0c; //c代表负
t[1]=~t[1]; /*下面几句把负数的补码*/
t[0]=~t[0]; /*换算成绝对值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
}
else TempBuffer1[0]=0x0a; //A代表正
t[1]<<=4; //将高字节左移4位
t[1]=t[1]&0xf0;
x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它
x>>=4; //右移4位
x=x&0x0f; //和前面两句就是取出t[0]的高四位
y=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节
TempBuffer1[1]=(y%100)/10;
TempBuffer1[2]=(y%100)%10;
t[0]=t[0]&0x0f; //小数部分
TempBuffer1[3]=t[0]*10/16;
//以下程序段消去随机误检查造成的误判,只有连续12次检测到温度超出限制才切换加热装置
if(currtemp>Tmin)xiaodou1=0;
if(y<Tmin)
{
xiaodou1++;
currtemp=y;
xiaodou2=0;
}
if(xiaodou1>12)
{
out=0;
flag=1;
xiaodou1=0;
}
if(currtemp<Tmax)xiaodou2=0;
if(y>Tmax)
{
xiaodou2++;
currtemp=y;
xiaodou1=0;
}
if(xiaodou2>12)
{
out=1;
flag=0;
xiaodou2=0;
}
out=flag;
}
void convert(char tmp)
{
uchar a;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
void keyscan( )
{
uchar keyin;
keyin=P1&0x07;
if(keyin==0x07)return;
else if(keymd==0)
{
dismod++;
dismod%=3;
while(keymd==0);
switch(dismod)
{
case 1:
convert(Tmax);
TempBuffer1[3]=0x11;
break;
case 2:
convert(Tmin);
TempBuffer1[3]=0x12;
break;
default:
break;
}
}
else if((keyup==0)&&(dismod==1))
{
Tmax++;
convert(Tmax);
while(keyup==0);
}
else if((keydn==0)&&(dismod==1))
{
Tmax--;
convert(Tmax);
while(keydn==0);
}
else if((keyup==0)&&(dismod==2))
{
Tmin++;
convert(Tmin);
while(keyup==0);
}
else if((keydn==0)&&(dismod==2))
{
Tmin--;
convert(Tmin);
while(keydn==0);
}
xiaodou1=0;
xiaodou2=0;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
delay_18B20(50000); //延时等待18B20数据稳定
while(1)
{
pt=ReadTemperature(0x7f); //读取温度,温度值存放在一个两个字节的数组中
if(dismod==0)covert1();
keyscan();
delay_18B20(30000);
}
}

❾ DS18B20和单片机的通信

DS18B20就是一个单总线的温度传感器,网上都是它的技术手册,所有读取温度的程序都是根据技术手册写出来的,也没有什么通信原理,应该说,只是单片机去读取温度,根据DS18B20要求的时序去写程序的,也不叫什么通信,更没有人讲什么通信原理的。
要么看技术手册,要么看程序。只有这两种资料。

❿ DS18B20 与51单片机 怎么用

DS18B20使用:
接线时,面对着扁平的那一面,左负右正,一旦接反就会立刻发热,有可能烧毁,同时,接反也是导致该传感器总是显示85℃的原因。实际操作中将正负反接,传感器立即发热,液晶屏不能显示读数,正负接好后显示85℃。
DS18B20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
51单片机使用方法:

1.将仿真器插入需仿真的用户板的CPU插座中,仿真器由用户板供电;
2.将仿真器的串行电缆和PC机接好,打开用户板电源;
3.通过Keil C 的IDE 开发仿真环境UV2 下载用户程序进行仿真、调试。
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出。

阅读全文

与ds18b20与单片机相关的资料

热点内容
编译检查的是什么错误 浏览:404
加密兔f码生成器免费 浏览:291
思科路由器命令明文加密 浏览:171
方舟生存进化服务器如何改名字 浏览:892
央行数字货币app怎么注册 浏览:431
51单片机显示时间 浏览:770
我的世界网易版怎么压缩地图 浏览:682
qq小程序云服务器和 浏览:740
方舟服务器怎么玩才好玩 浏览:557
单片机的部件 浏览:621
编译原理遍的过程 浏览:252
python读取json字符串 浏览:62
ubuntu1404安装php 浏览:634
lua能编译吗 浏览:118
思仙怎么看服务器 浏览:660
php微信图片防盗链 浏览:800
安卓1怎么读音 浏览:297
农业app怎么开通快捷支付 浏览:912
pythonredisdict 浏览:389
如何攻击别人网赌服务器 浏览:882