資源簡介
#include
#define uchar unsigned char
#define uint unsigned int
sbit led=P2^5;
sbit wei=P2^7;
sbit duan=P2^6;
sbit DQ=P2^2;
uchar mazhi_duan[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
uchar mazhi_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff};
void delayl(uint n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
void delays(uchar i)
{
while(i--);
}
bit init_DS18B20() //DS8B20初始化
{
bit x;
DQ=1; //DQ復位
delays(8);
DQ=0; //單片機將DQ拉低
delays(75);
DQ=1; //拉高總線
delays(15);
x=DQ; //延時過后 若x=0則初始化成功 若x=1則初始化失敗
delays(5);
return x;
}
void write_data(uchar dat)
{
uchar i,temp;
temp=dat;
DQ=1;
for(i=0;i>=1;
}
}
uchar read_data()
{
uchar i,dat;
DQ=1;
for(i=0;i>=1;
DQ=1;//配置為輸入
if(DQ)
dat|=0x80;
delays(4);
}
return dat;
}
uint readtemp()
{
uchar temph,templ;
uint temp;
float wendu;
init_DS18B20();
write_data(0xcc);//跳過ROM
write_data(0x44);//啟動溫度轉(zhuǎn)換
//delayl(100);
init_DS18B20();
write_data(0xcc);//跳過ROM
write_data(0xBE);//讀溫度
//以下讀溫度,低八位在前
//高8位在后
templ=read_data();
temph=read_data();
temp = (temph<<8)|templ;
wendu = temp*0.625+0.5;//溫度擴大10倍,四舍五入
temp = wendu;//10倍溫度
return temp;
}
void STC_init()
{
P1=0x00;//關閉led
led=0; //鎖存
wei=0;
duan=0;
}
void display(uchar weil,uchar duanl,bit dp)
{
wei=1;
P0=mazhi_wei[weil-1];
wei=0;
duan=1;
if(dp==1)
P0=(mazhi_duan[duanl]|0x80);
else
P0=mazhi_duan[duanl];
duan=0;
}
void main()
{
uchar i;
uint wendu;
STC_init();
wendu=readtemp();
delayl(500);
wendu=readtemp();
delayl(500);
while(1)
{
wendu=readtemp();
for(i=0;i<80;i++)
{
display(1,wendu/100,0);
delayl(3);
display(2,wendu0/10,1);
delayl(3);
display(3,wendu,0);
delayl(3);
}
}
}
代碼片段和文件信息
評論
共有 條評論