#include?lt;REGX52.Hgt;
#include?lt;stdio.hgt;
#include?"LCD1602.h"
#include?"DS1302.h"
sbit?DQ=P3^0; //ds18b20?port
unsigned?int?ReadTemperature(void); p> p>
bit?Init_DS18B20(void);
unsigned?char?ReadOneChar(void);
void?WriteOneChar(unsigned?char?dat); p>
void?DelayUs2x(unsigned?char);
void?Delay1ms(unsigned?int);
/*----------- -- ---------------------------------- Nombre: sensor de temperatura 18B20 Sitio web: www.doflye.net Escrito por : shifang Fecha: 2009.5 Modificación: Ninguna Contenido: programa de muestra de aplicación de detección de temperatura de una sola línea 18B20
------------------------ ----------------------*/
/*---------------- -- --------------------------
Inicialización 18b20
----- - --------------------------------------------------* /
bit?Init_DS18B20(void)
{ bit?dat=0; DQ?=?1; //Reinicio de DQ DelayUs2x(5); //Retraso leve DQ?= ?0;? //El microcontrolador baja DQ DelayUs2x(200);?//¿Retraso preciso? Mayor que?480us? Menos de 960us DelayUs2x(200); );?//15 Después de ~60us?, recibe el pulso de existencia de 60-240us dat=DQ; //Si x=0, la inicialización es exitosa, si x=1, la inicialización falla DelayUs2x(25);?/ /Regreso después de un ligero retraso return?dat
}
void?DelayUs2x(unsigned?char?t)
{ while(--t);
}
}
}
p>
/*------------ ---------------------------------- -----
Leer un byte
-------------------------- ------------------ -----*/
unsigned?char?ReadOneChar(void)
{
unsigned?char?i=0;
unsigned?char?dat?=?0;
for?(i=8;igt;0;i-- ) { DQ?=?0;?//?Dar señal de pulso datgt; gramo
t;=1; DQ?=?1;?//?Dar señal de pulso if(DQ)
dat|=0x80; DelayUs2x(25); p>}
/*-------------------------------- -------- ----------
Escribir un byte
--------------- ------ -----------------*/
void?WriteOneChar(unsigned?char?dat )
{ unsigned?char?i=0; para?(i=8;?igt;0;?i--) { DQ?=?0; (25); DQ ?=?1; datgt;gt;=1; }
DelayUs2x(25);
}
/*--- ----- ----------------------------------------
Leer temperatura
----------------------------------------------- --------- -----*/
unsigned?int?ReadTemperature(void)
{
unsigned?char? a=0;
unsigned?int?b=0;
unsigned?int?t=0;
Init_DS18B20();
WriteOneChar(0xCC);?/ /?Omitir la operación de lectura del número de serie
WriteOneChar(0x44);?//?Iniciar conversión de temperatura
Delay1ms(10);
Init_DS18B20( );
WriteOneChar(0xCC);?//¿Omitir la operación de lectura del número de serie?
WriteOneChar(0xBE);?// Leer el registro de temperatura, etc. (*** ¿Se pueden leer 9 registros? Los dos primeros son temperatura
a=ReadOneChar() //bit bajo
b=ReadOneChar). (); //bit alto
blt;lt;=8;
t=a b;
return(t);
}
void?Delay1ms( unsigned?int?count)
{
unsigned?int?i,j;
para (i=0;ilt;count;i) p>
for(j=0;jlt;120;j);
}
main()
{
SYSTEMTIME?CurrentTime;
int?temp;
float?temperatura;
unsigned?char ?dist[4];
LCD_Initial();
Inicial_DS1302();
Init_DS18B20()
GotoXY(14, 0);
Imprimir(" .");
Ir aXY(15,1)
;
Imprimir("C");
while(1)
{
DS1302_GetTime(amp; CurrentTime); p>
p>
TimeToStr(amp; CurrentTime);
DateToStr(amp; CurrentTime
GotoXY(0, 0);
GotoXY(2, 0);
Imprimir(CurrentTime.DateString
GotoXY(0, 1); > Print(CurrentTime. TimeString);
temp=ReadTemperature();
temperatura=(float)temp*0.0625
sprintf(dist, "4f ", temperatura);
GotoXY(9, 1);
Imprimir(dist);
Delay1ms(400);
}
}