void DS18B20_ReSet(void)
{
uchar i;
DQ = 0;
i = 240;
while (--i);
DQ = 1;
i = 30;
while (--i);
while (~DQ);
i = 4;
while (--i);
void DS18B20_WriteByte(uchar dat)
{
uchar j;
uchar btmp;
for (j = 0; j < 8; j++)
{
btmp = 0x01;
btmp = btmp << j;
btmp = btmp & dat;
if (btmp > 0) // D′1
{
DQ = 0;
Delay15us();
DQ = 1;
Delay15us();
Delay15us();
Delay15us();
Delay15us();
}
else //
{
DQ = 0;
Delay15us();
Delay15us();
Delay15us();
Delay15us();
DQ = 1;
Delay15us();
}
}
int DS18B20_ReadTemp(void)
{
uchar j;
int b, temp = 0;
EA = 0;
DS18B20_ReSet();
DS18B20_WriteByte(0xcc);
DS18B20_WriteByte(0x44);
DS18B20_ReSet();
DS18B20_WriteByte(0xcc);
DS18B20_WriteByte(0xbe);
for (j = 0; j < 16; j++)
{
DQ = 0;
_nop_();
_nop_();
DQ = 1;
Delay15us();
b = DQ;
Delay15us();
Delay15us();
Delay15us();
b = b << j;
temp = temp | b;
}
EA = 1;
temp = temp * 0.0625+0.5;
return (temp);
}
void WaitForEnable(void)
{
P0 = 0xff;
LcdRs_P = 0;
LcdRw_P = 1;
_nop_();
LcdEn_P = 1;
_nop_();
_nop_();
while (P0 & 0x80);
LcdEn_P = 0;
}
void LcdWriteCmd(uchar cmd)
{
WaitForEnable();
LcdRs_P = 0;
LcdRw_P = 0;
LcdEn_P = 0;
P0 = cmd;
DelayMs(5);
LcdEn_P = 1;
DelayMs(5);
LcdEn_P = 0;
DelayMs(5);
}
void LcdWriteData(uchar dat)
{
WaitForEnable();
LcdRs_P = 1;
LcdRw_P = 0;
LcdEn_P = 0;
P0 = dat;
DelayMs(5);
LcdEn_P = 1;
DelayMs(5);
LcdEn_P = 0;
DelayMs(5);
}
void LcdInit()
{
LcdWriteCmd(0x38);
LcdWriteCmd(0x0C);
LcdWriteCmd(0x06);
LcdWriteCmd(0x01);
LcdWriteCmd(0x80);
}
void LcdGotoXY(uchar line, uchar column)
{
if (line == 0)
LcdWriteCmd(0x80 + (column & 0x0F));
if (line == 1)
LcdWriteCmd(0x80 + 0x40 + (column & 0x0F));
}
void LcdPrintStr(uchar *str)
{
while (*str != '\0')
LcdWriteData(*str++);
}
void LcdPrintNum1(uchar num)
{
LcdWriteData(0x30 + num%1000/100);
LcdWriteData(0x30 + num%100/10);
LcdWriteData(0x30 + num%10/1);
LcdWriteData('.');
LcdWriteData(0x30 + num/1);
}
void LcdPrintNum2(uint num)
{
if (num < 0)
LcdWriteData('-');
num = 0 - num;
}
else
{
LcdWriteData(0x30 + num%1000/100);
}
LcdWriteData(0x30 + num%100/10);
LcdWriteData(0x30 + num%10/1);
LcdWriteData('.');
LcdWriteData(0x30 + num/1);
}
|