#include#include#include#defineINT8Uunsignedchar#defineINT16UunsignedintsbitDQ=P3^4;INT8UTemp_Value[]={0x00,0x00};#definedelay4us();{_nop_();...
#include#include#include#define INT8U unsigned char#define INT16U unsigned intsbit DQ=P3^4;INT8U Temp_Value[]={0x00,0x00};#define delay4us();{_nop_();_nop_();_nop_();_nop_();}void delay_ms(INT16U x) {INT8U i;while(x--) for(i=0;i<120;i++);}void DelayX(INT16U x){while(--x);}INT8U Init_DS18B20(){INT8U status;DQ=1; DelayX(8);DQ=0; DelayX(90);DQ=1; DelayX(5);status=DQ; DelayX(90);return status;}INT8U ReadOneByte(){INT8U i,dat=0x00;for (i=0x01;i!=0x00;i<<=1){DQ=0;_nop_();DQ=1;_nop_();if(DQ) dat |=i;DelayX(8);}return dat;}void WriteOneByte(INT8U dat){INT8U i;for (i=0;i<8;i++){DQ=0; dat>>=1;DQ=CY;DelayX(8);DQ=1;}}INT8U Read_Temperature(){if(Init_DS18B20()==1) return 0;else{WriteOneByte(0xCC);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xCC);WriteOneByte(0xBE);Temp_Value[0]=ReadOneByte();Temp_Value[1]=ReadOneByte();return 1;}}#include#include#include#define INT8U unsigned char#define INT16U unsigned int INT8U Temp_Diso_Buff[17];extern INT8U Temp_Value[];extern void LCD_Initialise();extern void LCD_ShowString(INT8U r,INT8U c,INT8U*str);extern void delay_ms(INT16U);extern INT8U Read_Temperature();void main(){float temp=0.0;LCD_Initialise();LCD_ShowString(0,0,"DS18B20 TEST");LCD_ShowString(1,0,"Waiting...");Read_Temperature();delay_ms(1500);while(1){if(Read_Temperature() ){temp=(int)(Temp_Value[1]<<8 | Temp_Value[0])*0.0625;sprintf(Temp_Diso_Buff,"TEMP:%5d\xDF\x43",temp);LCD_ShowString(1,0,Temp_Diso_Buff);}delay_ms(50);}}
展开