📄 ds18b20.c
字号:
#include<reg51.h>
#include<uint.h>
#include<intrins.h>
#include<led0_9.h>
sbit dq=P2^0;
uchar ok=0,k,temp[3]={0x00,0x00,0x00};
void time1();
void write(uchar dat);
uchar read();
void delay_us(uint tt1);
void display(uchar aa,uchar bb);
void main()
{
TMOD=0X10;
TH1=0XFC;
TL1=0X18;
EA=1;
ET1=1;
TR1=1;
dq=1; //初始化
_nop_();
dq=0;
delay_us(52);
dq=1;
delay_us(5);
delay_us(25);
dq=1; //跳过读序列号
_nop_();
dq=0;
delay_us(52);
dq=1;
delay_us(5);
delay_us(25);
write(0xcc); //启动
write(0x44);
while(1);
}
void time1() interrupt 3
{
dq=1; //读
_nop_();
dq=0;
delay_us(52);
dq=1;
delay_us(5);
delay_us(25);
write(0xcc);
write(0xbe);
temp[0]=read();
temp[1]=read();
display(temp[0],temp[1]);
dq=1; //再初始化
_nop_();
dq=0;
delay_us(52);
dq=1;
delay_us(5);
delay_us(25);
write(0xcc); //再启动
write(0x44);
}
void write(uchar dat)
{
uchar i=0;
for(i=0;i<8;i++)
{
dq=0;
dq=dat&0x01;
delay_us(5);
dq=1;
dat=dat>>1;
}
}
uchar read()
{
uchar i=0,date=0;
for(i=0;i<8;i++)
{
dq=0;
date=date>>1;
dq=1;
if(dq==1)date=date|0x80;
delay_us(5);
}
return date;
}
void delay_us(uint tt1)
{
while(tt1--);
}
void display(uchar aa,uchar bb)
{
uchar a=0,b=0,c=0,d=0;
ulong num;
num=bb;
num=num<<8;
num=num|aa;
num=num>>4;
if(bb<0x80)
{
num=num*10;
a=num%10;
num=(num-a)/10;
b=num%10;
num=(num-b)/10;
c=num%10;
num=(num-c)/10;
d=num%10;
P3=0x00;
P1=ledcc[a];
P3=0x01;
P1=(ledcc[b]|0x80);
P3=0x02;
P1=ledcc[c];
P3=0x03;
P1=ledcc[d];
}else
{
num=~(num-1);
num=num&0x000fff;
num=num*10;
a=num%10;
num=(num-a)/10;
b=num%10;
num=(num-b)/10;
c=num%10;
if(c)
{
P3=0x00;
P1=ledcc[a];
P3=0x01;
P1=(ledcc[b]|0x80);
P3=0x02;
P1=ledcc[c];
P3=0x03;
P1=0x40;
}else
{
P3=0x00;
P1=ledcc[a];
P3=0x01;
P1=(ledcc[b]|0x80);
P3=0x02;
P1=0x40;
P3=0x03;
P1=0x00;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -