{ if(i==48)
LCD12864_SetWindow(3,0); }
}
}
DS18B20.c(温度测量)
#include\
int temperature; int temp_flag;
void delay12(int i){ while(i--); }
void ds18b20_init(){ uchar x=0; dq = 1; delay12(8); dq = 0; delay12(80); dq = 1; delay12(14); x=dq; delay12(20); }
uchar ds18b20_read(){ uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { dq = 0; dat>>=1; dq = 1; if(dq) dat|=0x80; delay12(4); }
return(dat); }
void ds18b20_write(char dat){
36
uchar i=0;
for (i=8; i>0; i--) { dq = 0; dq = dat&0x01; delay12(5); dq = 1; dat>>=1; } }
int ds18b20_read_temp() {
uchar low; uchar high;
unsigned long tmp; float value; int t;//温度 ds18b20_init();
ds18b20_write(0xCC); ds18b20_write(0x44); ds18b20_init();
ds18b20_write(0xCC); ds18b20_write(0xBE); low=ds18b20_read(); high=ds18b20_read();
tmp=high; tmp<<=8; tmp=tmp|low;
if(tmp>=63488){//ffff f000 0000 0000-->(f800) temp_flag=0; if((~low)==0xff){ high=(~high)+1; low=0; }else{ high=~high; low=(~low)+1; } tmp=high*256+low; }else{ temp_flag=1; }
value=tmp*0.0625;
t=value*10+((temp_flag==1)?+0.5:-0.5);
37
return t; }
void DS18B20(void)
{ uchar bai,shi,ge,point,fuhao; LCD12864_WriteCmd(0x88+2); temperature=ds18b20_read_temp(); bai=temperature/1000+0x30;
shi=temperature00/100+0x30; ge=temperature0/10+0x30; point=temperature0+0x30; if(temp_flag==1){ fuhao=0x20; if(bai==0x30){ bai=0x20; if(shi==0x30){ shi=0x20; } } LCD12864_SetWindow(3, 0); LCD12864_WriteData(fuhao); LCD12864_WriteData(bai); LCD12864_WriteData(shi); } else { fuhao=0x2d; LCD12864_WriteData(0x20); if(shi==0x30){ LCD12864_WriteData(0x20); LCD12864_WriteData(fuhao); }else{ LCD12864_WriteData(fuhao); LCD12864_WriteData(shi); } LCD12864_SetWindow(3, 0); }
LCD12864_WriteData(ge); LCD12864_WriteData('.'); LCD12864_WriteData(point); LCD12864_WriteData(' '); LCD12864_WriteData(0xdf); LCD12864_WriteData('C'); }
38