|
代码:
#include<reg51.h>
#include<intrins.h>
unsigned char code Str[] = {"Temperature Now"};
unsigned char code Error[]={"Error!No DS18B20"};
unsigned char code Temp[]={"Value:"};
unsigned char code digit[10]={"0123456789"};
unsigned char code Cent[]={0xdf,"C"};
sbit DQ=P3^3;
sbit E=P2^4;
sbit RW=P2^3;
sbit RS=P2^2;
sbit BF=P0^7;
void delay1ms()
{
unsigned char i,j;
for(i=0;i<8;i++)
for(j=0;j<40;j++);
}
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
bit BusyChek(void)
{
bit busy;
RS = 0;
RW = 1;
E = 1;
_nop_();_nop_();_nop_();_nop_();
busy=BF;
E=0;
return busy;
}
void WriteCommand(unsigned char dictate)
{
while(BusyChek()==1);
RS=0;
RW=0;
E=0;
_nop_();_nop_();;
P0=dictate;
_nop_();_nop_();_nop_();_nop_();;
E=1;
_nop_();_nop_();_nop_();_nop_();
E=0;
}
void WritePosition(unsigned char x)
{
WriteCommand(x|0x80);
}
void WriteASCII(unsigned char y)
{
while(BusyChek()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();_nop_();_nop_();_nop_();
E=1;
_nop_();_nop_();_nop_();_nop_();
E=0;
}
void LcdInit(void)
{
delaynms(16);
WriteCommand(0x38);
delaynms(5);
WriteCommand(0x38);
delaynms(5);
WriteCommand(0x0c);
delaynms(5);
WriteCommand(0x06);
delaynms(5);
WriteCommand(0x01);
delaynms(5);
}
unsigned char time;
bit Init_DS18B20(void)
{
bit flag;
DQ=1;
for(time=0;time<2;time++);
DQ=0;
for(time=0;time<200;time++);
DQ=1;
for(time=0;time<10;time++);
flag=DQ;
for(time=0;time<200;time++);
return (flag);
}
unsigned char ReadOneByte(void)
{
unsigned char i = 0;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
dat>>=1;
_nop_();
DQ=1;
for(time=0;time<2;time++);
if(DQ==1)
dat|=0x80;
else
dat|=0x00;
for(time=0;time<8;time++);
}
return(dat);
}
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
DQ=dat&0x01;
for(time=0;time<10;time++);
DQ=1;
for(time=0;time<1;time++);
dat>>=1;
}
for(time=0;time<5;time++);
return 0;
}
void Display_Error(void)
{
unsigned char i;
WritePosition(0x00);
i=0;
while(Error[i]!='\0')
{
WriteASCII(Error[i]);
i++;
delaynms(100);
}
while(1);
}
void Display_Explain(void)
{
unsigned char i;
WritePosition(0x00);
i=0;
while(Str[i]!='\0')
{
WriteASCII(Str[i]);
i++;
delaynms(100);
}
}
void Display_Symbol(void)
{
unsigned char i;
WritePosition(0x40);
i=0;
while(Temp[i]!='\0')
{
WriteASCII(Temp[i]);
i++;
delaynms(50);
}
}
void Display_Dot()
{
WritePosition(0x49);
WriteASCII('.');
delaynms(50);
}
void Display_Cent(void)
{
unsigned char i;
WritePosition(0x4c);
i=0;
while(Cent[i]!='\0')
{
WriteASCII(Cent[i]);
i++;
delaynms(50);
}
}
void Display_Integer(unsigned char x)
{
unsigned char u,v,w;
u=x/100;
v=(x%100)/10;
w=x%10;
WritePosition(0x46);
WriteASCII(digit[u]);
WriteASCII(digit[v]);
WriteASCII(digit[w]);
delaynms(50);
}
void Display_Decimal(unsigned char x)
{
WritePosition(0x4a);
WriteASCII(digit[x]);
delaynms(50);
}
void ReadyReadTemp(void)
{
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
for(time =0;time<100;time++);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xBE);
}
void main(void)
{
unsigned char TL;
unsigned char TH;
unsigned char TN;
unsigned char TD;
LcdInit();
delaynms(4);
if(Init_DS18B20()==1)
Display_Error();
Display_Explain();
Display_Symbol();
Display_Dot();
Display_Cent();
while(1)
{
ReadyReadTemp();
TL=ReadOneByte();
TH=ReadOneByte();
TN=TH*16+TL/16;
TD=(TL%16)*10/16;
Display_Integer(TN);
Display_Decimal(TD);
delaynms(10);
}
}
|
|