#include <STC15F2K60S2.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P1^4;
uchar tad[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar yi;er;
uchar wendu;
void allinit(void);
void disp(void);
uchar DS18b20_shiyong(void);
void main(void)
{
allinit();
while(1)
{
wendu=DS18b20_shiyong();
yi=wendu/10;er=wendu%10;
disp();
}
}
void allinit(void)
{
P2=0xa0;P0=0x00;
P2=0x80;P0=0xff;
P2=0xc0;P0=0xff;
P2=0xe0;P0=0xff;
}
void delay(uint i)
{
uint j,k;
for(j=0;j<i;j++)
for(k=0;k<845;k++);
}
void Delay100us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
void Delay500us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 6;
j = 93;
do
{
while (--j);
} while (--i);
}
void DS18b20_init(void)
{
DQ=0;
Delay500us();
DQ=1;
Delay500us();
}
void DS18b20_xie(uchar dat)
{
uint i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
Delay100us();
DQ=1;
dat>>=1;
}
}
uchar DS18b20_du(void)
{
uint i,temp;
for(i=0;i<8;i++)
{
DQ=0;
temp>>=1;
DQ=1;
if(DQ==1)
{
temp=temp|0x80;
}
Delay100us();
}
return temp;
}
uchar DS18b20_shiyong(void)
{
uchar gao,di,temp;
DS18b20_init();
DS18b20_xie(0xcc);
DS18b20_xie(0x44);
Delay500us();
Delay500us();
DS18b20_init();
DS18b20_xie(0xcc);
DS18b20_xie(0xbe);
di=DS18b20_du();
gao=DS18b20_du();
temp=gao<<4;
temp=temp|(di>>4);
return temp;
}
void disp(void)
{
P2=0xc0;P0=0x01;
P2=0xe0;P0=tad[yi];delay(5);
P2=0xc0;P0=0x02;
P2=0xe0;P0=tad[er];delay(5);
}
uj5u.com熱心網友回復:
18B20對時間要求比較嚴格,你可以試著將延時加長看看轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/72595.html
標籤:單片機/工控
上一篇:有沒有誰知道c52單片機播放音樂的C程式(要有按一次鍵就播放,再按一次就暫停,按另一個鍵就下一曲)
下一篇:嵌入式
