📄 ds1820.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar tplsb,tpmsb;
sbit dq=P1^0;sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4;
uchar temp1,temp2,temp3;
uchar n,m,p,q ;
void delay(uint t)
{
uint i;
while(t--)
{
for(i=0;i<125;i++){}
}
}
void txreset(void)
{
uint i;
dq=0;
i=100;
while(i>0) i--;
dq=1;
i=4;
while(i>0) i--;
}
void rxwait(void)
{
uint i;
while(dq) ;
while(~dq);
i=4;
while (i>0) i--;
}
bit rdbit(void)
{
uint i;
bit b;
dq=0;
i++;
dq=1;
i++;i++;
b=dq;
i=8;
while(i>0) i--;
return(b);
}
uchar rdbyte(void)
{
uchar i,j,b;
b=0;
for(i=1;i<=8;i++){
j=rdbit();
b=(j<<7)|(b>>1);
}
return(b);
}
void wrbyte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp=b&0x01;
b=b>>1;
if(btmp)
{
dq=0;
i++;i++;
dq=1;
i=8;
while (i>0) i--;
}
else
{
dq=0;
i=8;
while(i>0) i--;
dq=1;
i++;i++;
}
}
}
void convert(void)
{
txreset();
rxwait();
delay(1);
wrbyte(0xcc);
wrbyte(0x44);
}
rdtemp(void)
{
unsigned char tplsb=0;
unsigned char tpmsb=0;
unsigned int t=0;
float tt=0;
txreset();
rxwait();
delay(1);
wrbyte(0xcc);
wrbyte(0xbe);
tplsb=rdbyte();
tpmsb=rdbyte();
t=tpmsb;
t<<=8;
t=t|tplsb;
tt=t*0.0625;
//t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
return(t);
}
void getcode(uchar x)
{
switch(x) //个位
{
case 0:P0=0XA0;break;
case 1:P0=0XBB;break;
case 2:P0=0X62;break;
case 3:P0=0X2A;break;
case 4:P0=0X39;break;
case 5:P0=0X2C;break;
case 6:P0=0X24;break;
case 7:P0=0XBA;break;
case 8:P0=0x20;break;
case 9:P0=0x28;break;
default:break; }
}
void getcode2(uchar x)
{
switch(x) //个位
{
case 0:P0=0x80;break;
case 1:P0=0x9b;break;
case 2:P0=0x42;break;
case 3:P0=0x0a;break;
case 4:P0=0x19;break;
case 5:P0=0x0c;break;
case 6:P0=0x04;break;
case 7:P0=0x9a;break;
case 8:P0=0x00;break;
case 9:P0=0x08;break;
default:break; }
}
void display()
{
P2=0xbf;
getcode2(temp1%10); // 个位
delay(2);
P0=0xff;
P2=0x7f;
getcode(temp1/10); // 十位
delay(2);
P0=0xff;
P2=0xef;
getcode(temp2%10);
delay(2);
P0=0xff;
P2=0xdf;
getcode(temp2/10);
delay(2);
P0=0xff;
}
void display2()
{
P2=0xbf;
getcode2(temp3%10); // 个位
delay(2);
P0=0xff;
P2=0x7f;
getcode(temp3/10); // 十位
delay(2);
P0=0xff;
}
void bijiao()
{
if(temp1<temp3) p14=0;
else p14=1;
}
void setting()
{
while(p13)
{
if(p11==0) {temp3+=1; delay(400);}
if(p12==0) {temp3-=1; delay(400);}
display2();
}
}
void int1() interrupt 0 using 1{
P2=0xbf;
getcode2(temp3%10);
delay(2);
P0=0xff;
P2=0x7f;
getcode(temp3/10);
delay(2);
P0=0xff;
IE=0x80;
setting();
}
void main(void)
{
unsigned char i=0;
IE=0x81;
p14=1;
temp3=40;
do
{ IE=0x81;
delay(1);
convert();
i=rdtemp();
bijiao();
display();
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -