📄 ds18b20成功版.txt
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define point 0x80
#define nul 0
sbit dq= P2^2;
sbit we=P2^7;
sbit de=P2^6;
int temper;
uchar cc;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x02,0
};
void show0(uint);
void show1(uint);
void shuma(uint,uint);
void process(uchar,uchar);
void delay(uint us){
int s;
for(s=0;s<us;s++);
}
void rst(){
dq=1;
delay(2);
dq=0;
delay(40); //精确延时 480~960us
dq=1;
delay(18);
}
uint read(){
int i;
uint u=0;
for(i=0;i<8;i++){
dq=1;
delay(1);
dq=0;
u>>=1;
dq=1;
if(dq)u|=0x80;
delay(4);
}
return(u);
}
void write(uchar ku){
int i;
for(i=0;i<8;i++){
dq=0;
dq=ku&0x01;
delay(3);
dq=1;
ku>>=1;
}
}
void read0(){
uchar tpl;
uchar tph;
rst();
write(0xcc);
write(0x44);
rst();
write(0xcc);
cc=0xfe;
write(0xbe);
tpl=read();
tph=read();
process(tpl,tph);
}
void main(void){
while(1){
read0();//读温度子程序读到的温度放在全局变量temper
//中可以直接显示这个的内容
}
}
void process(uchar l,uchar h){
uchar b,c,d;
float a;
if(h&0xf0==0xf0){
shuma(17,nul);
cc=_crol_(cc,1);
}
else{
shuma(18,nul);
cc=_crol_(cc,1);}
d=h&0x0f;
c=l&0xf0;
b=_crol_(d,4)+_cror_(c,4);
shuma(b/10,nul);cc=_crol_(cc,1);
shuma(b%10,point);cc=_crol_(cc,1);
a=(l&0x0f)*0.625;
shuma((int)a,nul);cc=_crol_(cc,1);
shuma(((int)(a*10))%10,nul);
}
void shuma(uint aa,uint N_or_P){
we=1;
P0=cc;
we=0;
de=1;
P0=table[aa]+N_or_P;
delay(50);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -