uint tvalue;//温度值 uchar tflag; uchar count,s1num;
uchar code table[]=\ WL: %uchar code table1[]=\ NOW: %uchar dispbuf[3]; ulong temp;
uchar getdata; //获取ADC转换回来的值
void delay(uint z) { uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************************************************************************************************************/ uint sound(uint k) {uint i;
while(busy==0); rest=1; delay(1); rest=0; for(i=k;i>0;i--) {dat=1; delay(1); dat=0; } return(1); }
31
报
数
程
序
/*********************************************/
/**********************************************/ void write_com(uchar com) { }
/*********************************************/ void write_date(uchar date) { }
/***********************************************/ void init() {
uchar num; lcden=0; rs=1; rd=0; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; rs=0; rd=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;
32
write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);
for(num=0;num<15;num++)
{ }
write_date(table[num]); delay(5);
write_com(0x80+0x40); for(num=0;num<15;num++) }
{ }
write_date(table1[num]); delay(5);
/********************************************************/ void displayTL() {write_com(0xc3);
write_date(TL/10+0x30);//温度上限十位 write_com(0xc4);
write_date(TL+0x30);//温度上限个位 }
void displayWH() {write_com(0x83);
write_date(WH/100+0x30);
write_date(WH/10+0x30);//水位上限十位 write_date(WH+0x30);//水位上限个位 }
33
void displayWL() {write_com(0x89);
write_date(WL/10+0x30);//水位上限十位 write_date(WL+0x30);//水位上限个位 }
/**************************************************/ void delay_18B20(uint i)//延时1微秒 { }
/**************************************************/ void ds1820rst()/*ds1820复位*/ { uchar x=0;
DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); while(i--);
}
uchar ds1820rd()/*读数据*/ { uchar i=0;
uchar dat = 0; for (i=8;i>0;i--)
{ DQ = 0; //给脉冲信号
dat>>=1;
DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10);
34
}
} return(dat);
/**************************************************/ void ds1820wr(uchar wdata)/*写数据*/ {uchar i=0; for (i=8; i>0; i--) { DQ = 0;
DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } }
read_temp()/*读取温度值并转换*/ {uchar a,b; ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) {tflag=0; }
35