我用protues仿真DS18B20的时候,为什么我调DS18B20上的温度的时候1602上的温度值为什么不发生变化呢?
下面是我的程序:/*******************************************ds18b20cewen*********************...
下面是我的程序:
/*******************************************
ds18b20ce wen
*******************************************/
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
sbit DQ=P1^0;
//sbit T_RST=P1^5;
//sbit T_CLK=P1^6;
//sbit T_IO=P1^7;
//sbit ACC0=ACC^0;
//sbit ACC7=ACC^7;
/*******************************************
jing que yan shi
*******************************************/
void delay(uint i)
{
while(i--);
}
/******************************************
chu shi hua ds18b20
******************************************/
void init_18b20()
{
uchar x=0;
DQ=1;
delay(8);
DQ=0;
delay(80);//798us;
delay(798);
DQ=1;
delay(14);//154us;
x=DQ;
delay(20);
}
/****************************************
cong ds18b20 du yi ge zi jie
****************************************/
uchar read_byte()
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat=dat>>1;
DQ=1;
if(DQ==1)
{
dat=dat|0x80;
}
delay(4);
}
return dat;
}
/***************************************
xiang ds18b20 xie yi ge zi jie
***************************************/
void write_byte(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ=0;
delay(2);//
DQ=dat&0x01;
delay(5);
DQ=1;
dat=dat>>1;
}
delay(4);
}
/**************************************
du qu ds18b20 de wen du zhi
**************************************/
uchar read_tem()
{
uchar a=0,b=0,t=0;
init_18b20();
write_byte(0xcc);
write_byte(0x44);
init_18b20();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();//LSB;
b=read_byte();//HSB;
t=(4<<b)|(a>>4);
if(t>128)
{
t=(~t)+1;
}
return t;
}
uchar table[]="DS18B20";
uchar table1[]="0123456789";
void delay1(uchar t)
{
uchar x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
P0=com;
delay1(5);
e=1;
delay1(5);
e=0;
}
void write_date(uchar date)
{
rs=1;
P0=date;
delay1(5);
e=1;
delay1(5);
e=0;
}
void unit()
{
e=0;
rw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
uchar num;
uchar tp,tp1,tp2;
init_18b20();
unit();
write_com(0x80);
for(num=0;num<7;num++)
{
write_date(table[num]);
delay1(10);
}
while(1)
{
tp=read_tem();
tp2=tp/10;
tp1=tp%10;
write_com(0x80+0x40);
write_date(table1[tp2]);
delay1(10);
write_com(0x80+0x40+0x01);
write_date(table1[tp1]);
delay1(10);
write_com(0x80+0x40+0x02);
write_date(0xdf);
delay1(10);
write_com(0x80+0x40+0x03);
write_date('C');
delay1(10);
}
} 展开
/*******************************************
ds18b20ce wen
*******************************************/
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
sbit DQ=P1^0;
//sbit T_RST=P1^5;
//sbit T_CLK=P1^6;
//sbit T_IO=P1^7;
//sbit ACC0=ACC^0;
//sbit ACC7=ACC^7;
/*******************************************
jing que yan shi
*******************************************/
void delay(uint i)
{
while(i--);
}
/******************************************
chu shi hua ds18b20
******************************************/
void init_18b20()
{
uchar x=0;
DQ=1;
delay(8);
DQ=0;
delay(80);//798us;
delay(798);
DQ=1;
delay(14);//154us;
x=DQ;
delay(20);
}
/****************************************
cong ds18b20 du yi ge zi jie
****************************************/
uchar read_byte()
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat=dat>>1;
DQ=1;
if(DQ==1)
{
dat=dat|0x80;
}
delay(4);
}
return dat;
}
/***************************************
xiang ds18b20 xie yi ge zi jie
***************************************/
void write_byte(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ=0;
delay(2);//
DQ=dat&0x01;
delay(5);
DQ=1;
dat=dat>>1;
}
delay(4);
}
/**************************************
du qu ds18b20 de wen du zhi
**************************************/
uchar read_tem()
{
uchar a=0,b=0,t=0;
init_18b20();
write_byte(0xcc);
write_byte(0x44);
init_18b20();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();//LSB;
b=read_byte();//HSB;
t=(4<<b)|(a>>4);
if(t>128)
{
t=(~t)+1;
}
return t;
}
uchar table[]="DS18B20";
uchar table1[]="0123456789";
void delay1(uchar t)
{
uchar x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
P0=com;
delay1(5);
e=1;
delay1(5);
e=0;
}
void write_date(uchar date)
{
rs=1;
P0=date;
delay1(5);
e=1;
delay1(5);
e=0;
}
void unit()
{
e=0;
rw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
uchar num;
uchar tp,tp1,tp2;
init_18b20();
unit();
write_com(0x80);
for(num=0;num<7;num++)
{
write_date(table[num]);
delay1(10);
}
while(1)
{
tp=read_tem();
tp2=tp/10;
tp1=tp%10;
write_com(0x80+0x40);
write_date(table1[tp2]);
delay1(10);
write_com(0x80+0x40+0x01);
write_date(table1[tp1]);
delay1(10);
write_com(0x80+0x40+0x02);
write_date(0xdf);
delay1(10);
write_com(0x80+0x40+0x03);
write_date('C');
delay1(10);
}
} 展开
4个回答
富港检测东莞有限公司
2024-12-24 广告
2024-12-24 广告
GB/T34986是有源加速老化测试的标准,旨在通过模拟极端环境条件下的高低温、湿度及温度变化,快速识别产品潜在的设计缺陷和制造工艺问题,从而评估产品的可靠性。在富港检测技术(东莞)有限公司,我们严格遵循这一标准,利用先进的环境模拟设备,对...
点击进入详情页
本回答由富港检测东莞有限公司提供
展开全部
貌似你DS18B20接错了
你去网上找下接法 对照看下
你去网上找下接法 对照看下
追问
没有错吧,不是这样吗?
追答
是按照这个线路接的吗
你先用万用表测下元件是好是坏
把万用表打到20M电阻 如果是好的阻值应该是接近13好像
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我认为是你的读温度的程序有问题,在网上找一个代码试试,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询