DS18B20温度读取及显示讲解学习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
wela=3;
dula=table[ge]|0x80;//加小数点
delayms(10);
wela=4;
dula=table[sfen];
delayms(10);
wela=5;
dula=table[bfen];
delayms(10);
wela=6;
dula=table[qfen];
delayms(10);
sbit DS=P3^7;
void delay6us(uchar z){
while(z--);
}
void delayms(uchar z){
uchar i,j;
for(i=0;i<z;i++)
for(j=0;j<160;j++);
}
void init(){
uchar presence=1;
while(presence){
tl=wendu%256;
s=tl&0x0f;
xs=0.0625*s*1000;
th<<=4;
tl>>=4;
tp=th|tl;
bai=tp/100;
shi=(tp%100)/10;
ge=tp%10;
sfen=xs/100;
bfen=(xs%100)/10;
qfen=xs%10;//显示的百位十位个位以及小数点后三位
ds_write(0xbe);
}
uint DSreadtemp(){
int temp=0;
uchar tmh,tml;
DSchange();
delayms(1);
DSreadtempcom();
tml=ds_read();
tmh=ds_read();
DS=1;
temp=tmh;
temp<<=8;
temp|=tml;
return temp;
}
void display(uint wendu){
uchar bai,shi,ge,sfen,bfen,qfen;
uchar s,tp,th,tl;
uint xs,flag;
flag=wendu&0x8000;
if(flag!=0)
wendu=~(wendu-1);
th=wendu/256;
DS=0;
delay6us(1);
DS=1;
delay6us(1);
bi=DS;
byt=(byt>>1)|(bi<<7);
delay6us(11);
}
return byt;
}
void ds_write(uchar ch){
uchar i;
for(i=0;i<8;i++){
DS=0;
delay6us(1);
DS=0;
delay6us(80);//延时480us以上
DS=1;
delay6us(15);
if(DS==0){
presencቤተ መጻሕፍቲ ባይዱ=0;
while(DS==0);
}
else
presence=1;
}
}
uchar ds_read(){
uchar byt,bi;
uchar i;
for(i=0;i<8;i++){
}
void main(){
uint temp;
while(1){
temp=DSreadtemp();
display(temp);
}
}
DS=ch&0x01;
delay6us(11);
DS=1;
delay6us(1);
ch>>=1;
}
}
void DSchange(){
DS=1;
init();
ds_write(0xcc);
ds_write(0x44);
}
void DSreadtempcom(){
DS=1;
init();
ds_write(0xcc);
DS18B20温度读取及显示
DS18B20温度读取及显示
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define wela P2
#define dula P0
uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};
wela=0;
if(flag!=0){
dula=0x40;//显示负号
}else
dula=0x00;
delayms(10);
wela=1;
if(bai!=0){
dula=table[bai];
}else
dula=0x00;
delayms(10);
wela=2;
dula=table[shi];
delayms(10);
dula=table[ge]|0x80;//加小数点
delayms(10);
wela=4;
dula=table[sfen];
delayms(10);
wela=5;
dula=table[bfen];
delayms(10);
wela=6;
dula=table[qfen];
delayms(10);
sbit DS=P3^7;
void delay6us(uchar z){
while(z--);
}
void delayms(uchar z){
uchar i,j;
for(i=0;i<z;i++)
for(j=0;j<160;j++);
}
void init(){
uchar presence=1;
while(presence){
tl=wendu%256;
s=tl&0x0f;
xs=0.0625*s*1000;
th<<=4;
tl>>=4;
tp=th|tl;
bai=tp/100;
shi=(tp%100)/10;
ge=tp%10;
sfen=xs/100;
bfen=(xs%100)/10;
qfen=xs%10;//显示的百位十位个位以及小数点后三位
ds_write(0xbe);
}
uint DSreadtemp(){
int temp=0;
uchar tmh,tml;
DSchange();
delayms(1);
DSreadtempcom();
tml=ds_read();
tmh=ds_read();
DS=1;
temp=tmh;
temp<<=8;
temp|=tml;
return temp;
}
void display(uint wendu){
uchar bai,shi,ge,sfen,bfen,qfen;
uchar s,tp,th,tl;
uint xs,flag;
flag=wendu&0x8000;
if(flag!=0)
wendu=~(wendu-1);
th=wendu/256;
DS=0;
delay6us(1);
DS=1;
delay6us(1);
bi=DS;
byt=(byt>>1)|(bi<<7);
delay6us(11);
}
return byt;
}
void ds_write(uchar ch){
uchar i;
for(i=0;i<8;i++){
DS=0;
delay6us(1);
DS=0;
delay6us(80);//延时480us以上
DS=1;
delay6us(15);
if(DS==0){
presencቤተ መጻሕፍቲ ባይዱ=0;
while(DS==0);
}
else
presence=1;
}
}
uchar ds_read(){
uchar byt,bi;
uchar i;
for(i=0;i<8;i++){
}
void main(){
uint temp;
while(1){
temp=DSreadtemp();
display(temp);
}
}
DS=ch&0x01;
delay6us(11);
DS=1;
delay6us(1);
ch>>=1;
}
}
void DSchange(){
DS=1;
init();
ds_write(0xcc);
ds_write(0x44);
}
void DSreadtempcom(){
DS=1;
init();
ds_write(0xcc);
DS18B20温度读取及显示
DS18B20温度读取及显示
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define wela P2
#define dula P0
uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};
wela=0;
if(flag!=0){
dula=0x40;//显示负号
}else
dula=0x00;
delayms(10);
wela=1;
if(bai!=0){
dula=table[bai];
}else
dula=0x00;
delayms(10);
wela=2;
dula=table[shi];
delayms(10);